authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-06 02:05:45-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-01-06 02:05:45-07:00
log9c775d21112bad6d1135c9275147dff9abb954ac
treeeba38d476146336024d611fdb6c5a596f9c8af81
parent66eee5a06b60b328daaf11458d1f520c5824d62e

codegen: fix member function invocation


2 files changed, 10 insertions(+), 3 deletions(-)

example/rand/main.zig+2-2
...@@ -9,8 +9,8 @@ const ARRAY_SIZE : u16 = 624;...@@ -9,8 +9,8 @@ const ARRAY_SIZE : u16 = 624;
9struct Rand {9struct Rand {
10 // TODO use ARRAY_SIZE here10 // TODO use ARRAY_SIZE here
11 array: [624]u32,11 array: [624]u32,
12 // TODO use ARRAY_SIZE here12 // TODO use #typeof(ARRAY_SIZE) here
13 index: #typeof(624),13 index: u16,
1414
15 /// Get 32 bits of randomness.15 /// Get 32 bits of randomness.
16 pub fn get_u32(r: &Rand) -> u32 {16 pub fn get_u32(r: &Rand) -> u32 {
src/codegen.cpp+8-1
...@@ -150,7 +150,14 @@ static LLVMValueRef gen_fn_call_expr(CodeGen *g, AstNode *node) {...@@ -150,7 +150,14 @@ static LLVMValueRef gen_fn_call_expr(CodeGen *g, AstNode *node) {
150 Buf *name = &fn_ref_expr->data.field_access_expr.field_name;150 Buf *name = &fn_ref_expr->data.field_access_expr.field_name;
151 first_param_expr = fn_ref_expr->data.field_access_expr.struct_expr;151 first_param_expr = fn_ref_expr->data.field_access_expr.struct_expr;
152 struct_type = get_expr_type(first_param_expr);152 struct_type = get_expr_type(first_param_expr);
153 fn_table_entry = struct_type->data.structure.fn_table.get(name);153 if (struct_type->id == TypeTableEntryIdStruct) {
154 fn_table_entry = struct_type->data.structure.fn_table.get(name);
155 } else if (struct_type->id == TypeTableEntryIdPointer) {
156 assert(struct_type->data.pointer.child_type->id == TypeTableEntryIdStruct);
157 fn_table_entry = struct_type->data.pointer.child_type->data.structure.fn_table.get(name);
158 } else {
159 zig_unreachable();
160 }
154 } else if (fn_ref_expr->type == NodeTypeSymbol) {161 } else if (fn_ref_expr->type == NodeTypeSymbol) {
155 Buf *name = hack_get_fn_call_name(g, fn_ref_expr);162 Buf *name = hack_get_fn_call_name(g, fn_ref_expr);
156 struct_type = nullptr;163 struct_type = nullptr;