aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-04-19 18:52:09 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-04-19 18:52:09 -0700
commit36c6acfc76eeeed1498b5cc9ecb3137214e69bbf (patch)
tree40e2ffa30130a2ed1dd8f5674843237b108176f6 /src/codegen.cpp
parent7a7f83033c3fee3e92046b76dd33b9f8ded4f0fd (diff)
downloadzig-36c6acfc76eeeed1498b5cc9ecb3137214e69bbf.tar.gz
zig-36c6acfc76eeeed1498b5cc9ecb3137214e69bbf.zip
enum init uses container init syntax instead of fn call
See #5
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp29
1 files changed, 16 insertions, 13 deletions
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);