From 3a3d415295f061a2ad530a76e0e3c100be4c026b Mon Sep 17 00:00:00 2001 From: Joseph Battelle Date: Wed, 16 Sep 2020 12:32:57 -0700 Subject: [PATCH] Fix issue #486 Use `check_is_assignable_to_using_subtype` in `is_polymorphic_type_assignable`. The polymorphic procedure in #486 can now also be written without the cast: ```odin print_entity :: proc(e : ^$E, p : proc(^$T) = print_base) { p(e); } ``` --- src/check_expr.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/check_expr.cpp b/src/check_expr.cpp index aea72c9b3..9a48aadb7 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -852,6 +852,10 @@ bool is_polymorphic_type_assignable(CheckerContext *c, Type *poly, Type *source, return false; case Type_Pointer: if (source->kind == Type_Pointer) { + isize level = check_is_assignable_to_using_subtype(source->Pointer.elem, poly->Pointer.elem); + if (level > 0) { + return true; + } return is_polymorphic_type_assignable(c, poly->Pointer.elem, source->Pointer.elem, true, modify_type); } return false;