From 36c6acfc76eeeed1498b5cc9ecb3137214e69bbf Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Tue, 19 Apr 2016 18:52:09 -0700 Subject: enum init uses container init syntax instead of fn call See #5 --- src/codegen.cpp | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) (limited to 'src/codegen.cpp') diff --git a/src/codegen.cpp b/src/codegen.cpp index aa383b9c3b..8aebdf14bd 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -764,23 +764,11 @@ static LLVMValueRef gen_fn_call_expr(CodeGen *g, AstNode *node) { return gen_cast_expr(g, node); } - AstNode *fn_ref_expr = node->data.fn_call_expr.fn_ref_expr; - if (node->data.fn_call_expr.enum_type) { - int param_count = node->data.fn_call_expr.params.length; - AstNode *arg1_node; - if (param_count == 1) { - arg1_node = node->data.fn_call_expr.params.at(0); - } else { - assert(param_count == 0); - arg1_node = nullptr; - } - return gen_enum_value_expr(g, fn_ref_expr, node->data.fn_call_expr.enum_type, arg1_node); - } - FnTableEntry *fn_table_entry = node->data.fn_call_expr.fn_entry; TypeTableEntry *struct_type = nullptr; AstNode *first_param_expr = nullptr; + AstNode *fn_ref_expr = node->data.fn_call_expr.fn_ref_expr; if (fn_ref_expr->type == NodeTypeFieldAccessExpr && fn_ref_expr->data.field_access_expr.is_member_fn) { @@ -2207,6 +2195,21 @@ static LLVMValueRef gen_container_init_expr(CodeGen *g, AstNode *node) { TypeTableEntry *type_entry = get_expr_type(node); + + if (node->data.container_init_expr.enum_type) { + int param_count = node->data.container_init_expr.entries.length; + AstNode *arg1_node; + if (param_count == 1) { + arg1_node = node->data.container_init_expr.entries.at(0); + } else { + assert(param_count == 0); + arg1_node = nullptr; + } + return gen_enum_value_expr(g, node->data.container_init_expr.type, + node->data.container_init_expr.enum_type, arg1_node); + } + + if (type_entry->id == TypeTableEntryIdStruct) { assert(node->data.container_init_expr.kind == ContainerInitKindStruct); -- cgit v1.2.3