]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/block/GuardStatement.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / block / GuardStatement.java
1 package org.simantics.scl.compiler.elaboration.expressions.block;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;\r
4 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;\r
5 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;\r
6 import org.simantics.scl.compiler.elaboration.expressions.EBind;\r
7 import org.simantics.scl.compiler.elaboration.expressions.ESimpleLet;\r
8 import org.simantics.scl.compiler.elaboration.expressions.EVariable;\r
9 import org.simantics.scl.compiler.elaboration.expressions.Expression;\r
10 import org.simantics.scl.compiler.elaboration.expressions.Variable;\r
11 import org.simantics.scl.compiler.errors.Locations;\r
12 \r
13 public class GuardStatement extends Statement {\r
14     public Expression value;\r
15     \r
16     public GuardStatement(Expression value) {\r
17         this.value = value;\r
18     }\r
19 \r
20     @Override\r
21     public Expression toExpression(EnvironmentalContext context, boolean monadic, Expression in) {\r
22         if(monadic) {\r
23             Variable var = new Variable("_");\r
24             return new EBind(location, new EVariable(location, var), value, in);\r
25         }\r
26         else\r
27             return new ESimpleLet(location, null, value, in);\r
28     }\r
29     \r
30     @Override\r
31     public void setLocationDeep(long loc) {\r
32         if(location == Locations.NO_LOCATION) {\r
33             location = loc;\r
34             value.setLocationDeep(loc);\r
35         }\r
36     }\r
37     \r
38     @Override\r
39     public void resolvePattern(TranslationContext context) {\r
40     }\r
41     \r
42     @Override\r
43     public boolean mayBeRecursive() {\r
44         return false;\r
45     }\r
46     \r
47     @Override\r
48     public Statement replace(ReplaceContext context) {\r
49         return new GuardStatement(value.replace(context));\r
50     }\r
51     \r
52     @Override\r
53     public void accept(StatementVisitor visitor) {\r
54         visitor.visit(this);\r
55     }\r
56 \r
57     @Override\r
58     public StatementGroup getStatementGroup() {\r
59         return null;\r
60     }\r
61 }\r