package org.simantics.scl.compiler.elaboration.expressions.visitors; import org.simantics.scl.compiler.elaboration.expressions.EApply; import org.simantics.scl.compiler.elaboration.expressions.ECHRRuleset; import org.simantics.scl.compiler.elaboration.expressions.ECHRSelect; import org.simantics.scl.compiler.elaboration.expressions.EFieldAccess; import org.simantics.scl.compiler.elaboration.expressions.ELambda; import org.simantics.scl.compiler.elaboration.expressions.ESimpleLambda; import org.simantics.scl.compiler.elaboration.expressions.ETransformation; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import gnu.trove.set.hash.THashSet; public class CollectEffectsVisitor extends StandardExpressionVisitor { public final THashSet effects = new THashSet(); @Override public void visit(EApply expression) { effects.add(expression.effect); super.visit(expression); } @Override public void visit(ECHRRuleset expression) { effects.add(Types.PROC); super.visit(expression); } @Override public void visit(ECHRSelect expression) { effects.add(Types.PROC); super.visit(expression); } @Override public void visit(EFieldAccess expression) { // FIXME effects.add(Types.READ_GRAPH); super.visit(expression); } @Override public void visit(ETransformation expression) { // FIXME effects.add(Types.PROC); super.visit(expression); } @Override public void visit(ELambda expression) { } @Override public void visit(ESimpleLambda expression) { } public Type getCombinedEffect() { return Types.union(effects.toArray(new Type[effects.size()])); } }