diff options
author | Adam Strzelecki <ono@java.pl> | 2015-07-01 20:11:09 +0200 |
---|---|---|
committer | Adam Strzelecki <ono@java.pl> | 2015-07-03 11:11:10 +0200 |
commit | 1a0417fbe0d2fe61c05a68f14858b0da0e596c02 (patch) | |
tree | a5cb4f81baa1b766543b1db0bc54c6ba93b762a3 /tests/macros | |
parent | 60ac5e3e76fe24e015782a081da3f04f0000ea5f (diff) | |
download | Nim-1a0417fbe0d2fe61c05a68f14858b0da0e596c02.tar.gz |
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 47dce2688633fad840a2f5e4073c531f1cd640ca 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.
Diffstat (limited to 'tests/macros')
-rw-r--r-- | tests/macros/tsametype.nim | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/tests/macros/tsametype.nim b/tests/macros/tsametype.nim new file mode 100644 index 000000000..6baa34751 --- /dev/null +++ b/tests/macros/tsametype.nim @@ -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) |