]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/IterateConstraintOp.java
(refs #7278, refs #7279) Small fixes to InternalCompilerExceptions
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / plan / IterateConstraintOp.java
index 9a4e6475ec374ad95e1f59735ac0455533f1aceb..035ccd624a134f8942e3d19a8908fca2ddda75a5 100644 (file)
@@ -12,7 +12,6 @@ import org.simantics.scl.compiler.elaboration.expressions.Variable;
 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 {
     
@@ -56,10 +55,10 @@ 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()])));
 
@@ -78,7 +77,7 @@ public class IterateConstraintOp extends PlanOp {
 
         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);