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.ReplaceContext;
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.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;
import gnu.trove.set.hash.TIntHashSet;
public class CHRQuery extends Symbol {
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);
for(CHRLiteral literal : literals)
literal.collectVars(allVars, vars);
}
-
- 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) {
if(location == Locations.NO_LOCATION) {
this.location = loc;
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);
+ public CHRQuery replace(ReplaceContext context) {
+ CHRLiteral[] newLiterals = new CHRLiteral[literals.length];
+ for(int i=0;i<literals.length;++i)
+ newLiterals[i] = literals[i].replace(context);
+ return new CHRQuery(newLiterals);
}
}