Clean createVar template.

This commit is contained in:
Dominik Picheta 2014-05-25 13:09:18 +01:00
commit b4366366d1

View file

@ -813,8 +813,9 @@ proc generateExceptionCheck(futSym,
elseNode[0].add rootReceiver elseNode[0].add rootReceiver
result.add elseNode result.add elseNode
template createVar(futSymName: string, asyncProc: PNimrodNode, template createVar(result: var PNimrodNode, futSymName: string,
valueReceiver, rootReceiver: expr) {.immediate, dirty.} = asyncProc: PNimrodNode,
valueReceiver, rootReceiver: expr) =
result = newNimNode(nnkStmtList) result = newNimNode(nnkStmtList)
var futSym = genSym(nskVar, "future") var futSym = genSym(nskVar, "future")
result.add newVarStmt(futSym, asyncProc) # -> var future<x> = y result.add newVarStmt(futSym, asyncProc) # -> var future<x> = y
@ -851,7 +852,7 @@ proc processBody(node, retFutureSym: PNimrodNode,
of nnkCall: of nnkCall:
# await foo(p, x) # await foo(p, x)
var futureValue: PNimrodNode var futureValue: PNimrodNode
createVar("future" & $node[1][0].toStrLit, node[1], futureValue, result.createVar("future" & $node[1][0].toStrLit, node[1], futureValue,
futureValue) futureValue)
else: else:
error("Invalid node kind in 'await', got: " & $node[1].kind) error("Invalid node kind in 'await', got: " & $node[1].kind)
@ -859,7 +860,7 @@ proc processBody(node, retFutureSym: PNimrodNode,
node[1][0].ident == !"await": node[1][0].ident == !"await":
# foo await x # foo await x
var newCommand = node var newCommand = node
createVar("future" & $node[0].toStrLit, node[1][1], newCommand[1], result.createVar("future" & $node[0].toStrLit, node[1][1], newCommand[1],
newCommand) newCommand)
of nnkVarSection, nnkLetSection: of nnkVarSection, nnkLetSection:
@ -868,7 +869,7 @@ proc processBody(node, retFutureSym: PNimrodNode,
if node[0][2][0].ident == !"await": if node[0][2][0].ident == !"await":
# var x = await y # var x = await y
var newVarSection = node # TODO: Should this use copyNimNode? var newVarSection = node # TODO: Should this use copyNimNode?
createVar("future" & $node[0][0].ident, node[0][2][1], result.createVar("future" & $node[0][0].ident, node[0][2][1],
newVarSection[0][2], newVarSection) newVarSection[0][2], newVarSection)
else: discard else: discard
of nnkAsgn: of nnkAsgn:
@ -877,14 +878,14 @@ proc processBody(node, retFutureSym: PNimrodNode,
if node[1][0].ident == !"await": if node[1][0].ident == !"await":
# x = await y # x = await y
var newAsgn = node var newAsgn = node
createVar("future" & $node[0].toStrLit, node[1][1], newAsgn[1], newAsgn) result.createVar("future" & $node[0].toStrLit, node[1][1], newAsgn[1], newAsgn)
else: discard else: discard
of nnkDiscardStmt: of nnkDiscardStmt:
# discard await x # discard await x
if node[0].kind != nnkEmpty and node[0][0].kind == nnkIdent and if node[0].kind != nnkEmpty and node[0][0].kind == nnkIdent and
node[0][0].ident == !"await": node[0][0].ident == !"await":
var newDiscard = node var newDiscard = node
createVar("futureDiscard_" & $toStrLit(node[0][1]), node[0][1], result.createVar("futureDiscard_" & $toStrLit(node[0][1]), node[0][1],
newDiscard[0], newDiscard) newDiscard[0], newDiscard)
of nnkTryStmt: of nnkTryStmt:
# try: await x; except: ... # try: await x; except: ...