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