package org.simantics.scl.compiler.elaboration.chr; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; 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.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.Expression; import org.simantics.scl.compiler.elaboration.expressions.ExpressionVisitor; import org.simantics.scl.compiler.elaboration.expressions.Variable; import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor; import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor; import org.simantics.scl.compiler.elaboration.expressions.visitors.StandardExpressionVisitor; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.compiler.internal.parsing.Symbol; import gnu.trove.map.hash.TObjectIntHashMap; import gnu.trove.set.hash.TIntHashSet; public class CHRQuery extends Symbol { public CHRLiteral[] literals; public CHRQuery(long location, CHRLiteral[] literals) { this.literals = literals; this.location = location; } public void resolve(TranslationContext context) { for(CHRLiteral literal : literals) literal.resolve(context); } public void checkType(TypingContext context) { for(CHRLiteral literal : literals) literal.checkType(context); } public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { for(CHRLiteral literal : literals) literal.collectVars(allVars, vars); } public void setLocationDeep(long loc) { if(location == Locations.NO_LOCATION) { this.location = loc; for(CHRLiteral literal : literals) literal.setLocationDeep(loc); } } public boolean createQueryPlan(QueryPlanningContext context, Expression inputFact, int activeLiteralId, CHRConstraint initConstraint) { try { for(int i=0;i