summary refs log tree commit diff stats
path: root/tests/macros
diff options
context:
space:
mode:
authorAdam Strzelecki <ono@java.pl>2015-07-01 20:11:09 +0200
committerAdam Strzelecki <ono@java.pl>2015-07-03 11:11:10 +0200
commit1a0417fbe0d2fe61c05a68f14858b0da0e596c02 (patch)
treea5cb4f81baa1b766543b1db0bc54c6ba93b762a3 /tests/macros
parent60ac5e3e76fe24e015782a081da3f04f0000ea5f (diff)
downloadNim-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.nim41
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)