From 9c775d21112bad6d1135c9275147dff9abb954ac Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Wed, 6 Jan 2016 02:05:45 -0700 Subject: [PATCH] codegen: fix member function invocation --- example/rand/main.zig | 4 ++-- src/codegen.cpp | 9 ++++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/example/rand/main.zig b/example/rand/main.zig index c4bb90cb75..6d277ca80b 100644 --- a/example/rand/main.zig +++ b/example/rand/main.zig @@ -9,8 +9,8 @@ const ARRAY_SIZE : u16 = 624; struct Rand { // TODO use ARRAY_SIZE here array: [624]u32, - // TODO use ARRAY_SIZE here - index: #typeof(624), + // TODO use #typeof(ARRAY_SIZE) here + index: u16, /// Get 32 bits of randomness. pub fn get_u32(r: &Rand) -> u32 { 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;