]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectEffectsVisitor.java
(refs #7375) Replaced collectEffects by CollectEffectsVisitor
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / visitors / CollectEffectsVisitor.java
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 (file)
index 0000000..aec3d84
--- /dev/null
@@ -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<Type> effects = new THashSet<Type>();
+    
+    @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()]));
+    }
+}