From 57cc8237f72b26cb56f8f250e382f8a0e091aea1 Mon Sep 17 00:00:00 2001 From: Dominik Picheta Date: Sun, 20 Apr 2014 21:54:59 +0100 Subject: [PATCH] Fixes #1093. --- compiler/vm.nim | 7 ++++++- compiler/vmgen.nim | 10 +--------- tests/macros/texprcolonexpr.nim | 19 +++++++++++++++++++ 3 files changed, 26 insertions(+), 10 deletions(-) create mode 100644 tests/macros/texprcolonexpr.nim diff --git a/compiler/vm.nim b/compiler/vm.nim index fb87492504..69a410f187 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -354,6 +354,11 @@ template handleJmpBack() {.dirty.} = globalError(c.debug[pc], errTooManyIterations) dec(c.loopIterations) +proc skipColon(n: PNode): PNode = + result = n + if n.kind == nkExprColonExpr: + result = n.sons[1] + proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = var pc = start var tos = tos @@ -454,7 +459,7 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = decodeBC(rkNode) let src = regs[rb].node if src.kind notin {nkEmpty..nkNilLit}: - let n = src.sons[rc] + let n = src.sons[rc].skipColon regs[ra].node = n else: stackTrace(c, tos, pc, errNilAccess) diff --git a/compiler/vmgen.nim b/compiler/vmgen.nim index 7c0c3d4f59..dbb63e1669 100644 --- a/compiler/vmgen.nim +++ b/compiler/vmgen.nim @@ -316,15 +316,7 @@ proc genAndOr(c: PCtx; n: PNode; opc: TOpcode; dest: var TDest) = c.patch(L1) proc canonValue*(n: PNode): PNode = - if n.kind == nkExprColonExpr: - result = n.sons[1] - elif n.hasSubnodeWith(nkExprColonExpr): - result = n.copyNode - newSeq(result.sons, n.len) - for i in 0.. " + Call + Ident !"name" + Ident !"a" + ExprColonExpr + Ident !"b" + Ident !"cint" + NilLit nil +''' +""" +import macros + +macro def(x: stmt): stmt {.immediate.} = + echo treeRepr(x) + +def name(a, b:cint) => nil