mirror of
https://github.com/nim-lang/Nim.git
synced 2026-04-18 13:30:33 +00:00
fixes #5419
This commit is contained in:
@@ -174,7 +174,11 @@ proc semGenericStmt(c: PContext, n: PNode,
|
||||
# XXX for example: ``result.add`` -- ``add`` needs to be looked up here...
|
||||
var dummy: bool
|
||||
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:
|
||||
# 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
|
||||
|
||||
@@ -742,6 +742,8 @@ proc `$`*(node: NimNode): string {.compileTime.} =
|
||||
result = $node.symbol
|
||||
of nnkOpenSymChoice, nnkClosedSymChoice:
|
||||
result = $node[0]
|
||||
of nnkAccQuoted:
|
||||
result = $node[0]
|
||||
else:
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user