Enum inference, like Foo x = $eval("A"), now works correctly for $eval.

This commit is contained in:
Christoffer Lerno
2025-08-30 15:24:11 +02:00
parent b757f1447b
commit fafcf3d0a9
3 changed files with 24 additions and 0 deletions

View File

@@ -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`.

View File

@@ -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)
{

View 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);
}