summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--compiler/parser.nim14
-rw-r--r--doc/grammar.txt2
-rw-r--r--tests/run/tstmtexprs.nim5
3 files changed, 15 insertions, 6 deletions
diff --git a/compiler/parser.nim b/compiler/parser.nim
index 7cfd35a41..46294925d 100644
--- a/compiler/parser.nim
+++ b/compiler/parser.nim
@@ -1748,7 +1748,7 @@ proc complexOrSimpleStmt(p: var TParser): PNode =
   
 proc parseStmt(p: var TParser): PNode =
   #| stmt = (IND{>} complexOrSimpleStmt^+(IND{=} / ';') DED)
-  #|      / simpleStmt
+  #|      / simpleStmt ^+ ';'
   if p.tok.indent > p.currInd:
     result = newNodeP(nkStmtList, p)
     withInd(p):
@@ -1779,10 +1779,14 @@ proc parseStmt(p: var TParser): PNode =
       parMessage(p, errComplexStmtRequiresInd)
       result = ast.emptyNode
     else:
-      if p.tok.indent >= 0: parMessage(p, errInvalidIndentation)
-      result = simpleStmt(p)
-      if result.kind == nkEmpty: parMessage(p, errExprExpected, p.tok)
-      #while p.tok.tokType == tkSemicolon: getTok(p)
+      result = newNodeP(nkStmtList, p)
+      while true:
+        if p.tok.indent >= 0: parMessage(p, errInvalidIndentation)     
+        let a = simpleStmt(p)
+        if a.kind == nkEmpty: parMessage(p, errExprExpected, p.tok)
+        result.add(a)
+        if p.tok.tokType != tkSemicolon: break
+        getTok(p)
   
 proc parseAll(p: var TParser): PNode = 
   result = newNodeP(nkStmtList, p)
diff --git a/doc/grammar.txt b/doc/grammar.txt
index 3aa556ce3..741e9b907 100644
--- a/doc/grammar.txt
+++ b/doc/grammar.txt
@@ -186,4 +186,4 @@ complexOrSimpleStmt = (ifStmt | whenStmt | whileStmt
                     | bindStmt | mixinStmt)
                     / simpleStmt
 stmt = (IND{>} complexOrSimpleStmt^+(IND{=} / ';') DED)
-     / simpleStmt
+     / simpleStmt ^+ ';'
diff --git a/tests/run/tstmtexprs.nim b/tests/run/tstmtexprs.nim
index a69acd98b..497a2f6d0 100644
--- a/tests/run/tstmtexprs.nim
+++ b/tests/run/tstmtexprs.nim
@@ -64,3 +64,8 @@ proc p2(a: int): int =
   q()
 
 echo p(), " ", p2(2)
+
+proc semiProblem() =
+  if false: echo "aye"; echo "indeed"
+
+semiProblem()