X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fquery%2FQAtom.java;h=5f13bfd7b385a7b15a559ee07e41161ad13b464c;hb=HEAD;hp=95760513b5383e80136b8005ff9ed50ce4a8b82a;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java index 95760513b..5f13bfd7b 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java @@ -1,11 +1,5 @@ package org.simantics.scl.compiler.elaboration.query; -import gnu.trove.map.hash.THashMap; -import gnu.trove.map.hash.TIntObjectHashMap; -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; -import gnu.trove.set.hash.TIntHashSet; - import java.util.ArrayList; import java.util.Set; @@ -31,28 +25,26 @@ import org.simantics.scl.compiler.types.TVar; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; +import gnu.trove.map.hash.THashMap; +import gnu.trove.map.hash.TIntObjectHashMap; +import gnu.trove.set.hash.TIntHashSet; + public class QAtom extends Query { public SCLRelation relation; public Type[] typeParameters; public Expression[] parameters; - + public QAtom(SCLRelation relation, Expression ... parameters) { this.relation = relation; this.parameters = parameters; } - + public QAtom(SCLRelation relation, Type[] typeParameters, Expression ... parameters) { this.relation = relation; this.typeParameters = typeParameters; this.parameters = parameters; } - @Override - public void collectFreeVariables(THashSet vars) { - for(Expression parameter : parameters) - parameter.collectFreeVariables(vars); - } - @Override public void checkType(TypingContext context) { // Type parameters @@ -60,7 +52,7 @@ public class QAtom extends Query { typeParameters = new Type[typeVariables.length]; for(int i=0;i= 0) allVariablesSet.add(v); - + context.addConstraint(new RelationConstraint(allVariablesSet.toArray(), varParameters, this, optionalVariableByParameter, procedure.requiredVariablesMask)); } catch(Exception e) { context.getQueryCompilationContext().getTypingContext().getErrorLog().log(location, e); } } - - private static void collectRefs(SCLRelation relation, TObjectIntHashMap allRefs, - TIntHashSet refs) { - if(relation instanceof CompositeRelation) { - for(SCLRelation subrelation : ((CompositeRelation) relation).getSubrelations()) - collectRefs(subrelation, allRefs, refs); - } - else { - int id = allRefs.get(relation); - if(id >= 0) - refs.add(id); - } - } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - collectRefs(relation, allRefs, refs); - for(Expression parameter : parameters) - parameter.collectRefs(allRefs, refs); - } - - @Override - public void collectVars(TObjectIntHashMap allVars, - TIntHashSet vars) { - for(Expression parameter : parameters) - parameter.collectVars(allVars, vars); - } @Override public Query replace(ReplaceContext context) { @@ -215,7 +179,7 @@ public class QAtom extends Query { return new Diff[] { new Diff(diffable.id, new QConjunction(eqs)) }; } } - + private static boolean containsReferenceTo( CompositeRelation relation, THashMap diffables) { @@ -235,7 +199,7 @@ public class QAtom extends Query { else return this; } - + @Override public void setLocationDeep(long loc) { if(location == Locations.NO_LOCATION) { @@ -244,18 +208,12 @@ public class QAtom extends Query { parameter.setLocationDeep(loc); } } - + @Override public void accept(QueryVisitor visitor) { visitor.visit(this); } - @Override - public void forVariables(VariableProcedure procedure) { - for(Expression parameter : parameters) - parameter.forVariables(procedure); - } - @Override public void splitToPhases(TIntObjectHashMap> result) { int phase = relation.getPhase(); @@ -266,7 +224,7 @@ public class QAtom extends Query { } list.add(this); } - + @Override public Query accept(QueryTransformer transformer) { return transformer.transform(this);