import org.simantics.scl.compiler.internal.codegen.continuations.ICont;
import org.simantics.scl.compiler.internal.codegen.references.IVal;
import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
-import org.simantics.scl.compiler.types.Types;
public class IterateConstraintOp extends PlanOp {
IVal fact = body.getParameters()[0];
ArrayList<IVal> parameters = new ArrayList<IVal>(expressions.length+1);
- parameters.add(planContext.storeVar);
+ parameters.add(planContext.getStoreVar(constraint));
for(int i=0;i<expressions.length;++i)
if(((boundMask>>i)&1)==1)
- parameters.add(expressions[i].toVal(context.environment, w));
+ parameters.add(expressions[i].toVal(context, w));
w.jump(bodyContinuation, w.apply(location,
constraint.fetchFromIndex(context, boundMask), parameters.toArray(new IVal[parameters.size()])));
for(int i=0;i<variables.length;++i)
if(((boundMask>>i)&1)==0)
- variables[i].setVal(body.apply(location, constraint.accessComponent(i), fact));
+ variables[i].setVal(constraint.accessComponent(location, body, fact, i));
Constant nextElement = constraint.nextElement(context, boundMask);
planContext.partnerFacts.add(new PartnerFact(false, id, constraint, fact, constraint.mayBeRemoved(), killAfterMatch, nextElement, bodyContinuation, end.getContinuation()));
planContext.nextOp(body);