From 5df854fcef6d3c37f3703ed5568ef7de8ca6719e Mon Sep 17 00:00:00 2001 From: Ginger Bill Date: Tue, 27 Jun 2017 15:58:53 +0100 Subject: Fixed demo --- src/checker.cpp | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'src/checker.cpp') diff --git a/src/checker.cpp b/src/checker.cpp index 051020ae6..f490a2a23 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1448,19 +1448,10 @@ void check_procedure_overloading(Checker *c, Entity *e) { TokenPos pos = q->token.pos; - if (q->type == NULL) { + if (q->type == NULL || q->type == t_invalid) { continue; } - if (is_type_proc(q->type)) { - TypeProc *ptq = &base_type(q->type)->Proc; - if (ptq->is_generic) { - q->type = t_invalid; - error(q->token, "Polymorphic procedure `%.*s` cannot be overloaded", LIT(name)); - continue; - } - } - ProcTypeOverloadKind kind = are_proc_types_overload_safe(p->type, q->type); switch (kind) { case ProcOverload_Identical: @@ -1480,6 +1471,10 @@ void check_procedure_overloading(Checker *c, Entity *e) { error(p->token, "Overloaded procedure `%.*s` as the same parameters but different results in this scope", LIT(name)); is_invalid = true; break; + case ProcOverload_Polymorphic: + error(p->token, "Overloaded procedure `%.*s` has a polymorphic counterpart in this scope which is not allowed", LIT(name)); + is_invalid = true; + break; case ProcOverload_ParamCount: case ProcOverload_ParamTypes: // This is okay :) -- cgit v1.2.3