diff options
author | Zahary Karadjov <zahary@gmail.com> | 2014-03-09 17:06:29 +0200 |
---|---|---|
committer | Zahary Karadjov <zahary@gmail.com> | 2014-03-09 17:06:29 +0200 |
commit | eebe0035b5d16d82a3806ff6c3d29935e771226b (patch) | |
tree | 3670b901a7ec5d1b8a040a31c3a4b2be676309c3 | |
parent | 1793a0b5cefda62d49d584bd12cc1fc6a40f1438 (diff) | |
download | Nim-eebe0035b5d16d82a3806ff6c3d29935e771226b.tar.gz |
teach opcLdObj about nkExprColonExpr
-rw-r--r-- | compiler/vm.nim | 4 | ||||
-rw-r--r-- | tests/static/tstaticparammacro.nim | 52 | ||||
-rw-r--r-- | tests/vm/tstaticprintseq.nim | 36 |
3 files changed, 73 insertions, 19 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index f9b143bce..2a80106a5 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -425,7 +425,9 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = decodeBC(rkNode) let src = regs[rb].node if src.kind notin {nkEmpty..nkNilLit}: - regs[ra].node = src.sons[rc] + let n = src.sons[rc] + regs[ra].node = if n.kind == nkExprColonExpr: n[1] + else: n else: stackTrace(c, tos, pc, errIndexOutOfBounds) of opcWrObj: diff --git a/tests/static/tstaticparammacro.nim b/tests/static/tstaticparammacro.nim new file mode 100644 index 000000000..7fb9e2014 --- /dev/null +++ b/tests/static/tstaticparammacro.nim @@ -0,0 +1,52 @@ +discard """ + msg: '''letters +aa +bb +numbers +11 +22 +AST a +[(11, 22), (33, 44)] +AST b +(e: [55, 66], f: [77, 88]) +55 +''' +""" + +import macros + +type + TConfig = tuple + letters: seq[string] + numbers:seq[int] + +const data: Tconfig = (@["aa", "bb"], @[11, 22]) + +macro mymacro(data: static[TConfig]): stmt = + echo "letters" + for s in items(data.letters): + echo s + echo "numbers" + for n in items(data.numbers): + echo n + +mymacro(data) + +type + Ta = seq[tuple[c:int, d:int]] + Tb = tuple[e:seq[int], f:seq[int]] + +const + a : Ta = @[(11, 22), (33, 44)] + b : Tb = (@[55,66], @[77, 88]) + +macro mA(data: static[Ta]): stmt = + echo "AST a \n", repr(data) + +macro mB(data: static[Tb]): stmt = + echo "AST b \n", repr(data) + echo data.e[0] + +mA(a) +mB(b) + diff --git a/tests/vm/tstaticprintseq.nim b/tests/vm/tstaticprintseq.nim index f7ed1e2bb..4575f3af1 100644 --- a/tests/vm/tstaticprintseq.nim +++ b/tests/vm/tstaticprintseq.nim @@ -10,28 +10,31 @@ discard """ 3 1 2 -3''' +3 +aa +bb +aa +bb''' """ -when false: - const s = @[1,2,3] +const s = @[1,2,3] - macro foo: stmt = - for e in s: - echo e +macro foo: stmt = + for e in s: + echo e - foo() +foo() - static: - for e in s: - echo e +static: + for e in s: + echo e - macro bar(x: static[seq[int]]): stmt = - for e in x: - echo e +macro bar(x: static[seq[int]]): stmt = + for e in x: + echo e - bar s - bar(@[1, 2, 3]) +bar s +bar(@[1, 2, 3]) type TData = tuple @@ -41,9 +44,6 @@ type const data: TData = (@["aa", "bb"], @[11, 22]) static: - for x in data.letters: - echo x - var m = data for x in m.letters: echo x |