]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java
A utility class for recursive search in cyclic graph
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / CHRQuery.java
index 5c0fdaea20f929f1a38ecfd93e29dab950ab1ea0..2d97ab51819e4d271cea111e42050878da58c6a2 100644 (file)
@@ -4,6 +4,7 @@ import org.simantics.scl.compiler.elaboration.chr.plan.PostCommitOp;
 import org.simantics.scl.compiler.elaboration.chr.plan.PreCommitOp;
 import org.simantics.scl.compiler.elaboration.chr.planning.QueryPlanningContext;
 import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
+import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
@@ -12,10 +13,8 @@ import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
-import org.simantics.scl.compiler.types.Type;
 
 import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.THashSet;
 import gnu.trove.set.hash.TIntHashSet;
 
 public class CHRQuery extends Symbol {
@@ -81,13 +80,10 @@ public class CHRQuery extends Symbol {
         return b.toString();
     }
 
-    public void collectQueryEffects(THashSet<Type> effects) {
-        for(CHRLiteral literal : literals)
-            literal.collectQueryEffects(effects);
-    }
-    
-    public void collectEnforceEffects(THashSet<Type> effects) {
-        for(CHRLiteral literal : literals)
-            literal.collectEnforceEffects(effects);
+    public CHRQuery replace(ReplaceContext context) {
+        CHRLiteral[] newLiterals = new CHRLiteral[literals.length];
+        for(int i=0;i<literals.length;++i)
+            newLiterals[i] = literals[i].replace(context);
+        return new CHRQuery(newLiterals);
     }
 }