From 37d88e5168508870d69a990e5002a9ea113843f9 Mon Sep 17 00:00:00 2001 From: Lolo Iccl Date: Sat, 10 Nov 2018 22:10:50 +0900 Subject: [PATCH] Add proc `[]`(n: NimNode, s: HSlice[T, U]): seq[NimNode] to macros (#7735) fixes #7670. --- lib/core/macros.nim | 12 ++++++++++++ tests/macros/tslice.nim | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) create mode 100644 tests/macros/tslice.nim diff --git a/lib/core/macros.nim b/lib/core/macros.nim index 3011eaa67..2508a889e 100644 --- a/lib/core/macros.nim +++ b/lib/core/macros.nim @@ -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..