From: Brendan Hansen Date: Tue, 22 Dec 2020 04:21:45 +0000 (-0600) Subject: enum values are compile time known X-Git-Url: https://git.brendanfh.com/?a=commitdiff_plain;h=20b18b9022d069aecc43d14b15cd51d37cf0e625;p=onyx.git enum values are compile time known --- diff --git a/onyx b/onyx index c7d6c45a..f45df9c9 100755 Binary files a/onyx and b/onyx differ diff --git a/src/onyxsymres.c b/src/onyxsymres.c index 873fa80e..e3327c8e 100644 --- a/src/onyxsymres.c +++ b/src/onyxsymres.c @@ -832,9 +832,12 @@ static void symres_enum(AstEnumType* enum_node) { 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 { diff --git a/src/onyxutils.c b/src/onyxutils.c index 9111404e..714f47f4 100644 --- a/src/onyxutils.c +++ b/src/onyxutils.c @@ -380,10 +380,11 @@ AstTyped* ast_reduce(bh_allocator a, AstTyped* node) { 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; } } diff --git a/src/onyxwasm.c b/src/onyxwasm.c index 357fa062..a8773361 100644 --- a/src/onyxwasm.c +++ b/src/onyxwasm.c @@ -3004,6 +3004,12 @@ static void emit_raw_data(OnyxWasmModule* mod, ptr data, AstTyped* node) { 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