import org.simantics.scl.compiler.elaboration.chr.plan.PostCommitOp;
import org.simantics.scl.compiler.elaboration.chr.plan.PreCommitOp;
import org.simantics.scl.compiler.elaboration.chr.planning.QueryPlanningContext;
+import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
+import org.simantics.scl.compiler.elaboration.chr.relations.SpecialCHRRelation;
import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
import org.simantics.scl.compiler.elaboration.expressions.Expression;
import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
import org.simantics.scl.compiler.errors.Locations;
import org.simantics.scl.compiler.internal.parsing.Symbol;
+import org.simantics.scl.compiler.types.Type;
import gnu.trove.map.hash.TObjectIntHashMap;
import gnu.trove.set.hash.THashSet;
literal.resolve(context);
}
- public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
- for(CHRLiteral literal : literals)
- literal.collectRefs(allRefs, refs);
- }
-
public void checkType(TypingContext context) {
for(CHRLiteral literal : literals)
literal.checkType(context);
literal.collectVars(allVars, vars);
}
- public void forVariables(VariableProcedure procedure) {
- for(CHRLiteral literal : literals)
- literal.forVariables(procedure);
- }
-
public void collectFreeVariables(THashSet<Variable> vars) {
for(CHRLiteral literal : literals)
literal.collectFreeVariables(vars);
+ for(CHRLiteral literal : literals)
+ if(literal.relation == SpecialCHRRelation.ASSIGN)
+ literal.parameters[0].removeFreeVariables(vars);
}
public void setLocationDeep(long loc) {
}
}
- public boolean createQueryPlan(QueryPlanningContext context, Expression inputFact, int activeLiteralId) {
+ public boolean createQueryPlan(QueryPlanningContext context, Expression inputFact, int activeLiteralId, CHRConstraint initConstraint) {
for(int i=0;i<literals.length;++i) {
CHRLiteral literal = literals[i];
if(i == activeLiteralId)
else
context.add(literal, i);
}
+ if(activeLiteralId == -1 && inputFact != null) {
+ context.addInitFact(initConstraint, inputFact);
+ }
return context.createQueryPlan();
}
visitor.visit(this);
return b.toString();
}
+
+ public void collectQueryEffects(THashSet<Type> effects) {
+ for(CHRLiteral literal : literals)
+ literal.collectQueryEffects(effects);
+ }
+
+ public void collectEnforceEffects(THashSet<Type> effects) {
+ for(CHRLiteral literal : literals)
+ literal.collectEnforceEffects(effects);
+ }
}