import org.simantics.scl.compiler.elaboration.chr.plan.AccessFactOp;
import org.simantics.scl.compiler.elaboration.chr.plan.ClaimOp;
import org.simantics.scl.compiler.elaboration.chr.plan.ExecuteOp;
+import org.simantics.scl.compiler.elaboration.chr.plan.MatchOp;
import org.simantics.scl.compiler.elaboration.chr.plan.PlanOp;
import org.simantics.scl.compiler.elaboration.chr.planning.items.CheckPrePlanItem;
import org.simantics.scl.compiler.elaboration.chr.planning.items.EqualsPrePlanItem;
import org.simantics.scl.compiler.elaboration.expressions.EVariable;
import org.simantics.scl.compiler.elaboration.expressions.Expression;
import org.simantics.scl.compiler.elaboration.expressions.Variable;
+import org.simantics.scl.compiler.errors.Locations;
import gnu.trove.impl.Constants;
import gnu.trove.map.hash.TObjectIntHashMap;
case MEMBER:
addMember(literal.location, literal.parameters[0], literal.parameters[1], secondaryPriority);
return;
+ case ASSIGN:
+ throw new InternalCompilerError(literal.location, "ASSIGN constraint is not allowed in query compilation.");
case EXECUTE:
throw new InternalCompilerError(literal.location, "EXECUTE constraint is not allowed in query compilation.");
}
for(int i=0;i<literal.parameters.length;++i)
addOneSidedEquals(literal.parameters[i].location, new EVariable(variables[i]), literal.parameters[i], secondaryPriority);
}
+
+ public void addInitFact(CHRConstraint initConstraint, Expression inputFact) {
+ planOps.add(new AccessFactOp(Locations.NO_LOCATION, inputFact, initConstraint, Variable.EMPTY_ARRAY, false));
+ }
public void claim(QueryPlanningContext context, CHRLiteral literal) {
if(literal.relation instanceof CHRConstraint) {
case EXECUTE:
addPlanOp(new ExecuteOp(literal.location, literal.parameters[0]));
break;
+ case ASSIGN:
+ addPlanOp(new MatchOp(literal.location, literal.parameters[1], literal.parameters[0]));
+ break;
default:
context.getCompilationContext().errorLog.log(
literal.location,