package org.simantics.scl.compiler.elaboration.expressions;
import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
+import org.simantics.scl.compiler.elaboration.chr.CHRQuery;
import org.simantics.scl.compiler.elaboration.chr.CHRRule;
+import org.simantics.scl.compiler.elaboration.chr.CHRRuleset;
import org.simantics.scl.compiler.elaboration.equation.EqBasic;
import org.simantics.scl.compiler.elaboration.equation.EqGuard;
import org.simantics.scl.compiler.elaboration.equation.Equation;
import org.simantics.scl.compiler.elaboration.equation.EquationVisitor;
import org.simantics.scl.compiler.elaboration.expressions.accessor.ExpressionAccessor;
-import org.simantics.scl.compiler.elaboration.expressions.accessor.FieldAccessor;
import org.simantics.scl.compiler.elaboration.expressions.block.BindStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.CHRStatement;
import org.simantics.scl.compiler.elaboration.expressions.block.GuardStatement;
+import org.simantics.scl.compiler.elaboration.expressions.block.IncludeStatement;
import org.simantics.scl.compiler.elaboration.expressions.block.LetStatement;
import org.simantics.scl.compiler.elaboration.expressions.block.RuleStatement;
import org.simantics.scl.compiler.elaboration.expressions.block.Statement;
statement.body = statement.body.accept(this);
}
+ @Override
+ public void visit(IncludeStatement statement) {
+ statement.value = statement.value.accept(this);
+ }
+
+ public void transform(CHRQuery query) {
+ for(CHRLiteral lit : query.literals)
+ for(int i=0;i<lit.parameters.length;++i)
+ lit.parameters[i] = lit.parameters[i].accept(this);
+ }
+
+ public void transform(CHRRuleset ruleset) {
+ for(CHRRule rule : ruleset.rules) {
+ transform(rule.head);
+ transform(rule.body);
+ }
+ }
+
@Override
public Expression transform(ECHRRuleset expression) {
expression.in = expression.in.accept(this);
- for(CHRRule rule : expression.ruleset.rules) {
- for(CHRLiteral lit : rule.head.literals)
- for(int i=0;i<lit.parameters.length;++i)
- lit.parameters[i] = lit.parameters[i].accept(this);
- for(CHRLiteral lit : rule.body.literals)
- for(int i=0;i<lit.parameters.length;++i)
- lit.parameters[i] = lit.parameters[i].accept(this);
- }
+ transform(expression.ruleset);
return expression;
}
-
+
@Override
- public Expression transform(EConstant expression) {
+ public Expression transform(ECHRSelect expression) {
+ expression.expression = expression.expression.accept(this);
+ transform(expression.query);
+ return expression;
+ }
+
+ @Override
+ public Expression transform(ECHRRulesetConstructor expression) {
+ transform(expression.ruleset);
return expression;
}
@Override
- public Expression transform(EEnforce expression) {
- expression.query = expression.query.accept(this);
+ public Expression transform(EConstant expression) {
return expression;
}
@Override
- public Expression transform(EEntityTypeAnnotation expression) {
- expression.expression = expression.expression.accept(this);
- if(expression.query != null)
- expression.query = expression.query.accept(this);
+ public Expression transform(EEnforce expression) {
+ expression.query = expression.query.accept(this);
return expression;
}
@Override
public Expression transform(EFieldAccess expression) {
expression.parent = expression.parent.accept(this);
- for(FieldAccessor accessor : expression.accessors)
- if(accessor instanceof ExpressionAccessor) {
- ExpressionAccessor expAcc = (ExpressionAccessor)accessor;
- expAcc.fieldName = expAcc.fieldName.accept(this);
- }
+ if(expression.accessor instanceof ExpressionAccessor) {
+ ExpressionAccessor expAcc = (ExpressionAccessor)expression.accessor;
+ expAcc.fieldName = expAcc.fieldName.accept(this);
+ }
return expression;
}
equation.guard = equation.guard.accept(this);
}
+ @Override
+ public void visit(CHRStatement statement) {
+ for(int i=0;i<statement.body.length;++i)
+ statement.body[i] = statement.body[i].accept(this);
+ for(int i=0;i<statement.head.length;++i)
+ statement.head[i] = statement.head[i].accept(this);
+ }
+
}