package org.simantics.scl.compiler.elaboration.query; import java.util.Arrays; import org.simantics.scl.compiler.elaboration.contexts.TranslationContext; import org.simantics.scl.compiler.elaboration.contexts.TypingContext; import org.simantics.scl.compiler.elaboration.expressions.EApply; import org.simantics.scl.compiler.elaboration.expressions.EVar; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.expressions.Variable; import org.simantics.scl.compiler.elaboration.query.pre.QPreExists; import org.simantics.scl.compiler.elaboration.query.pre.QPreGuard; import org.simantics.scl.compiler.errors.Locations; import gnu.trove.map.hash.TObjectIntHashMap; import gnu.trove.set.hash.TIntHashSet; public abstract class QAbstractCombiner extends Query { public Query[] queries; public QAbstractCombiner(Query[] queries) { this.queries = queries; } @Override public Query resolve(TranslationContext context) { Query modifiedQuery = handleExistsStatement(context); if(modifiedQuery != null) return modifiedQuery.resolve(context); for(int i=0;i allVars, TIntHashSet vars) { for(Query query : queries) query.collectVars(allVars, vars); } @Override public void setLocationDeep(long loc) { if(location == Locations.NO_LOCATION) { location = loc; for(Query query : queries) query.setLocationDeep(loc); } } }