package org.simantics.scl.compiler.elaboration.expressions.visitors;
+import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
+import org.simantics.scl.compiler.elaboration.chr.CHRRule;
import org.simantics.scl.compiler.elaboration.expressions.EApply;
-import org.simantics.scl.compiler.elaboration.expressions.ECHRRuleset;
import org.simantics.scl.compiler.elaboration.expressions.ECHRSelect;
import org.simantics.scl.compiler.elaboration.expressions.EFieldAccess;
import org.simantics.scl.compiler.elaboration.expressions.ELambda;
}
@Override
- public void visit(ECHRRuleset expression) {
- effects.add(Types.PROC);
- super.visit(expression);
+ public void visit(CHRRule rule) {
+ for(CHRLiteral literal : rule.head.literals) {
+ super.visit(literal);
+ literal.relation.collectQueryEffects(effects);
+ }
+ for(CHRLiteral literal : rule.body.literals) {
+ super.visit(literal);
+ literal.relation.collectEnforceEffects(effects);
+ }
}
@Override
public void visit(ECHRSelect expression) {
- effects.add(Types.PROC);
- super.visit(expression);
+ for(CHRLiteral literal : expression.query.literals) {
+ super.visit(literal);
+ literal.relation.collectQueryEffects(effects);
+ }
+ expression.expression.accept(this);
}
@Override