From e74b53b80e4b2cdf846e9dd207180087e0b9c41b Mon Sep 17 00:00:00 2001
From: NeilBrown <neil@brown.name>
Date: Sun, 23 Jun 2019 15:37:50 +1000
Subject: [PATCH] oceani: allow 'then' in simple if statements.

Allow 'then' after "if expression", and don't require a ':' if
it is followed by simple statements.
Similarly "else" doesn't need a colon for simple statements

Signed-off-by: NeilBrown <neil@brown.name>
---
 csrc/oceani-tests.mdc | 13 +++++++++++++
 csrc/oceani.mdc       | 25 ++++++++++++++++++++++++-
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/csrc/oceani-tests.mdc b/csrc/oceani-tests.mdc
index 8e4ddad..ab89bf2 100644
--- a/csrc/oceani-tests.mdc
+++ b/csrc/oceani-tests.mdc
@@ -242,6 +242,16 @@ Now we need to test if/else and some different loops
 			print "Close enough"
 		print "lower" if 355/113 < pi else "higher"
 
+		if pi > 3 then print "pi exceeds three"; else print "need more pie"
+		if (pi < 3) { print "not enough pi" } else { print "pi sufficient" }
+		for { i := 0; sum := 0 }
+		then { i = i+1 }
+		while i <= 10:
+			sum = sum + i
+		else:
+			pass
+			print "sum 1..10 is", sum
+
 ###### output: cond_loop
 	Success
 	 1 2 4 8 16 32 64
@@ -256,6 +266,9 @@ Now we need to test if/else and some different loops
 	I won't calculate 20 / 9
 	Close enough
 	higher
+	pi exceeds three
+	pi sufficient
+	sum 1..10 is 55
 
 ## Say Hello
 
diff --git a/csrc/oceani.mdc b/csrc/oceani.mdc
index e02057f..bf66eec 100644
--- a/csrc/oceani.mdc
+++ b/csrc/oceani.mdc
@@ -3636,6 +3636,11 @@ defined.
 			$0->elsepart = $<3;
 			var_block_close(c, CloseElse);
 		}$
+		| else OpenScope SimpleStatements NEWLINE ${
+			$0 = new(cond_statement);
+			$0->elsepart = reorder_bilist($<3);
+			var_block_close(c, CloseElse);
+		}$
 		| else OpenScope CondStatement ${
 			$0 = new(cond_statement);
 			$0->elsepart = $<3;
@@ -3693,6 +3698,24 @@ defined.
 			$0.thenpart = $<5;
 			var_block_close(c, CloseParallel);
 		}$
+		| if OpenScope Expression OpenScope then Block ${
+			$0.type = Xcond_statement;
+			$0.condpart = $<3;
+			$0.thenpart = $<6;
+			var_block_close(c, CloseParallel);
+		}$
+		| if OpenScope Expression OpenScope then SimpleStatements ; ${
+			$0.type = Xcond_statement;
+			$0.condpart = $<3;
+			$0.thenpart = reorder_bilist($<6);
+			var_block_close(c, CloseParallel);
+		}$
+		| if OpenScope Expression OpenScope then SimpleStatements NEWLINE ${
+			$0.type = Xcond_statement;
+			$0.condpart = $<3;
+			$0.thenpart = reorder_bilist($<6);
+			var_block_close(c, CloseParallel);
+		}$
 		| if OpenScope Block then OpenScope Block ${
 			$0.type = Xcond_statement;
 			$0.condpart = $<3;
@@ -4333,7 +4356,7 @@ things which will likely grow as the languages grows.
 			print "", list[i],
 		print
 
-		if 1 == 2: print "yes" else: print "no"
+		if 1 == 2 then print "yes"; else print "no"
 
 		bob:fred
 		bob.name = "Hello"
-- 
2.43.0