mirror of
https://github.com/c3lang/c3c.git
synced 2026-02-27 12:01:16 +00:00
Enum inference, like Foo x = $eval("A"), now works correctly for $eval.
This commit is contained in:
@@ -86,6 +86,7 @@
|
||||
- Make `log` and `exp` no-strip.
|
||||
- `@test`/`@benchmark` on module would attach to interface and regular methods.
|
||||
- Deprecated `@select` in favor of `???`.
|
||||
- Enum inference, like `Foo x = $eval("A")`, now works correctly for `$eval`.
|
||||
|
||||
### Stdlib changes
|
||||
- Add `==` to `Pair`, `Triple` and TzDateTime. Add print to `Pair` and `Triple`.
|
||||
|
||||
@@ -11821,6 +11821,9 @@ RETRY:
|
||||
case EXPR_RETHROW:
|
||||
if (!sema_expr_analyse_rethrow(context, expr, original_type)) return expr_poison(expr);
|
||||
break;
|
||||
case EXPR_CT_EVAL:
|
||||
if (!sema_expr_resolve_ct_eval(context, expr)) return expr_poison(expr);
|
||||
goto RETRY;
|
||||
case EXPR_UNARY:
|
||||
if (to && expr->unary_expr.operator == UNARYOP_TADDR && to->canonical->type_kind == TYPE_POINTER && to->canonical != type_voidptr)
|
||||
{
|
||||
|
||||
20
test/test_suite/compile_time/ct_eval_infer.c3t
Normal file
20
test/test_suite/compile_time/ct_eval_infer.c3t
Normal file
@@ -0,0 +1,20 @@
|
||||
module test;
|
||||
import std;
|
||||
|
||||
enum Foo
|
||||
{
|
||||
A, B
|
||||
}
|
||||
|
||||
struct Test
|
||||
{
|
||||
Foo a;
|
||||
}
|
||||
fn void main()
|
||||
{
|
||||
|
||||
var $member = Test.membersof[0];
|
||||
Test x;
|
||||
x.a = $eval("A");
|
||||
io::printn(x);
|
||||
}
|
||||
Reference in New Issue
Block a user