mirror of
https://github.com/nim-lang/Nim.git
synced 2025-12-29 17:34:43 +00:00
Merge pull request #2894 from nanoant/patch/macros-real-node-compare
Real node compare for macros
This commit is contained in:
@@ -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)
|
||||
|
||||
39
tests/macros/tnodecompare.nim
Normal file
39
tests/macros/tnodecompare.nim
Normal file
@@ -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()
|
||||
Reference in New Issue
Block a user