From 1a0417fbe0d2fe61c05a68f14858b0da0e596c02 Mon Sep 17 00:00:00 2001 From: Adam Strzelecki Date: Wed, 1 Jul 2015 20:11:09 +0200 Subject: 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. --- tests/macros/tsametype.nim | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 tests/macros/tsametype.nim (limited to 'tests/macros') 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) -- cgit 1.4.1-2-gfad0