Add proc [](n: NimNode, s: HSlice[T, U]): seq[NimNode] to macros (#7735)

fixes #7670.
This commit is contained in:
Lolo Iccl 2018-11-10 22:10:50 +09:00 • committed by Andreas Rumpf
commit 37d88e5168
2 changed files with 50 additions and 0 deletions

View file

@ -168,6 +168,18 @@ proc `[]`*(n: NimNode, i: int): NimNode {.magic: "NChild", noSideEffect.}
proc `[]`*(n: NimNode, i: BackwardsIndex): NimNode = n[n.len - i.int]
## get `n`'s `i`'th child.
template `^^`(n: NimNode, i: untyped): untyped =
(when i is BackwardsIndex: n.len - int(i) else: int(i))
proc `[]`*[T, U](n: NimNode, x: HSlice[T, U]): seq[NimNode] =
## slice operation for NimNode.
## returns a seq of child of `n` who inclusive range [n[x.a], n[x.b]].
let xa = n ^^ x.a
let L = (n ^^ x.b) - xa + 1
result = newSeq[NimNode](L)
for i in 0..<L:
result[i] = n[i + xa]
proc `[]=`*(n: NimNode, i: int, child: NimNode) {.magic: "NSetChild",
noSideEffect.}
## set `n`'s `i`'th child to `child`.