diff options
author | Dominik Picheta <dominikpicheta@googlemail.com> | 2014-04-20 21:54:59 +0100 |
---|---|---|
committer | Dominik Picheta <dominikpicheta@googlemail.com> | 2014-04-20 21:55:45 +0100 |
commit | 57cc8237f72b26cb56f8f250e382f8a0e091aea1 (patch) | |
tree | b11c108783ff84e78d8b594d33decea52713c8e9 | |
parent | 36fc1d9d72b91a632b795b656a5ead52b472036f (diff) | |
download | Nim-57cc8237f72b26cb56f8f250e382f8a0e091aea1.tar.gz |
Fixes #1093.
-rw-r--r-- | compiler/vm.nim | 7 | ||||
-rw-r--r-- | compiler/vmgen.nim | 10 | ||||
-rw-r--r-- | tests/macros/texprcolonexpr.nim | 19 |
3 files changed, 26 insertions, 10 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index fb8749250..69a410f18 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 7c0c3d4f5..dbb63e166 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.. <n.len: - result.sons[i] = canonValue(n.sons[i]) - else: - result = n + result = n proc rawGenLiteral(c: PCtx; n: PNode): int = result = c.constants.len diff --git a/tests/macros/texprcolonexpr.nim b/tests/macros/texprcolonexpr.nim new file mode 100644 index 000000000..3b2c86b77 --- /dev/null +++ b/tests/macros/texprcolonexpr.nim @@ -0,0 +1,19 @@ +discard """ + msg: ''' +Infix + Ident !"=>" + 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 |