diff options
-rw-r--r-- | lib/core/macros.nim | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/lib/core/macros.nim b/lib/core/macros.nim index 9130c3ffb..856bc0929 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -429,11 +429,17 @@ proc newStmtList*(stmts: varargs[PNimrodNode]): PNimrodNode {.compileTime.}= proc newBlockStmt*(label, body: PNimrodNode): PNimrodNode {.compileTime.} = ## Create a new block statement with label return newNimNode(nnkBlockStmt).add(label, body) + proc newBlockStmt*(body: PNimrodNode): PNimrodNode {.compiletime.} = ## Create a new block: stmt return newNimNode(nnkBlockStmt).add(newEmptyNode(), body) -proc newLetStmt*(name, value: PNimrodNode): PNimrodNode{.compiletime.} = +proc newVarStmt*(name, value: PNimrodNode): PNimrodNode {.compiletime.} = + ## Create a new var stmt + return newNimNode(nnkVarSection).add( + newNimNode(nnkIdentDefs).add(name, newNimNode(nnkEmpty), value)) + +proc newLetStmt*(name, value: PNimrodNode): PNimrodNode {.compiletime.} = ## Create a new let stmt return newNimNode(nnkLetSection).add( newNimNode(nnkIdentDefs).add(name, newNimNode(nnkEmpty), value)) @@ -484,6 +490,22 @@ proc newProc*(name = newEmptyNode(); params: openarray[PNimrodNode] = []; newEmptyNode(), body) +proc newIfStmt*(branches: varargs[tuple[cond, body: PNimrodNode]]): + PNimrodNode {.compiletime.} = + ## Constructor for ``if`` statements. + ## + ## .. code-block:: nimrod + ## + ## newIfStmt( + ## (Ident, StmtList), + ## ... + ## ) + ## + result = newNimNode(nnkIfStmt) + for i in branches: + result.add(newNimNode(nnkElifBranch).add(i.cond, i.body)) + + proc copyChildrenTo*(src, dest: PNimrodNode) {.compileTime.}= ## Copy all children from `src` to `dest` for i in 0 .. < src.len: |