diff options
-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() |