mirror of
https://github.com/nim-lang/Nim.git
synced 2026-01-08 14:03:23 +00:00
fixes #5432
This commit is contained in:
@@ -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
|
||||
|
||||
15
tests/method/tgeneric_methods2.nim
Normal file
15
tests/method/tgeneric_methods2.nim
Normal 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]
|
||||
Reference in New Issue
Block a user