diff options
author | Araq <rumpf_a@web.de> | 2012-09-08 15:43:21 +0200 |
---|---|---|
committer | Araq <rumpf_a@web.de> | 2012-09-08 15:43:21 +0200 |
commit | b64eeeb4303953f9fe1135cb9c3c61e23ec55afa (patch) | |
tree | 0f994de4a02afd9bed14dafcac24a3dd2df99d0d /tests/patterns | |
parent | 355ae07b8f3362af4e90770477d344dcd2fef594 (diff) | |
download | Nim-b64eeeb4303953f9fe1135cb9c3c61e23ec55afa.tar.gz |
term rewriting improvements
Diffstat (limited to 'tests/patterns')
-rw-r--r-- | tests/patterns/tmatrix.nim | 26 | ||||
-rw-r--r-- | tests/patterns/tnoendlessrec.nim | 10 | ||||
-rw-r--r-- | tests/patterns/tstar.nim | 2 |
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" |