From ff6e21cb879397982cddf3cf5f47bba681271a2c Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Wed, 31 Aug 2016 18:29:51 +0100 Subject: Fix subtype polymorphism --- src/checker/expr.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/checker/expr.cpp') diff --git a/src/checker/expr.cpp b/src/checker/expr.cpp index 0b9c056ef..81a8a3d10 100644 --- a/src/checker/expr.cpp +++ b/src/checker/expr.cpp @@ -15,7 +15,7 @@ void update_expr_type (Checker *c, AstNode *e, Type *type, b32 fina -b32 check_is_assignable_to_using_subtype(Checker *c, Type *dst, Type *src) { +b32 check_is_assignable_to_using_subtype(Type *dst, Type *src) { Type *prev_src = src; // Type *prev_dst = dst; src = get_base_type(type_deref(src)); @@ -35,6 +35,10 @@ b32 check_is_assignable_to_using_subtype(Checker *c, Type *dst, Type *src) { return true; } } + b32 ok = check_is_assignable_to_using_subtype(dst, f->type); + if (ok) { + return true; + } } } } @@ -91,7 +95,7 @@ b32 check_is_assignable_to(Checker *c, Operand *operand, Type *type, b32 is_argu if (is_argument) { // NOTE(bill): Polymorphism for subtyping - if (check_is_assignable_to_using_subtype(c, type, src)) { + if (check_is_assignable_to_using_subtype(type, src)) { return true; } } -- cgit v1.2.3