]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EBlock.java
New type class MonadE and corresponding monad syntax with edo keyword
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / EBlock.java
index 50f29965130ddf38abfc888ef8cd3099cde29421..c21732557ba555f5ce950058e0eddaaab468182a 100644 (file)
@@ -8,6 +8,7 @@ import org.simantics.scl.compiler.elaboration.chr.CHRRuleset;
 import org.simantics.scl.compiler.elaboration.chr.ast.CHRQueryTranslationMode;
 import org.simantics.scl.compiler.elaboration.chr.translation.CHRTranslation;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
+import org.simantics.scl.compiler.elaboration.expressions.block.BlockType;
 import org.simantics.scl.compiler.elaboration.expressions.block.CHRStatement;
 import org.simantics.scl.compiler.elaboration.expressions.block.ConstraintStatement;
 import org.simantics.scl.compiler.elaboration.expressions.block.GuardStatement;
@@ -21,19 +22,20 @@ import org.simantics.scl.compiler.errors.Locations;
 public class EBlock extends ASTExpression {
 
     public ArrayList<Statement> statements = new ArrayList<Statement>();
-    boolean monadic;
+    BlockType blockType = BlockType.Normal;
     
     public EBlock() {
+        this.blockType = blockType;
+    }
+    
+    public void setBlockType(BlockType blockType) {
+        this.blockType = blockType;
     }
 
     public void addStatement(Statement statement) {
         statements.add(statement);
     }
     
-    public void setMonadic(boolean monadic) {
-        this.monadic = monadic;
-    }
-    
     public ArrayList<Statement> getStatements() {
         return statements;
     }
@@ -64,7 +66,7 @@ public class EBlock extends ASTExpression {
             Statement cur = statements.get(i);
             StatementGroup group = cur.getStatementGroup();
             if(group == null)
-                in = cur.toExpression(context, monadic, in);
+                in = cur.toExpression(context, blockType, in);
             else {
                 int endId = i+1;
                 while(i>0 && statements.get(i-1).getStatementGroup() == group)
@@ -146,7 +148,7 @@ public class EBlock extends ASTExpression {
 
     @Override
     public int getSyntacticFunctionArity() {
-        if(monadic)
+        if(blockType != BlockType.Normal)
             return 0;
         Statement lastStatement = statements.get(statements.size()-1);
         if(!(lastStatement instanceof GuardStatement))