]> 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) Fixed implementation of collectEffects
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / visitors / CollectEffectsVisitor.java
index 118d4de1aea7bdd94bb3f95e06ad74d672e14e6f..10190d5a455ce271104fd2175a8135bebcf397f7 100644 (file)
@@ -1,7 +1,8 @@
 package org.simantics.scl.compiler.elaboration.expressions.visitors;
 
+import org.simantics.scl.compiler.elaboration.chr.CHRLiteral;
+import org.simantics.scl.compiler.elaboration.chr.CHRRule;
 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;
@@ -22,15 +23,24 @@ public class CollectEffectsVisitor extends StandardExpressionVisitor {
     }
     
     @Override
-    public void visit(ECHRRuleset expression) {
-        effects.add(Types.PROC);
-        super.visit(expression);
+    public void visit(CHRRule rule) {
+        for(CHRLiteral literal : rule.head.literals) {
+            super.visit(literal);
+            literal.relation.collectQueryEffects(effects);
+        }
+        for(CHRLiteral literal : rule.body.literals) {
+            super.visit(literal);
+            literal.relation.collectEnforceEffects(effects);
+        }
     }
     
     @Override
     public void visit(ECHRSelect expression) {
-        effects.add(Types.PROC);
-        super.visit(expression);
+        for(CHRLiteral literal : expression.query.literals) {
+            super.visit(literal);
+            literal.relation.collectQueryEffects(effects);
+        }
+        expression.expression.accept(this);
     }
     
     @Override