macros: Introduce sameType(a, b) for node types

Previously introduced node comparison `==` was working somehow wrong on nodes
returned from getType(a), comparing just ids of the symbols.

Recently introduced `==` change 47dce26886
started comparing symbol nodes pointer-wise, thus strictly. Since getType(a)
always creates new symbol pointing to the type, comparing two such nodes using
`==` always returns false, even they point to the same type.

That is why we need a new sameType macro to be able to tell if these nodes
point to the same type.
This commit is contained in:
Adam Strzelecki
2015-07-01 20:11:09 +02:00
parent 60ac5e3e76
commit 1a0417fbe0
6 changed files with 54 additions and 3 deletions

View File

@@ -144,6 +144,10 @@ proc `==`*(a, b: NimIdent): bool {.magic: "EqIdent", noSideEffect.}
proc `==`*(a, b: NimNode): bool {.magic: "EqNimrodNode", noSideEffect.}
## compares two Nim nodes
proc sameType*(a, b: NimNode): bool {.magic: "SameNodeType", noSideEffect.}
## compares two Nim nodes' types. Return true if the types are the same,
## eg. true when comparing alias with original type.
proc len*(n: NimNode): int {.magic: "NLen", noSideEffect.}
## returns the number of children of `n`.