aboutsummaryrefslogtreecommitdiff
path: root/src/analyze.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-02-04 02:11:50 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-02-04 02:11:50 -0700
commitfdadab40c61a6f70a65472cc95ccd5ba52c01772 (patch)
treef471173c1e54a3cd4e35759970adfcd36c991c0b /src/analyze.cpp
parent3a9009b08e278dafd7b59b7d09408c80ea67f1fe (diff)
downloadzig-fdadab40c61a6f70a65472cc95ccd5ba52c01772.tar.gz
zig-fdadab40c61a6f70a65472cc95ccd5ba52c01772.zip
implement constant values for enums with payload
Diffstat (limited to 'src/analyze.cpp')
-rw-r--r--src/analyze.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index c0fc33ba08..5aad26cf34 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -973,6 +973,7 @@ static void resolve_enum_type(CodeGen *g, ImportTableEntry *import, TypeTableEnt
if (!enum_type->data.enumeration.is_invalid) {
enum_type->data.enumeration.gen_field_count = gen_field_index;
+ enum_type->data.enumeration.union_type = biggest_union_member;
TypeTableEntry *tag_type_entry = get_smallest_unsigned_int_type(g, field_count);
enum_type->data.enumeration.tag_type = tag_type_entry;
@@ -2034,6 +2035,9 @@ static TypeTableEntry *analyze_enum_value_expr(CodeGen *g, ImportTableEntry *imp
codegen->type_entry = enum_type;
codegen->source_node = field_access_node;
context->struct_val_expr_alloca_list.append(codegen);
+
+ Expr *expr = get_resolved_expr(field_access_node);
+ expr->const_val.ok = false;
} else if (type_enum_field->type_entry->id != TypeTableEntryIdVoid) {
add_node_error(g, field_access_node,
buf_sprintf("enum value '%s.%s' requires parameter of type '%s'",