This commit is contained in:
Araq 2017-02-25 23:58:47 +01:00
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) fixupDispatcher(s, disp)
#echo "fixup ", disp.name.s, " ", disp.id #echo "fixup ", disp.name.s, " ", disp.id
when useEffectSystem: checkMethodEffects(disp, s) 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? # already exists due to forwarding definition?
localError(s.info, "method is not a base") localError(s.info, "method is not a base")
return 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]