diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-01-28 16:55:54 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-01-28 16:55:54 -0700 |
| commit | 974d69ea3d0db71b97af00e325fdfb421c0906c2 (patch) | |
| tree | 05c145b633277b78735765d8f9c15f78d504b2ed /src/codegen.cpp | |
| parent | bb4f7835286f047fc596715101ee0318c8e7f924 (diff) | |
| download | zig-974d69ea3d0db71b97af00e325fdfb421c0906c2.tar.gz zig-974d69ea3d0db71b97af00e325fdfb421c0906c2.zip | |
ability to call member functions directly
see #14
Diffstat (limited to 'src/codegen.cpp')
| -rw-r--r-- | src/codegen.cpp | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp index 6f4ba6c58f..97b03d14db 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -496,16 +496,25 @@ static LLVMValueRef gen_fn_call_expr(CodeGen *g, AstNode *node) { assert(struct_type->data.pointer.child_type->id == TypeTableEntryIdStruct); fn_table_entry = node->data.fn_call_expr.fn_entry; } else if (struct_type->id == TypeTableEntryIdMetaType) { - TypeTableEntry *enum_type = get_type_for_type_node(first_param_expr); - 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); + TypeTableEntry *child_type = get_type_for_type_node(first_param_expr); + + if (child_type->id == TypeTableEntryIdEnum) { + 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, child_type, arg1_node); + } else if (child_type->id == TypeTableEntryIdStruct) { + struct_type = nullptr; + first_param_expr = nullptr; + fn_table_entry = node->data.fn_call_expr.fn_entry; } else { - assert(param_count == 0); - arg1_node = nullptr; + zig_unreachable(); } - return gen_enum_value_expr(g, fn_ref_expr, enum_type, arg1_node); } else { zig_unreachable(); } |
