]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpression.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / GuardedExpression.java
1 package org.simantics.scl.compiler.elaboration.expressions;\r
2 \r
3 import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;\r
4 import org.simantics.scl.compiler.errors.Locations;\r
5 import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator;\r
6 import org.simantics.scl.compiler.internal.parsing.Symbol;\r
7 \r
8 public class GuardedExpression extends Symbol {\r
9     public Expression[] guards;\r
10     public Expression value;\r
11     \r
12     public GuardedExpression(Expression[] guards, Expression value) {\r
13         this.guards = guards;\r
14         this.value = value;\r
15     }\r
16 \r
17     public GuardedExpression replace(ReplaceContext context) {\r
18         return new GuardedExpression(\r
19                 Expression.replace(context, guards), \r
20                 value.replace(context));\r
21     }\r
22 \r
23     public void decorate(ExpressionDecorator decorator) {\r
24         for(int i=0;i<guards.length;++i)\r
25             guards[i] = guards[i].decorate(decorator);\r
26         value = value.decorate(decorator);\r
27     }\r
28 \r
29     public void setLocationDeep(long loc) {\r
30         if(location == Locations.NO_LOCATION) {\r
31             location = loc;\r
32             for(Expression guard : guards)\r
33                 guard.setLocationDeep(loc);\r
34             value.setLocationDeep(loc);\r
35         }\r
36     }\r
37 \r
38     public void forVariables(VariableProcedure procedure) {\r
39         for(Expression guard : guards)\r
40             guard.forVariables(procedure);\r
41         value.forVariables(procedure);\r
42     }\r
43 }\r