equality check on NimSym has now support in the VM; refs #6139
This commit is contained in:
parent
2d8e97ee03
commit
7132b04f44
2 changed files with 27 additions and 1 deletions
|
|
@ -150,6 +150,9 @@ proc `==`*(a, b: NimIdent): bool {.magic: "EqIdent", noSideEffect.}
|
||||||
proc `==`*(a, b: NimNode): bool {.magic: "EqNimrodNode", noSideEffect.}
|
proc `==`*(a, b: NimNode): bool {.magic: "EqNimrodNode", noSideEffect.}
|
||||||
## compares two Nim nodes
|
## compares two Nim nodes
|
||||||
|
|
||||||
|
proc `==`*(a, b: NimSym): bool {.magic: "EqNimrodNode", noSideEffect.}
|
||||||
|
## compares two Nim symbols
|
||||||
|
|
||||||
proc sameType*(a, b: NimNode): bool {.magic: "SameNodeType", noSideEffect.} =
|
proc sameType*(a, b: NimNode): bool {.magic: "SameNodeType", noSideEffect.} =
|
||||||
## compares two Nim nodes' types. Return true if the types are the same,
|
## compares two Nim nodes' types. Return true if the types are the same,
|
||||||
## eg. true when comparing alias with original type.
|
## eg. true when comparing alias with original type.
|
||||||
|
|
|
||||||
|
|
@ -1,3 +1,7 @@
|
||||||
|
discard """
|
||||||
|
output: '''true'''
|
||||||
|
"""
|
||||||
|
|
||||||
# We need to open the gensym'ed symbol again so that the instantiation
|
# We need to open the gensym'ed symbol again so that the instantiation
|
||||||
# creates a fresh copy; but this is wrong the very first reason for gensym
|
# creates a fresh copy; but this is wrong the very first reason for gensym
|
||||||
# is that scope rules cannot be used! So simply removing 'sfGenSym' does
|
# is that scope rules cannot be used! So simply removing 'sfGenSym' does
|
||||||
|
|
@ -28,4 +32,23 @@ var
|
||||||
let x = gen(a)
|
let x = gen(a)
|
||||||
let y = gen(b)
|
let y = gen(b)
|
||||||
|
|
||||||
echo x.x, " ", y.x
|
doAssert x.x == 123
|
||||||
|
doAssert y.x == "abc"
|
||||||
|
|
||||||
|
# test symbol equality
|
||||||
|
|
||||||
|
import macros
|
||||||
|
|
||||||
|
static:
|
||||||
|
let sym1 = genSym()
|
||||||
|
let sym2 = genSym()
|
||||||
|
let sym3 = sym1
|
||||||
|
let nimsym = sym1.symbol
|
||||||
|
doAssert sym1 == sym1
|
||||||
|
doAssert sym2 != sym3
|
||||||
|
doAssert sym2.symbol != sym3.symbol
|
||||||
|
doAssert sym3 == sym1
|
||||||
|
doAssert sym1.symbol == sym1.symbol
|
||||||
|
doAssert nimsym == nimsym
|
||||||
|
|
||||||
|
echo "true"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue