diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-09-06 00:45:00 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-06 00:45:00 +0200 |
commit | 488f3ed0852d877203b671887e291248bbbd0750 (patch) | |
tree | 8260ba1c31c4baedb124d6fa7c8ec3128d56fd8f | |
parent | 0882a09986b0e7d2be70cc034df80d8c322cdf75 (diff) | |
download | Nim-488f3ed0852d877203b671887e291248bbbd0750.tar.gz |
fixes yet another gensym regression (#12145)
-rw-r--r-- | compiler/semtempl.nim | 6 | ||||
-rw-r--r-- | tests/gensym/tgensymgeneric.nim | 14 | ||||
-rw-r--r-- | tests/template/mtempl5.nim | 14 | ||||
-rw-r--r-- | tests/template/template_issues.nim | 10 |
4 files changed, 34 insertions, 10 deletions
diff --git a/compiler/semtempl.nim b/compiler/semtempl.nim index 9f39a81ee..bb8748460 100644 --- a/compiler/semtempl.nim +++ b/compiler/semtempl.nim @@ -251,15 +251,15 @@ proc semTemplSymbol(c: PContext, n: PNode, s: PSym; isField: bool): PNode = of OverloadableSyms: result = symChoice(c, n, s, scOpen, isField) of skGenericParam: - if isField: result = n + if isField and sfGenSym in s.flags: result = n else: result = newSymNodeTypeDesc(s, n.info) of skParam: result = n of skType: - if isField: result = n + if isField and sfGenSym in s.flags: result = n else: result = newSymNodeTypeDesc(s, n.info) else: - if isField: result = n + if isField and sfGenSym in s.flags: result = n else: result = newSymNode(s, n.info) proc semRoutineInTemplName(c: var TemplCtx, n: PNode): PNode = diff --git a/tests/gensym/tgensymgeneric.nim b/tests/gensym/tgensymgeneric.nim index 9963ba808..c17a0715f 100644 --- a/tests/gensym/tgensymgeneric.nim +++ b/tests/gensym/tgensymgeneric.nim @@ -40,15 +40,15 @@ doAssert y.x == "abc" import macros static: - let sym1 = genSym() - let sym2 = genSym() - let sym3 = sym1 + let sym1 = genSym() + let sym2 = genSym() + let sym3 = sym1 let nimsym = sym1.symbol - doAssert sym1 == sym1 - doAssert sym2 != sym3 + doAssert sym1 == sym1 + doAssert sym2 != sym3 doAssert sym2.symbol != sym3.symbol - doAssert sym3 == sym1 + doAssert sym3 == sym1 doAssert sym1.symbol == sym1.symbol - doAssert nimsym == nimsym + doAssert nimsym == nimsym echo "true" diff --git a/tests/template/mtempl5.nim b/tests/template/mtempl5.nim index 3c2881764..2cc6f91bc 100644 --- a/tests/template/mtempl5.nim +++ b/tests/template/mtempl5.nim @@ -7,4 +7,18 @@ template templ*(): int = bind gx, gy gx + gy +import json + +const + codeField = "foobar" + messageField = "more" + +template trap*(path: string, body: untyped): untyped = + #bind codeField, messageField + try: + body + except: + let msg = getCurrentExceptionMsg() + #debug "Error occurred within RPC ", path = path, errorMessage = msg + result = %*{codeField: "SERVER_ERROR", messageField: msg} diff --git a/tests/template/template_issues.nim b/tests/template/template_issues.nim index b7dd2a1a7..e56d44480 100644 --- a/tests/template/template_issues.nim +++ b/tests/template/template_issues.nim @@ -7,6 +7,7 @@ a hi Hello, World! (e: 42) +hey ''' """ @@ -235,3 +236,12 @@ var x = X.fails(42) echo x + +import mtempl5 + + +proc foo(): auto = + trap "foo": + echo "hey" + +discard foo() |