diff options
-rw-r--r-- | compiler/vm.nim | 5 | ||||
-rw-r--r-- | tests/macros/tbug1149.nim | 18 |
2 files changed, 18 insertions, 5 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim index f879e36bc..155617edb 100644 --- a/compiler/vm.nim +++ b/compiler/vm.nim @@ -671,14 +671,11 @@ proc rawExecute(c: PCtx, start: int, tos: PStackFrame): TFullReg = of opcLtu: decodeBC(rkInt) regs[ra].intVal = ord(regs[rb].intVal <% regs[rc].intVal) - of opcEqRef: + of opcEqRef, opcEqNimrodNode: decodeBC(rkInt) regs[ra].intVal = ord((regs[rb].node.kind == nkNilLit and regs[rc].node.kind == nkNilLit) or regs[rb].node == regs[rc].node) - of opcEqNimrodNode: - decodeBC(rkInt) - regs[ra].intVal = ord(regs[rb].node == regs[rc].node) of opcXor: decodeBC(rkInt) regs[ra].intVal = ord(regs[rb].intVal != regs[rc].intVal) diff --git a/tests/macros/tbug1149.nim b/tests/macros/tbug1149.nim index d2bff61d3..3318fbfd8 100644 --- a/tests/macros/tbug1149.nim +++ b/tests/macros/tbug1149.nim @@ -6,7 +6,10 @@ f TTaa TTaa TTaa -TTaa''' +TTaa +true +true +nil''' output: '''test''' """ @@ -62,3 +65,16 @@ macro m(s:static[Td]) : stmt = const s=("TT", 3) m(s) m(s) + +# bug #933 + +proc nilcheck(): PNimrodNode {.compileTime.} = + echo(result == nil) # true + echo(result.isNil) # true + echo(repr(result)) # nil + +macro testnilcheck(): stmt = + result = newNimNode(nnkStmtList) + discard nilcheck() + +testnilcheck() |