]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/PlanContext.java
(refs #7250) CHR rules modularization (first working version)
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / plan / PlanContext.java
index 0ed3f8975d9bbaae4964d8f184453fdaa744b658..bc6b7da580e3b43a5e43bbf3b646fb1902ee01e7 100644 (file)
@@ -10,7 +10,9 @@ import org.simantics.scl.compiler.constants.singletons.JustConstant;
 import org.simantics.scl.compiler.constants.singletons.ListElement;
 import org.simantics.scl.compiler.constants.singletons.ListLength;
 import org.simantics.scl.compiler.elaboration.chr.CHRRuleset;
 import org.simantics.scl.compiler.constants.singletons.ListElement;
 import org.simantics.scl.compiler.constants.singletons.ListLength;
 import org.simantics.scl.compiler.elaboration.chr.CHRRuleset;
+import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
+import org.simantics.scl.compiler.elaboration.expressions.block.IncludeStatement;
 import org.simantics.scl.compiler.elaboration.java.EqualsFunction;
 import org.simantics.scl.compiler.internal.codegen.continuations.Branch;
 import org.simantics.scl.compiler.internal.codegen.continuations.ICont;
 import org.simantics.scl.compiler.elaboration.java.EqualsFunction;
 import org.simantics.scl.compiler.internal.codegen.continuations.Branch;
 import org.simantics.scl.compiler.internal.codegen.continuations.ICont;
@@ -22,15 +24,15 @@ import org.simantics.scl.compiler.types.Types;
 public abstract class PlanContext {
     public CompilationContext context;
     public CHRRuleset ruleset;
 public abstract class PlanContext {
     public CompilationContext context;
     public CHRRuleset ruleset;
-    public IVal storeVar;
+    public IVal mainStoreVar;
     public IVal contextVar;
     public ArrayList<PartnerFact> partnerFacts = new ArrayList<PartnerFact>();
     public IVal currentId;
     
     public IVal contextVar;
     public ArrayList<PartnerFact> partnerFacts = new ArrayList<PartnerFact>();
     public IVal currentId;
     
-    public PlanContext(CompilationContext context, CHRRuleset ruleset, IVal storeVar, IVal contextVar) {
+    public PlanContext(CompilationContext context, CHRRuleset ruleset, IVal mainStoreVar, IVal contextVar) {
         this.context = context;
         this.ruleset = ruleset;
         this.context = context;
         this.ruleset = ruleset;
-        this.storeVar = storeVar;
+        this.mainStoreVar = mainStoreVar;
         this.contextVar = contextVar;
     }
 
         this.contextVar = contextVar;
     }
 
@@ -116,4 +118,12 @@ public abstract class PlanContext {
         
         w.continueAs(end);
     }
         
         w.continueAs(end);
     }
+
+    public IVal getStoreVar(CHRConstraint constraint) {
+        IncludeStatement includeStatement = ruleset.constraintSourceMap.get(constraint);
+        if(includeStatement != null)
+            return includeStatement.storeVar;
+        else
+            return mainStoreVar;
+    }
 }
 }