X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fchr%2FCHRQuery.java;h=8bba6697d9bb3832782ee20ab4dd5af493219ab1;hb=a9f88c57e622d9ecf2732bd0278e0989dc0dfd5a;hp=5cb0f2aee230acb6f79838fd358612c81edc024f;hpb=e81aaf01a022b7f9fd54924f843a8f8594682126;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java index 5cb0f2aee..8bba6697d 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java @@ -4,15 +4,16 @@ 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.chr.relations.SpecialCHRRelation; import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext; import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; import org.simantics.scl.compiler.elaboration.contexts.TypingContext; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.expressions.Variable; -import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure; 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; @@ -30,11 +31,6 @@ public class CHRQuery extends Symbol { literal.resolve(context); } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - for(CHRLiteral literal : literals) - literal.collectRefs(allRefs, refs); - } - public void checkType(TypingContext context) { for(CHRLiteral literal : literals) literal.checkType(context); @@ -45,14 +41,12 @@ public class CHRQuery extends Symbol { literal.collectVars(allVars, vars); } - public void forVariables(VariableProcedure procedure) { - for(CHRLiteral literal : literals) - literal.forVariables(procedure); - } - public void collectFreeVariables(THashSet vars) { for(CHRLiteral literal : literals) literal.collectFreeVariables(vars); + for(CHRLiteral literal : literals) + if(literal.relation == SpecialCHRRelation.ASSIGN) + literal.parameters[0].removeFreeVariables(vars); } public void setLocationDeep(long loc) { @@ -71,7 +65,7 @@ public class CHRQuery extends Symbol { else context.add(literal, i); } - if(activeLiteralId == -1) { + if(activeLiteralId == -1 && inputFact != null) { context.addInitFact(initConstraint, inputFact); } return context.createQueryPlan(); @@ -95,4 +89,14 @@ public class CHRQuery extends Symbol { visitor.visit(this); return b.toString(); } + + public void collectQueryEffects(THashSet effects) { + for(CHRLiteral literal : literals) + literal.collectQueryEffects(effects); + } + + public void collectEnforceEffects(THashSet effects) { + for(CHRLiteral literal : literals) + literal.collectEnforceEffects(effects); + } }