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

@@ -0,0 +1,41 @@
discard """
output: '''1
0
1
0
1
0
1
0
1
0'''
"""
import macros
macro same(a: typedesc, b: typedesc): expr =
newLit(a.getType[1].sameType b.getType[1])
echo same(int, int)
echo same(int, float)
type
SomeInt = int
DistinctInt = distinct int
SomeFloat = float
DistinctFloat = distinct float
echo same(int, SomeInt)
echo same(int, DistinctInt)
echo same(float, SomeFloat)
echo same(float, DistinctFloat)
type
Obj = object of RootObj
SubObj = object of Obj
Other = object of RootObj
echo same(Obj, Obj)
echo same(int, Obj)
echo same(SubObj, SubObj)
echo same(Other, Obj)