summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/vm.nim6
-rw-r--r--tests/macros/tnodecompare.nim39
2 files changed, 44 insertions, 1 deletions
diff --git a/compiler/vm.nim b/compiler/vm.nim
index e49bed522..9f0d0bfce 100644
--- a/compiler/vm.nim
+++ b/compiler/vm.nim
@@ -682,11 +682,15 @@ 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, opcEqNimrodNode:
+    of opcEqRef:
       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(exprStructuralEquivalent(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/tnodecompare.nim b/tests/macros/tnodecompare.nim
new file mode 100644
index 000000000..ef25ae370
--- /dev/null
+++ b/tests/macros/tnodecompare.nim
@@ -0,0 +1,39 @@
+discard """
+output: '''1
+0
+1
+0
+1
+0
+1
+0'''
+"""
+
+import macros
+
+macro test(a: typed, b: typed): expr =
+  newLit(a == b)
+
+echo test(1, 1)
+echo test(1, 2)
+
+type
+  Obj = object of RootObj
+  Other = object of RootObj
+
+echo test(Obj, Obj)
+echo test(Obj, Other)
+
+var a, b: int
+
+echo test(a, a)
+echo test(a, b)
+
+macro test2: expr =
+  newLit(bindSym"Obj" == bindSym"Obj")
+
+macro test3: expr =
+  newLit(bindSym"Obj" == bindSym"Other")
+
+echo test2()
+echo test3()