diff options
| author | Ginger Bill <bill@gingerbill.org> | 2017-06-27 15:58:53 +0100 |
|---|---|---|
| committer | Ginger Bill <bill@gingerbill.org> | 2017-06-27 15:58:53 +0100 |
| commit | 5df854fcef6d3c37f3703ed5568ef7de8ca6719e (patch) | |
| tree | e48482df30b417f06cd819ffc722ad5bc2ea03e8 /src/checker.cpp | |
| parent | 260089431e069d2ce21ce74ff17c56c45fa7785e (diff) | |
Fixed demov0.5.0
Diffstat (limited to 'src/checker.cpp')
| -rw-r--r-- | src/checker.cpp | 15 |
1 files changed, 5 insertions, 10 deletions
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 :) |