authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-07 11:34:04-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-07 11:34:24-07:00
logee22e872967947d2f6e64cba888bf7bf56e4d332
tree02935f88bf83494ea3a4da056206e64ed9f2cfc3
parent1d4c66b56beb7b2da6bafbab6871691641c8da0b

generic functions use correct type for generic args

See #22

2 files changed, 7 insertions(+), 2 deletions(-)

src/analyze.cpp+2-2
......@@ -4667,8 +4667,8 @@ static TypeTableEntry *analyze_generic_fn_call(CodeGen *g, ImportTableEntry *imp
46674667
46684668 AstNode **generic_param_type_node = &generic_param_decl_node->data.param_decl.type;
46694669
4670 TypeTableEntry *expected_param_type = analyze_expression(g, decl_node->owner,
4671 decl_node->owner->block_context, nullptr, *generic_param_type_node);
4670 TypeTableEntry *expected_param_type = analyze_type_expr(g, decl_node->owner,
4671 decl_node->owner->block_context, *generic_param_type_node);
46724672 if (expected_param_type->id == TypeTableEntryIdInvalid) {
46734673 return expected_param_type;
46744674 }
test/self_hosted.zig+5
......@@ -516,12 +516,17 @@ three)";
516516fn simple_generic_fn() {
517517 assert(max(i32)(3, -1) == 3);
518518 assert(max(f32)(0.123, 0.456) == 0.456);
519 assert(add(2)(3) == 5);
519520}
520521
521522fn max(T: type)(a: T, b: T) -> T {
522523 return if (a > b) a else b;
523524}
524525
526fn add(a: i32)(b: i32) -> i32 {
527 return a + b;
528}
529
525530
526531#attribute("test")
527532fn constant_equal_function_pointers() {