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%2FQIf.java;h=719f474b6b115d3d800d65c801cadb4f55ce8c9a;hb=refs%2Fchanges%2F50%2F750%2F1;hp=5691a16e146a2c2734c00b8d39cd0a79225fe5b9;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java index 5691a16e1..719f474b6 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java @@ -1,98 +1,90 @@ -package org.simantics.scl.compiler.elaboration.query; - -import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; -import org.simantics.scl.compiler.elaboration.contexts.TypingContext; -import org.simantics.scl.compiler.elaboration.expressions.Expression; -import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer; -import org.simantics.scl.compiler.elaboration.expressions.Variable; -import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure; -import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext; -import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException; -import org.simantics.scl.compiler.errors.Locations; -import org.simantics.scl.compiler.types.Types; - -import gnu.trove.map.hash.TObjectIntHashMap; -import gnu.trove.set.hash.THashSet; -import gnu.trove.set.hash.TIntHashSet; - -public class QIf extends Query { - public Expression condition; - public Query thenQuery; - public Query elseQuery; - - public QIf(Expression condition, Query thenQuery, Query elseQuery) { - this.condition = condition; - this.thenQuery = thenQuery; - this.elseQuery = elseQuery; - } - - @Override - public void collectFreeVariables(THashSet vars) { - condition.collectFreeVariables(vars); - thenQuery.collectFreeVariables(vars); - elseQuery.collectFreeVariables(vars); - } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - condition.collectRefs(allRefs, refs); - thenQuery.collectRefs(allRefs, refs); - elseQuery.collectRefs(allRefs, refs); - } - - @Override - public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { - condition.collectVars(allVars, vars); - thenQuery.collectVars(allVars, vars); - elseQuery.collectVars(allVars, vars); - } - - @Override - public void checkType(TypingContext context) { - condition.checkType(context, Types.BOOLEAN); - thenQuery.checkType(context); - elseQuery.checkType(context); - } - - @Override - public void collectConstraints(ConstraintCollectionContext context) throws UnsolvableQueryException { - // TODO Auto-generated method stub - - } - - @Override - public Query replace(ReplaceContext context) { - return new QIf( - condition.replace(context), - thenQuery.replace(context), - elseQuery.replace(context)); - } - - @Override - public void setLocationDeep(long loc) { - if(location == Locations.NO_LOCATION) { - this.location = loc; - condition.setLocationDeep(loc); - elseQuery.setLocationDeep(loc); - thenQuery.setLocationDeep(loc); - } - } - - @Override - public void accept(QueryVisitor visitor) { - visitor.visit(this); - } - - @Override - public void forVariables(VariableProcedure procedure) { - condition.forVariables(procedure); - elseQuery.forVariables(procedure); - thenQuery.forVariables(procedure); - } - - @Override - public Query accept(QueryTransformer transformer) { - return transformer.transform(this); - } - -} +package org.simantics.scl.compiler.elaboration.query; + +import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext; +import org.simantics.scl.compiler.elaboration.contexts.TypingContext; +import org.simantics.scl.compiler.elaboration.expressions.Expression; +import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer; +import org.simantics.scl.compiler.elaboration.expressions.Variable; +import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext; +import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException; +import org.simantics.scl.compiler.errors.Locations; +import org.simantics.scl.compiler.types.Types; + +import gnu.trove.map.hash.TObjectIntHashMap; +import gnu.trove.set.hash.THashSet; +import gnu.trove.set.hash.TIntHashSet; + +public class QIf extends Query { + public Expression condition; + public Query thenQuery; + public Query elseQuery; + + public QIf(Expression condition, Query thenQuery, Query elseQuery) { + this.condition = condition; + this.thenQuery = thenQuery; + this.elseQuery = elseQuery; + } + + @Override + public void collectFreeVariables(THashSet vars) { + condition.collectFreeVariables(vars); + thenQuery.collectFreeVariables(vars); + elseQuery.collectFreeVariables(vars); + } + + @Override + public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { + condition.collectRefs(allRefs, refs); + thenQuery.collectRefs(allRefs, refs); + elseQuery.collectRefs(allRefs, refs); + } + + @Override + public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { + condition.collectVars(allVars, vars); + thenQuery.collectVars(allVars, vars); + elseQuery.collectVars(allVars, vars); + } + + @Override + public void checkType(TypingContext context) { + condition.checkType(context, Types.BOOLEAN); + thenQuery.checkType(context); + elseQuery.checkType(context); + } + + @Override + public void collectConstraints(ConstraintCollectionContext context) throws UnsolvableQueryException { + // TODO Auto-generated method stub + + } + + @Override + public Query replace(ReplaceContext context) { + return new QIf( + condition.replace(context), + thenQuery.replace(context), + elseQuery.replace(context)); + } + + @Override + public void setLocationDeep(long loc) { + if(location == Locations.NO_LOCATION) { + this.location = loc; + condition.setLocationDeep(loc); + elseQuery.setLocationDeep(loc); + thenQuery.setLocationDeep(loc); + } + } + + @Override + public void accept(QueryVisitor visitor) { + visitor.visit(this); + } + + @Override + public Query accept(QueryTransformer transformer) { + return transformer.transform(this); + } + +}