While this fix seems innocent, this unlocks the hidden behavior of method calls not being able to call gensym'ed routines inside templates.
This commit is contained in:
parent
286fcef68e
commit
f35c9cf73d
2 changed files with 9 additions and 1 deletions
|
|
@ -78,7 +78,7 @@ proc symChoice(c: PContext, n: PNode, s: PSym, r: TSymChoiceRule;
|
||||||
result = newNodeIT(kind, info, newTypeS(tyNone, c))
|
result = newNodeIT(kind, info, newTypeS(tyNone, c))
|
||||||
a = initOverloadIter(o, c, n)
|
a = initOverloadIter(o, c, n)
|
||||||
while a != nil:
|
while a != nil:
|
||||||
if a.kind != skModule and (not isField or sfGenSym notin s.flags):
|
if a.kind != skModule and (not isField or sfGenSym notin a.flags):
|
||||||
incl(a.flags, sfUsed)
|
incl(a.flags, sfUsed)
|
||||||
markOwnerModuleAsUsed(c, a)
|
markOwnerModuleAsUsed(c, a)
|
||||||
result.add newSymNode(a, info)
|
result.add newSymNode(a, info)
|
||||||
|
|
|
||||||
8
tests/template/tinnerouterproc.nim
Normal file
8
tests/template/tinnerouterproc.nim
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
block: # #20002
|
||||||
|
proc bar(x: int): int = 10
|
||||||
|
template foo =
|
||||||
|
proc bar(x: int): int {.gensym.} = x + 2
|
||||||
|
doAssert bar(3) == 5
|
||||||
|
discard 3.bar # evaluates to 10 but only check if it compiles for now
|
||||||
|
block:
|
||||||
|
foo()
|
||||||
Loading…
Add table
Add a link
Reference in a new issue