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=6b01d99531f9d30db25fe0277e0f98d435632729;hb=refs%2Fchanges%2F37%2F2737%2F5;hp=8bba6697d9bb3832782ee20ab4dd5af493219ab1;hpb=2df6133d08115f25494f7f8009b6601862895f6c;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 8bba6697d..6b01d9953 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 @@ -1,29 +1,32 @@ package org.simantics.scl.compiler.elaboration.chr; +import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; 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.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; import org.simantics.scl.compiler.elaboration.expressions.Expression; +import org.simantics.scl.compiler.elaboration.expressions.ExpressionVisitor; import org.simantics.scl.compiler.elaboration.expressions.Variable; import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor; +import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor; +import org.simantics.scl.compiler.elaboration.expressions.visitors.StandardExpressionVisitor; 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 { public CHRLiteral[] literals; - public CHRQuery(CHRLiteral[] literals) { + public CHRQuery(long location, CHRLiteral[] literals) { this.literals = literals; + this.location = location; } public void resolve(TranslationContext context) { @@ -40,15 +43,7 @@ public class CHRQuery extends Symbol { for(CHRLiteral literal : literals) literal.collectVars(allVars, vars); } - - 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) { if(location == Locations.NO_LOCATION) { this.location = loc; @@ -58,17 +53,21 @@ public class CHRQuery extends Symbol { } 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 CHRQuery replace(ReplaceContext context) { + CHRLiteral[] newLiterals = new CHRLiteral[literals.length]; + for(int i=0;i effects) { - for(CHRLiteral literal : literals) - literal.collectEnforceEffects(effects); + public void accept(ExpressionVisitor visitor) { + for(CHRLiteral literal : literals) { + if(literal == null || literal.parameters == null) + continue; // FIXME why this happens? + for(Expression parameter : literal.parameters) { + if(parameter == null) + continue; // FIXME why this happens? + parameter.accept(visitor); + } + } } }