mirror of
https://github.com/nim-lang/Nim.git
synced 2026-06-09 13:18:11 +00:00
While this fix seems innocent,
this unlocks the hidden behavior of
method calls not being able to call
gensym'ed routines inside templates.
(cherry picked from commit f35c9cf73d)
This commit is contained in:
@@ -78,7 +78,7 @@ proc symChoice(c: PContext, n: PNode, s: PSym, r: TSymChoiceRule;
|
||||
result = newNodeIT(kind, info, newTypeS(tyNone, c))
|
||||
a = initOverloadIter(o, c, n)
|
||||
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)
|
||||
markOwnerModuleAsUsed(c, a)
|
||||
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()
|
||||
Reference in New Issue
Block a user