summary refs log tree commit diff stats
path: root/tests/parser/toprprec.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/parser/toprprec.nim')
-rw-r--r--tests/parser/toprprec.nim37
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/parser/toprprec.nim b/tests/parser/toprprec.nim
new file mode 100644
index 000000000..e6a43d42e
--- /dev/null
+++ b/tests/parser/toprprec.nim
@@ -0,0 +1,37 @@
+discard """
+  output: "done"
+"""
+# Test operator precedence:
+
+template `@@` (x: untyped): untyped =
+  `self`.x
+
+template `@!` (x: untyped): untyped = x
+template `===` (x: untyped): untyped = x
+
+type
+  TO = object
+    x: int
+  TA = tuple[a, b: int, obj: TO]
+
+proc init(self: var TA): string =
+  @@a = 3
+  === @@b = 4
+  @@obj.x = 4
+  @! === result = "abc"
+  result = @@b.`$`
+
+assert 3+5*5-2 == 28- -26-28
+
+proc `^-` (x, y: int): int =
+  # now right-associative!
+  result = x - y
+
+assert 34 ^- 6 ^- 2 == 30
+assert 34 - 6 - 2 == 26
+
+
+var s: TA
+assert init(s) == "4"
+
+echo "done"