X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2Fvisitors%2FCollectEffectsVisitor.java;fp=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2Fvisitors%2FCollectEffectsVisitor.java;h=aec3d84dc99e0ab6cd593d6556b1f3ffc81a4e81;hb=a8d72a172fdc815c8a9f0f584f010f7e35286f92;hp=0000000000000000000000000000000000000000;hpb=2df6133d08115f25494f7f8009b6601862895f6c;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectEffectsVisitor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectEffectsVisitor.java new file mode 100644 index 000000000..aec3d84dc --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectEffectsVisitor.java @@ -0,0 +1,62 @@ +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.elaboration.expressions.StandardExpressionVisitor; +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()])); + } +}