1 package org.simantics.scl.compiler.elaboration.chr.plan;
3 import org.simantics.scl.compiler.compilation.CompilationContext;
4 import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
5 import org.simantics.scl.compiler.elaboration.expressions.Expression;
6 import org.simantics.scl.compiler.internal.codegen.references.IVal;
7 import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
9 public class ClaimOp extends PlanOp {
11 CHRConstraint constraint;
12 Expression[] parameters;
14 public ClaimOp(long location, CHRConstraint constraint, Expression[] parameters) {
16 this.constraint = constraint;
17 this.parameters = parameters;
21 public void toString(StringBuilder b) {
22 b.append("CLAIM ").append(constraint);
23 for (Expression parameter : parameters)
24 b.append(" (").append(parameter).append(')');
28 public void generateCode(CompilationContext context, PlanContext planContext, CodeWriter w) {
29 IVal[] parameterVars = new IVal[parameters.length+1];
30 parameterVars[0] = planContext.generateNewId(location, w);
31 for(int i=0;i<parameters.length;++i)
32 parameterVars[i+1] = parameters[i].toVal(context.environment, w);
33 IVal newFact = w.apply(location, constraint.constructor, parameterVars);
34 w.apply(location, constraint.addProcedure, planContext.storeVar, newFact);
35 planContext.nextOp(w);