This commit is contained in:
Araq
2017-02-25 23:58:47 +01:00
parent 5774145f5d
commit d91d338d03
2 changed files with 17 additions and 1 deletions

View File

@@ -169,7 +169,8 @@ proc methodDef*(g: ModuleGraph; s: PSym, fromCache: bool) =
fixupDispatcher(s, disp)
#echo "fixup ", disp.name.s, " ", disp.id
when useEffectSystem: checkMethodEffects(disp, s)
if sfBase in s.flags and g.methods[i].methods[0] != s:
if {sfBase, sfFromGeneric} * s.flags == {sfBase} and
g.methods[i].methods[0] != s:
# already exists due to forwarding definition?
localError(s.info, "method is not a base")
return

View File

@@ -0,0 +1,15 @@
#5432
type
Iterator[T] = ref object of RootObj
# base methods with `T` in the return type are okay
method methodThatWorks*[T](i: Iterator[T]): T {.base.} =
discard
# base methods without `T` (void or basic types) fail
method methodThatFails*[T](i: Iterator[T]) {.base.} =
discard
type
SpecificIterator1 = ref object of Iterator[string]
SpecificIterator2 = ref object of Iterator[int]