aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-01-06 02:05:45 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-01-06 02:05:45 -0700
commit9c775d21112bad6d1135c9275147dff9abb954ac (patch)
treeeba38d476146336024d611fdb6c5a596f9c8af81 /src/codegen.cpp
parent66eee5a06b60b328daaf11458d1f520c5824d62e (diff)
downloadzig-9c775d21112bad6d1135c9275147dff9abb954ac.tar.gz
zig-9c775d21112bad6d1135c9275147dff9abb954ac.zip
codegen: fix member function invocation
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 403261acc4..e2bbdfc656 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -150,7 +150,14 @@ static LLVMValueRef gen_fn_call_expr(CodeGen *g, AstNode *node) {
Buf *name = &fn_ref_expr->data.field_access_expr.field_name;
first_param_expr = fn_ref_expr->data.field_access_expr.struct_expr;
struct_type = get_expr_type(first_param_expr);
- fn_table_entry = struct_type->data.structure.fn_table.get(name);
+ if (struct_type->id == TypeTableEntryIdStruct) {
+ fn_table_entry = struct_type->data.structure.fn_table.get(name);
+ } else if (struct_type->id == TypeTableEntryIdPointer) {
+ assert(struct_type->data.pointer.child_type->id == TypeTableEntryIdStruct);
+ fn_table_entry = struct_type->data.pointer.child_type->data.structure.fn_table.get(name);
+ } else {
+ zig_unreachable();
+ }
} else if (fn_ref_expr->type == NodeTypeSymbol) {
Buf *name = hack_get_fn_call_name(g, fn_ref_expr);
struct_type = nullptr;