num->value.l = next_assign_value;
num->type_node = enum_node->backing;
num->type = enum_node->backing_type;
+ num->flags |= Ast_Flag_Comptime;
(*value)->value = num;
}
+ (*value)->flags |= Ast_Flag_Comptime;
+
if (enum_node->flags & Ast_Flag_Enum_Is_Flags) {
next_assign_value <<= 1;
} else {
assert(node->flags & Ast_Flag_Comptime);
switch (node->kind) {
- case Ast_Kind_Binary_Op: return (AstTyped *) ast_reduce_binop(a, (AstBinaryOp *) node);
- case Ast_Kind_Unary_Op: return (AstTyped *) ast_reduce_unaryop(a, (AstUnaryOp *) node);
- case Ast_Kind_NumLit: return node;
- default: return NULL;
+ case Ast_Kind_Binary_Op: return (AstTyped *) ast_reduce_binop(a, (AstBinaryOp *) node);
+ case Ast_Kind_Unary_Op: return (AstTyped *) ast_reduce_unaryop(a, (AstUnaryOp *) node);
+ case Ast_Kind_NumLit: return node;
+ case Ast_Kind_Enum_Value: return (AstTyped *) ast_reduce(a, (AstTyped *) ((AstEnumValue *) node)->value);
+ default: return NULL;
}
}
break;
}
+ case Ast_Kind_Enum_Value: {
+ AstEnumValue* ev = (AstEnumValue *) node;
+ emit_raw_data(mod, data, (AstTyped *) ev->value);
+ break;
+ }
+
case Ast_Kind_NumLit: {
// NOTE: This makes a big assumption that we are running on a
// little endian machine, since WebAssembly is little endian