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=4e5670fcd955edc0945e466ee8a4413e7a9909fb;hb=35e73f300e2101c436dcc23c9a0f9e12ecc81d59;hp=9e2bf6f343c026637ff5dfd0db3ae2af6663c512;hpb=fc1c765795517b3e77a1956fb2ae98a770d2beec;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 9e2bf6f34..4e5670fcd 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 @@ -3,6 +3,8 @@ package org.simantics.scl.compiler.elaboration.chr; 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; @@ -12,6 +14,7 @@ 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; @@ -52,6 +55,9 @@ public class CHRQuery extends Symbol { 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) { @@ -62,7 +68,7 @@ public class CHRQuery extends Symbol { } } - public boolean createQueryPlan(QueryPlanningContext context, Expression inputFact, int activeLiteralId) { + public boolean createQueryPlan(QueryPlanningContext context, Expression inputFact, int activeLiteralId, CHRConstraint initConstraint) { for(int i=0;i effects) { + for(CHRLiteral literal : literals) + literal.collectQueryEffects(effects); + } + + public void collectEnforceEffects(THashSet effects) { + for(CHRLiteral literal : literals) + literal.collectEnforceEffects(effects); + } }