--- /dev/null
+package org.simantics.scl.compiler.elaboration.expressions;\r
+\r
+import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;\r
+import org.simantics.scl.compiler.errors.Locations;\r
+import org.simantics.scl.compiler.internal.elaboration.utils.ExpressionDecorator;\r
+import org.simantics.scl.compiler.internal.parsing.Symbol;\r
+\r
+public class GuardedExpression extends Symbol {\r
+ public Expression[] guards;\r
+ public Expression value;\r
+ \r
+ public GuardedExpression(Expression[] guards, Expression value) {\r
+ this.guards = guards;\r
+ this.value = value;\r
+ }\r
+\r
+ public GuardedExpression replace(ReplaceContext context) {\r
+ return new GuardedExpression(\r
+ Expression.replace(context, guards), \r
+ value.replace(context));\r
+ }\r
+\r
+ public void decorate(ExpressionDecorator decorator) {\r
+ for(int i=0;i<guards.length;++i)\r
+ guards[i] = guards[i].decorate(decorator);\r
+ value = value.decorate(decorator);\r
+ }\r
+\r
+ public void setLocationDeep(long loc) {\r
+ if(location == Locations.NO_LOCATION) {\r
+ location = loc;\r
+ for(Expression guard : guards)\r
+ guard.setLocationDeep(loc);\r
+ value.setLocationDeep(loc);\r
+ }\r
+ }\r
+\r
+ public void forVariables(VariableProcedure procedure) {\r
+ for(Expression guard : guards)\r
+ guard.forVariables(procedure);\r
+ value.forVariables(procedure);\r
+ }\r
+}\r