codegen: fix member function invocation

This commit is contained in:
Andrew Kelley 2016-01-06 02:05:45 -07:00
parent 66eee5a06b
commit 9c775d2111
2 changed files with 10 additions and 3 deletions

View File

@ -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 {

View File

@ -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;