summary refs log tree commit diff stats
path: root/tests/patterns
diff options
context:
space:
mode:
authorAraq <rumpf_a@web.de>2012-09-08 15:43:21 +0200
committerAraq <rumpf_a@web.de>2012-09-08 15:43:21 +0200
commitb64eeeb4303953f9fe1135cb9c3c61e23ec55afa (patch)
tree0f994de4a02afd9bed14dafcac24a3dd2df99d0d /tests/patterns
parent355ae07b8f3362af4e90770477d344dcd2fef594 (diff)
downloadNim-b64eeeb4303953f9fe1135cb9c3c61e23ec55afa.tar.gz
term rewriting improvements
Diffstat (limited to 'tests/patterns')
-rw-r--r--tests/patterns/tmatrix.nim26
-rw-r--r--tests/patterns/tnoendlessrec.nim10
-rw-r--r--tests/patterns/tstar.nim2
3 files changed, 37 insertions, 1 deletions
diff --git a/tests/patterns/tmatrix.nim b/tests/patterns/tmatrix.nim
new file mode 100644
index 000000000..067c4cd5a
--- /dev/null
+++ b/tests/patterns/tmatrix.nim
@@ -0,0 +1,26 @@
+discard """
+  output: "21"
+"""
+
+import macros
+
+type
+  TMat = object
+    dummy: int
+
+proc `*`(a, b: TMat): TMat = nil
+proc `+`(a, b: TMat): TMat = nil
+proc `-`(a, b: TMat): TMat = nil
+proc `$`(a: TMat): string = result = $a.dummy
+
+macro optOps{ (`+`|`-`|`*`) *| a }(a: varargs[TMat]): expr =
+  result = newIntLitNode(21)
+
+#macro optPlus{ `+` * a }(a: varargs[TMat]): expr =
+#  result = newIntLitNode(21)
+
+var x, y, z: TMat
+
+echo x + y * z - x 
+
+#echo x + y + z
diff --git a/tests/patterns/tnoendlessrec.nim b/tests/patterns/tnoendlessrec.nim
new file mode 100644
index 000000000..53891bcc0
--- /dev/null
+++ b/tests/patterns/tnoendlessrec.nim
@@ -0,0 +1,10 @@
+discard """
+  output: "4"
+"""
+
+# test that an endless recursion is avoided:
+
+template optLen{len(x)}(x: expr): expr = len(x)
+
+var s = "lala"
+echo len(s)
diff --git a/tests/patterns/tstar.nim b/tests/patterns/tstar.nim
index 55d841c3a..ac3373214 100644
--- a/tests/patterns/tstar.nim
+++ b/tests/patterns/tstar.nim
@@ -10,7 +10,7 @@ proc `&&`(s: varargs[string]): string =
   for i in 1..len(s)-1: result.add s[i]
   inc calls
 
-template optConc{ `&&` * a }(a: expr): expr = &&a
+template optConc{ `&&` * a }(a: varargs[string]): expr = &&a
 
 let space = " "
 echo "my" && (space & "awe" && "some " ) && "concat"