X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Felaboration%2Fexpressions%2Fvisitors%2FCollectEffectsVisitor.java;h=10190d5a455ce271104fd2175a8135bebcf397f7;hp=118d4de1aea7bdd94bb3f95e06ad74d672e14e6f;hb=3e457239db8dd214a3a10c74c2ecefa0f0f8dd1a;hpb=666ee533a3cfa9f59e79215a269f8342227cdbda 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 index 118d4de1a..10190d5a4 100644 --- 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 @@ -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