fixes #5419
This commit is contained in:
parent
92c2a51bf7
commit
22789a0bfc
4 changed files with 35 additions and 1 deletions
|
|
@ -174,7 +174,11 @@ proc semGenericStmt(c: PContext, n: PNode,
|
||||||
# XXX for example: ``result.add`` -- ``add`` needs to be looked up here...
|
# XXX for example: ``result.add`` -- ``add`` needs to be looked up here...
|
||||||
var dummy: bool
|
var dummy: bool
|
||||||
result = fuzzyLookup(c, n, flags, ctx, dummy)
|
result = fuzzyLookup(c, n, flags, ctx, dummy)
|
||||||
of nkEmpty, nkSym..nkNilLit:
|
of nkSym:
|
||||||
|
let a = n.sym
|
||||||
|
let b = getGenSym(c, a)
|
||||||
|
if b != a: n.sym = b
|
||||||
|
of nkEmpty, succ(nkSym)..nkNilLit:
|
||||||
# see tests/compile/tgensymgeneric.nim:
|
# see tests/compile/tgensymgeneric.nim:
|
||||||
# We need to open the gensym'ed symbol again so that the instantiation
|
# We need to open the gensym'ed symbol again so that the instantiation
|
||||||
# creates a fresh copy; but this is wrong the very first reason for gensym
|
# creates a fresh copy; but this is wrong the very first reason for gensym
|
||||||
|
|
|
||||||
|
|
@ -742,6 +742,8 @@ proc `$`*(node: NimNode): string {.compileTime.} =
|
||||||
result = $node.symbol
|
result = $node.symbol
|
||||||
of nnkOpenSymChoice, nnkClosedSymChoice:
|
of nnkOpenSymChoice, nnkClosedSymChoice:
|
||||||
result = $node[0]
|
result = $node[0]
|
||||||
|
of nnkAccQuoted:
|
||||||
|
result = $node[0]
|
||||||
else:
|
else:
|
||||||
badNodeKind node.kind, "$"
|
badNodeKind node.kind, "$"
|
||||||
|
|
||||||
|
|
|
||||||
14
tests/template/mgensym_generic_cross_module.nim
Normal file
14
tests/template/mgensym_generic_cross_module.nim
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
|
||||||
|
template makeDomElement(x: untyped, name: string = nil) =
|
||||||
|
const tag {.gensym.} = if name == nil: astToStr(x) else: name
|
||||||
|
|
||||||
|
proc x*(p: int|float) =
|
||||||
|
echo tag, p
|
||||||
|
|
||||||
|
proc x*(p: string|cstring) =
|
||||||
|
echo tag, p
|
||||||
|
|
||||||
|
#proc wrappedUp[T](x: T) =
|
||||||
|
# mixin foo, bar
|
||||||
|
makeDomElement(foo, "foo")
|
||||||
|
makeDomElement(bar)
|
||||||
14
tests/template/tgensym_generic_cross_module.nim
Normal file
14
tests/template/tgensym_generic_cross_module.nim
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
discard """
|
||||||
|
output: '''foo55
|
||||||
|
foo8.0
|
||||||
|
fooaha
|
||||||
|
bar7'''
|
||||||
|
"""
|
||||||
|
# bug #5419
|
||||||
|
import mgensym_generic_cross_module
|
||||||
|
|
||||||
|
foo(55)
|
||||||
|
foo 8.0
|
||||||
|
foo "aha"
|
||||||
|
bar 7
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue