aboutsummaryrefslogtreecommitdiff
path: root/src/checker.cpp
diff options
context:
space:
mode:
authorGinger Bill <bill@gingerbill.org>2017-06-27 15:58:53 +0100
committerGinger Bill <bill@gingerbill.org>2017-06-27 15:58:53 +0100
commit5df854fcef6d3c37f3703ed5568ef7de8ca6719e (patch)
treee48482df30b417f06cd819ffc722ad5bc2ea03e8 /src/checker.cpp
parent260089431e069d2ce21ce74ff17c56c45fa7785e (diff)
Fixed demov0.5.0
Diffstat (limited to 'src/checker.cpp')
-rw-r--r--src/checker.cpp15
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 :)