]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Reverted if-without-else feature in SCL 27/227/1
authorHannu Niemistö <hannu.niemisto@semantum.fi>
Tue, 27 Dec 2016 14:30:02 +0000 (16:30 +0200)
committerHannu Niemistö <hannu.niemisto@semantum.fi>
Tue, 27 Dec 2016 14:30:02 +0000 (16:30 +0200)
Removed possibility to have if-then -construct without else, because the
implementation changed parsing rules and some existing code was broken.
The feature might be added in future, if better implementation is found.

refs #6894
related to change (refs #6888)

Change-Id: I1c729c4176cfaf867ba3dbf13fd73fbc14f41e61

bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLPostLexer.java
tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/ModuleRegressionTests.java

index 3d3b7b2f512033d90e13119b8edbfa8960cbaafd..efc799322b3d37c4220a90de6f8061154d3ace35 100644 (file)
@@ -37,6 +37,7 @@ public class SCLPostLexer {
         NO_SEMICOLON_BEFORE.add(SCLTerminals.EOF);
         NO_SEMICOLON_BEFORE.add(SCLTerminals.SYMBOL);
         NO_SEMICOLON_BEFORE.add(SCLTerminals.THEN);
+        NO_SEMICOLON_BEFORE.add(SCLTerminals.ELSE);
         NO_SEMICOLON_BEFORE.add(SCLTerminals.IN);
         NO_SEMICOLON_BEFORE.add(SCLTerminals.RBRACE);
         NO_SEMICOLON_BEFORE.add(SCLTerminals.RBRACKET);
@@ -145,7 +146,7 @@ public class SCLPostLexer {
                         int loc = Locations.endOf(prevToken.location);
                         push(new Token(SCLTerminals.RBRACE, loc, loc, "implicit }"));
                     }
-                    if(indentations.get(indentations.size()-1) == level && symbolId != SCLTerminals.ELSE)
+                    if(indentations.get(indentations.size()-1) == level)
                         push(new Token(SCLTerminals.SEMICOLON, symbolStart, symbolStart, "implicit ;"));
                 }
             }
@@ -175,7 +176,7 @@ public class SCLPostLexer {
         case SCLTerminals.RBRACE:
         case SCLTerminals.RPAREN:
         case SCLTerminals.RBRACKET:
-        //case SCLTerminals.ELSE:
+        case SCLTerminals.ELSE:
         case SCLTerminals.IN:
             int removedToken = SCLTerminals.EOF;
             while(!indentations.isEmpty()) {
@@ -188,11 +189,15 @@ public class SCLPostLexer {
             }
             if(indentations.isEmpty())
                 throw error(symbolStart, symbolEnd, "No corresponding opening parenthesis for '" + symbol.text + "'.");
-            if(symbolId == SCLTerminals.THEN && removedToken == SCLTerminals.WHEN)
-                curToken = symbol = new Token(SCLTerminals.THEN_AFTER_WHEN, symbol.location, symbol.text);
+            if(symbolId == SCLTerminals.THEN) {
+                if(removedToken == SCLTerminals.WHEN)
+                    curToken = symbol = new Token(SCLTerminals.THEN_AFTER_WHEN, symbol.location, symbol.text);
+                else {
+                    indentations.add(-1);
+                    indentationTokens.add(SCLTerminals.THEN);
+                }
+            }   
             push(symbol);
-            //if(symbolId == SCLTerminals.THEN)
-            //    indentations.add(-1);
             return;
         case SCLTerminals.EOF:
             while(indentations.size() > 1 && indentations.get(indentations.size()-1) >= 0) {
index 527744c00fbd8fbbac58a0b60896d49b1e311975..347191a3f96c19a45932b1d9cd44594e4949d59e 100644 (file)
@@ -77,7 +77,7 @@ public class ModuleRegressionTests extends TestBase {
     @Test public void Guards1() { test(); }
     @Test public void Guards2() { test(); }
     @Test public void IdAsOperator() { test(); }
-    @Test public void IfWithoutElse() { test(); }
+    //@Test public void IfWithoutElse() { test(); }
     @Test public void IllegalChar() { test(); }
     @Test public void ImportJavaConstructor() { test(); }
     @Test public void ImportRef() { test(); }