This commit is contained in:
Araq
2014-03-13 22:29:48 +01:00
parent 1c35fb3c89
commit 3e056afb1c
3 changed files with 29 additions and 2 deletions

View File

@@ -155,7 +155,11 @@ proc addLocalDecl(c: var TemplCtx, n: var PNode, k: TSymKind) =
of nkPragmaExpr: x = x[0]
of nkIdent: break
else: illFormedAst(x)
c.toInject.incl(x.ident.id)
let ident = getIdentNode(c, x)
if not isTemplParam(c, ident):
c.toInject.incl(x.ident.id)
else:
replaceIdentBySym(n, ident)
else:
let ident = getIdentNode(c, n)
if not isTemplParam(c, ident):
@@ -359,6 +363,8 @@ proc semTemplBody(c: var TemplCtx, n: PNode): PNode =
result = semRoutineInTemplBody(c, n, skConverter)
of nkPragmaExpr:
result.sons[0] = semTemplBody(c, n.sons[0])
of nkPostfix:
result.sons[1] = semTemplBody(c, n.sons[1])
of nkPragma:
discard
else:

View File

@@ -267,7 +267,7 @@ proc getSymbol(c: var TSqlLexer, tok: var TToken) =
while true:
add(tok.literal, buf[pos])
Inc(pos)
if not (buf[pos] in {'a'..'z','A'..'Z','0'..'9','_','$', '\128'..'\255'}):
if buf[pos] notin {'a'..'z','A'..'Z','0'..'9','_','$', '\128'..'\255'}:
break
c.bufpos = pos
tok.kind = tkIdentifier

View File

@@ -0,0 +1,21 @@
type pnode* = ref object of tobject
template litNode (name, ty): stmt =
type name* = ref object of PNode
val*: ty
litNode PIntNode, int
import json
template withKey*(j: PJsonNode; key: string; varname: expr;
body:stmt): stmt {.immediate.} =
if j.hasKey(key):
let varname{.inject.}= j[key]
block:
body
var j = parsejson("{\"zzz\":1}")
withkey(j, "foo", x):
echo(x)