summary refs log tree commit diff stats
path: root/tests/parser/tpostexprblocks.nim
diff options
context:
space:
mode:
Diffstat (limited to 'tests/parser/tpostexprblocks.nim')
-rw-r--r--tests/parser/tpostexprblocks.nim668
1 files changed, 668 insertions, 0 deletions
diff --git a/tests/parser/tpostexprblocks.nim b/tests/parser/tpostexprblocks.nim
new file mode 100644
index 000000000..6cd4a8350
--- /dev/null
+++ b/tests/parser/tpostexprblocks.nim
@@ -0,0 +1,668 @@
+discard """
+nimout: '''
+StmtList
+  Ident "foo010"
+  Call
+    Ident "foo020"
+  Call
+    Ident "foo030"
+    Ident "x"
+  Command
+    Ident "foo040"
+    Ident "x"
+  Call
+    Ident "foo050"
+    StmtList
+      DiscardStmt
+        Empty
+  Call
+    Ident "foo060"
+    StmtList
+      DiscardStmt
+        Empty
+  Call
+    Ident "foo070"
+    StrLit "test"
+    StmtList
+      DiscardStmt
+        Empty
+  Call
+    Ident "foo080"
+    StrLit "test"
+    StmtList
+      DiscardStmt
+        Empty
+  Command
+    Ident "foo090"
+    StrLit "test"
+    StmtList
+      DiscardStmt
+        Empty
+  Command
+    Ident "foo100"
+    Call
+      StrLit "test"
+      StmtList
+        DiscardStmt
+          Empty
+  Command
+    Ident "foo101"
+    Call
+      IntLit 10
+      StmtList
+        DiscardStmt
+          Empty
+  Command
+    Ident "foo110"
+    IntLit 1
+    Par
+      Infix
+        Ident "+"
+        IntLit 2
+        IntLit 3
+    StmtList
+      DiscardStmt
+        Empty
+  Command
+    Ident "foo120"
+    IntLit 1
+    Call
+      Par
+        Infix
+          Ident "+"
+          IntLit 2
+          IntLit 3
+      StmtList
+        DiscardStmt
+          Empty
+  Call
+    Ident "foo130"
+    Do
+      Empty
+      Empty
+      Empty
+      FormalParams
+        Empty
+        IdentDefs
+          Ident "x"
+          Empty
+          Empty
+      Empty
+      Empty
+      StmtList
+        DiscardStmt
+          Empty
+  Call
+    Ident "foo140"
+    Do
+      Empty
+      Empty
+      Empty
+      FormalParams
+        Empty
+        IdentDefs
+          Ident "x"
+          Ident "int"
+          Empty
+      Empty
+      Empty
+      StmtList
+        DiscardStmt
+          Empty
+  Call
+    Ident "foo150"
+    Do
+      Empty
+      Empty
+      Empty
+      FormalParams
+        Ident "int"
+        IdentDefs
+          Ident "x"
+          Ident "int"
+          Empty
+      Empty
+      Empty
+      StmtList
+        DiscardStmt
+          Empty
+  Command
+    Ident "foo160"
+    Call
+      Ident "x"
+      Do
+        Empty
+        Empty
+        Empty
+        FormalParams
+          Empty
+          IdentDefs
+            Ident "y"
+            Empty
+            Empty
+        Empty
+        Empty
+        StmtList
+          DiscardStmt
+            Empty
+  Call
+    Ident "foo170"
+    StmtList
+      DiscardStmt
+        Empty
+    Else
+      StmtList
+        DiscardStmt
+          Empty
+  Call
+    Ident "foo180"
+    StmtList
+      DiscardStmt
+        Empty
+    StmtList
+      DiscardStmt
+        Empty
+    Else
+      StmtList
+        DiscardStmt
+          Empty
+  Command
+    Ident "foo190"
+    Call
+      Ident "x"
+      Do
+        Empty
+        Empty
+        Empty
+        FormalParams
+          Empty
+          IdentDefs
+            Ident "y"
+            Empty
+            Empty
+        Empty
+        Empty
+        StmtList
+          DiscardStmt
+            Empty
+      Do
+        Empty
+        Empty
+        Empty
+        FormalParams
+          Ident "int"
+          IdentDefs
+            Ident "z"
+            Empty
+            Empty
+        Empty
+        Empty
+        StmtList
+          DiscardStmt
+            Empty
+      Do
+        Empty
+        Empty
+        Empty
+        FormalParams
+          Ident "int"
+          IdentDefs
+            Ident "w"
+            Ident "int"
+            Empty
+        Empty
+        Empty
+        StmtList
+          DiscardStmt
+            Empty
+      StmtList
+        DiscardStmt
+          Empty
+      Else
+        StmtList
+          DiscardStmt
+            Empty
+  Call
+    Ident "foo200"
+    Ident "x"
+    Call
+      Ident "bar"
+      StmtList
+        DiscardStmt
+          Empty
+      Else
+        StmtList
+          DiscardStmt
+            Empty
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Ident "foo210"
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Call
+        Ident "foo220"
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Call
+        Ident "foo230"
+        Ident "x"
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Command
+        Ident "foo240"
+        Ident "x"
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Call
+        Ident "foo250"
+        StmtList
+          DiscardStmt
+            Empty
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Call
+        Ident "foo260"
+        StmtList
+          DiscardStmt
+            Empty
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Call
+        Ident "foo270"
+        StmtList
+          DiscardStmt
+            Empty
+        Else
+          StmtList
+            DiscardStmt
+              Empty
+  VarSection
+    IdentDefs
+      Ident "a"
+      Empty
+      Command
+        Ident "foo280"
+        Call
+          Ident "x"
+          Do
+            Empty
+            Empty
+            Empty
+            FormalParams
+              Empty
+              IdentDefs
+                Ident "y"
+                Empty
+                Empty
+            Empty
+            Empty
+            StmtList
+              DiscardStmt
+                Empty
+          Else
+            StmtList
+              DiscardStmt
+                Empty
+  Asgn
+    Ident "a"
+    Ident "foo290"
+  Asgn
+    Ident "a"
+    Call
+      Ident "foo300"
+  Asgn
+    Ident "a"
+    Call
+      Ident "foo310"
+      Ident "x"
+  Asgn
+    Ident "a"
+    Command
+      Ident "foo320"
+      Ident "x"
+  Asgn
+    Ident "a"
+    Call
+      Ident "foo330"
+      StmtList
+        DiscardStmt
+          Empty
+  Asgn
+    Ident "a"
+    Call
+      Ident "foo340"
+      StmtList
+        DiscardStmt
+          Empty
+  Asgn
+    Ident "a"
+    Call
+      Ident "foo350"
+      StmtList
+        DiscardStmt
+          Empty
+      Else
+        StmtList
+          DiscardStmt
+            Empty
+  Asgn
+    Ident "a"
+    Command
+      Ident "foo360"
+      Call
+        DotExpr
+          Ident "x"
+          Ident "bar"
+        Do
+          Empty
+          Empty
+          Empty
+          FormalParams
+            Empty
+            IdentDefs
+              Ident "y"
+              Empty
+              Empty
+          Empty
+          Empty
+          StmtList
+            DiscardStmt
+              Empty
+        Else
+          StmtList
+            DiscardStmt
+              Empty
+  Command
+    DotExpr
+      Ident "foo370"
+      Ident "add"
+    Call
+      Ident "quote"
+      StmtList
+        DiscardStmt
+          Empty
+  Call
+    DotExpr
+      Ident "foo380"
+      Ident "add"
+    BracketExpr
+      Call
+        Ident "quote"
+        StmtList
+          DiscardStmt
+            Empty
+      IntLit 0
+  Command
+    Ident "foo390"
+    Call
+      Ident "x"
+      Do
+        Empty
+        Empty
+        Empty
+        FormalParams
+          Empty
+          IdentDefs
+            Ident "y"
+            Empty
+            Empty
+        Empty
+        Empty
+        StmtList
+          DiscardStmt
+            Empty
+      Do
+        Empty
+        Empty
+        Empty
+        FormalParams
+          Ident "int"
+          IdentDefs
+            Ident "z"
+            Empty
+            Empty
+        Empty
+        Empty
+        StmtList
+          DiscardStmt
+            Empty
+      Do
+        Empty
+        Empty
+        Empty
+        FormalParams
+          Ident "int"
+          IdentDefs
+            Ident "w"
+            Ident "int"
+            Empty
+        Empty
+        Empty
+        StmtList
+          DiscardStmt
+            Empty
+      StmtList
+        DiscardStmt
+          Empty
+      OfBranch
+        Ident "a"
+        StmtList
+          DiscardStmt
+            Empty
+      OfBranch
+        TupleConstr
+          Ident "a"
+          Ident "b"
+        StmtList
+          DiscardStmt
+            Empty
+      ElifBranch
+        Ident "a"
+        StmtList
+          DiscardStmt
+            Empty
+      ElifBranch
+        TupleConstr
+          Ident "a"
+          Ident "b"
+        StmtList
+          DiscardStmt
+            Empty
+      ExceptBranch
+        Ident "a"
+        StmtList
+          DiscardStmt
+            Empty
+      ExceptBranch
+        TupleConstr
+          Ident "a"
+          Ident "b"
+        StmtList
+          DiscardStmt
+            Empty
+      Finally
+        StmtList
+          DiscardStmt
+            Empty
+
+  Call
+    Ident "foo"
+    Finally
+      StmtList
+        DiscardStmt
+          Empty
+'''
+"""
+
+import macros
+
+dumpTree:
+  # simple calls
+  foo010
+  foo020()
+  foo030(x)
+  foo040 x
+
+  foo050:
+    discard
+
+  foo060 do:
+    discard
+
+  foo070("test"):
+    discard
+
+  foo080("test") do:
+    discard
+
+  foo090 "test":
+    discard
+
+  foo100 "test" do:
+    discard
+
+  foo101 10 do:
+    discard
+
+  # more complicated calls
+  foo110 1, (2+3):
+    discard
+
+  foo120 1, (2+3) do:
+    discard
+
+  foo130 do (x):
+    discard
+
+  foo140 do (x: int):
+    discard
+
+  foo150 do (x: int) -> int:
+    discard
+
+  foo160 x do (y):
+    discard
+
+  # extra blocks
+  foo170:
+    discard
+  else:
+    discard
+
+  foo180 do:
+    discard
+  do:
+    discard
+  else:
+    discard
+
+  foo190 x do (y):
+    discard
+  do (z) -> int:
+    discard
+  do (w: int) -> int:
+    discard
+  do:
+    discard
+  else:
+    discard
+
+  # call with blocks as a param
+  foo200(x, bar do:
+    discard
+  else:
+    discard
+  )
+
+  # introduce a variable
+  var a = foo210
+  var a = foo220()
+  var a = foo230(x)
+  var a = foo240 x
+
+  var a = foo250:
+    discard
+
+  var a = foo260 do:
+    discard
+
+  var a = foo270 do:
+    discard
+  else:
+    discard
+
+  var a = foo280 x do (y):
+    discard
+  else:
+    discard
+
+  # assignments
+  a = foo290
+  a = foo300()
+  a = foo310(x)
+  a = foo320 x
+
+  a = foo330:
+    discard
+
+  a = foo340 do:
+    discard
+
+  a = foo350 do:
+    discard
+  else:
+    discard
+
+  a = foo360 x.bar do (y):
+    discard
+  else:
+    discard
+
+  foo370.add quote do:
+    discard
+
+  # some edge cases
+  foo380.add((quote do:
+    discard
+  )[0])
+
+  foo390 x do (y):
+    discard
+  do (z) -> int:
+    discard
+  do (w: int) -> int:
+    discard
+  do:
+    discard
+  of a:
+    discard
+  of (a, b):
+    discard
+  elif a:
+    discard
+  elif (a, b):
+    discard
+  except a:
+    discard
+  except (a, b):
+    discard
+  finally:
+    discard
+
+  foo:
+  finally:
+    discard