]> gerrit.simantics Code Review - simantics/platform.git/commitdiff
Merge "possibleVariable into Simantics/Variables"
authorHannu Niemistö <hannu.niemisto@semantum.fi>
Mon, 24 Jul 2017 10:01:47 +0000 (13:01 +0300)
committerGerrit Code Review <gerrit2@www.simantics.org>
Mon, 24 Jul 2017 10:01:47 +0000 (13:01 +0300)
75 files changed:
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/TypeChecking.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRule.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRuleset.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AssignOp.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqBasic.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqGuard.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/Equation.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ASTExpression.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Assignment.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Case.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/DecoratingExpression.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAmbiguous.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApplyType.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAsPattern.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EBind.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRuleset.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRulesetConstructor.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EConstant.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEnforce.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEquations.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EError.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EExternalConstant.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EFieldAccess.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EGetConstraint.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIntegerLiteral.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambda.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambdaType.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELet.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListComprehension.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListLiteral.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELiteral.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERealLiteral.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESelect.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLambda.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLet.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETransformation.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETypeAnnotation.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVariable.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EViewPattern.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EWhen.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Expression.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpression.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/ExpressionAccessor.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/FieldAccessor.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/IdAccessor.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/StringAccessor.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListAssignment.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGenerator.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGuard.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListQualifier.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListThen.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectRefsVisitor.java [new file with mode: 0644]
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/ForVariablesUsesVisitor.java [new file with mode: 0644]
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractCombiner.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractModifier.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QExists.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QMapping.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/Query.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/pre/PreQuery.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/TransformationBuilder.java
bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/UnifiableFactory.java
bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java

index 58bb98a417e0d9255e77310c74d5f6feb6c8430a..52b8692d8f9fcc72394af1bbd0b059399367f077 100644 (file)
@@ -408,7 +408,7 @@ public class TypeChecking {
                 for(TransformationRule rule : module.getRules())
                     for(Query[] queries : rule.sections.values())
                         for(Query query : queries)
-                            query.collectRefs(allRefs, refs);                
+                            query.collectRefs(allRefs, refs);
             }
             
             @Override
index 918dd9fb309ef25d4d9dfd3f156e60b7d4b097e5..2697ea08fe287bc36c441e39c8ba738316346ba1 100644 (file)
@@ -12,7 +12,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.ERecord;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.records.FieldAssignment;
 import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
@@ -113,14 +112,6 @@ public class CHRLiteral extends Symbol {
         }
     }
 
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        for(Expression parameter : parameters)
-            parameter.collectRefs(allRefs, refs);
-        if(typeConstraintEvidenceParameters != null)
-            for(Expression parameter : typeConstraintEvidenceParameters)
-                parameter.collectRefs(allRefs, refs);
-    }
-
     public void checkType(TypingContext context) {
         if(relation == SpecialCHRRelation.EXECUTE) {
             if(parameters.length != 1)
@@ -157,14 +148,6 @@ public class CHRLiteral extends Symbol {
                 parameter.collectVars(allVars, vars);
     }
 
-    public void forVariables(VariableProcedure procedure) {
-        for(Expression parameter : parameters)
-            parameter.forVariables(procedure);
-        if(typeConstraintEvidenceParameters != null)
-            for(Expression parameter : typeConstraintEvidenceParameters)
-                parameter.forVariables(procedure);
-    }
-
     public void collectFreeVariables(THashSet<Variable> vars) {
         if(relation == SpecialCHRRelation.ASSIGN) {
             parameters[1].collectFreeVariables(vars);
index 4e5670fcd955edc0945e466ee8a4413e7a9909fb..8bba6697d9bb3832782ee20ab4dd5af493219ab1 100644 (file)
@@ -10,7 +10,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
@@ -32,11 +31,6 @@ public class CHRQuery extends Symbol {
             literal.resolve(context);
     }
 
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        for(CHRLiteral literal : literals)
-            literal.collectRefs(allRefs, refs);
-    }
-
     public void checkType(TypingContext context) {
         for(CHRLiteral literal : literals)
             literal.checkType(context);
@@ -47,11 +41,6 @@ public class CHRQuery extends Symbol {
             literal.collectVars(allVars, vars);
     }
 
-    public void forVariables(VariableProcedure procedure) {
-        for(CHRLiteral literal : literals)
-            literal.forVariables(procedure);
-    }
-
     public void collectFreeVariables(THashSet<Variable> vars) {
         for(CHRLiteral literal : literals)
             literal.collectFreeVariables(vars);
index c668005d7f1f6b07ea714d3101ef944d28957d45..67b30b221c78f2e992791f27563df094d8091a8c 100644 (file)
@@ -11,7 +11,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
@@ -58,11 +57,6 @@ public class CHRRule extends Symbol {
         existentialVariables = context.popExistentialFrame();
     }
 
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        head.collectRefs(allRefs, refs);
-        body.collectRefs(allRefs, refs);
-    }
-
     public void checkType(TypingContext context) {
         for(Variable variable : existentialVariables)
             variable.setType(Types.metaVar(Kinds.STAR));
@@ -75,11 +69,6 @@ public class CHRRule extends Symbol {
         body.collectVars(allVars, vars);
     }
 
-    public void forVariables(VariableProcedure procedure) {
-        head.forVariables(procedure);
-        body.forVariables(procedure);
-    }
-
     public void collectFreeVariables(THashSet<Variable> vars) {
         head.collectFreeVariables(vars);
         body.collectFreeVariables(vars);
index 63a8344f220d93fdc63296eb05abcc6fe0b267d5..805e781e74a6eff0f2876ea43df82b86443395ca 100644 (file)
@@ -23,7 +23,6 @@ import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.expressions.block.IncludeStatement;
 import org.simantics.scl.compiler.environment.AmbiguousNameException;
 import org.simantics.scl.compiler.errors.Locations;
@@ -123,13 +122,6 @@ public class CHRRuleset extends Symbol {
         }*/
     }
 
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        for(IncludeStatement include : includes)
-            include.value.collectRefs(allRefs, refs);
-        for(CHRRule rule : rules)
-            rule.collectRefs(allRefs, refs);
-    }
-
     public void checkType(TypingContext context) {
         for(IncludeStatement include : includes)
             include.value = include.value.checkType(context, include.ruleset.runtimeRulesetType);
@@ -144,13 +136,6 @@ public class CHRRuleset extends Symbol {
             rule.collectVars(allVars, vars);
     }
 
-    public void forVariables(VariableProcedure procedure) {
-        for(IncludeStatement include : includes)
-            include.value.forVariables(procedure);
-        for(CHRRule rule : rules)
-            rule.forVariables(procedure);
-    }
-
     public void collectFreeVariables(THashSet<Variable> vars) {
         for(IncludeStatement include : includes)
             include.value.collectFreeVariables(vars);
index 5ef54ea82ac414b071e516d0e6308317ee342769..730caba73302d88ea74e660370fd2508cf17d3ce 100644 (file)
@@ -25,6 +25,4 @@ public class AssignOp extends PlanOp {
         variable.setVal(expression.toVal(context, w));
         planContext.nextOp(w);
     }
-
-    
 }
index 121166f6b893ad1d1c84198681de0d2c552a81ac..08b1a07267bc5ecebc910b0cebad30398766cccc 100644 (file)
@@ -5,7 +5,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Type;
 
@@ -36,12 +35,6 @@ public class EqBasic extends Equation {
         }
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        left.forVariables(procedure);
-        right.forVariables(procedure);
-    }
-
     @Override
     public void collectFreeVariables(THashSet<Variable> vars) {
         left.collectFreeVariables(vars);
@@ -60,12 +53,6 @@ public class EqBasic extends Equation {
         right = right.checkType(context, left.getType());
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        left.collectRefs(allRefs, refs);
-        right.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         left.collectVars(allVars, vars);
index bbd46413974827c683c7b3591db3b4382a78dfa2..5dac9fce44b452e9239ecdfd5a0fbf6d4b2c809e 100644 (file)
@@ -33,11 +33,6 @@ public class EqGuard extends Equation {
         }
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        guard.forVariables(procedure);
-    }
-
     @Override
     public void collectFreeVariables(THashSet<Variable> vars) {
         guard.collectFreeVariables(vars);
@@ -53,11 +48,6 @@ public class EqGuard extends Equation {
         guard = guard.checkIgnoredType(context);
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        guard.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         guard.collectVars(allVars, vars);
index 34ef7539515dafdbacb5b0a9d459d117fc822359..ca4102c96b6588d50b946432417a3281ea0217f6 100644 (file)
@@ -4,7 +4,6 @@ import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
 import org.simantics.scl.compiler.types.Type;
 
@@ -17,11 +16,9 @@ public abstract class Equation extends Symbol {
 
     public abstract void setLocationDeep(long loc);
 
-    public abstract void forVariables(VariableProcedure procedure);
     public abstract void collectFreeVariables(THashSet<Variable> vars);
     public abstract void collectEffects(THashSet<Type> effects);
     public abstract void checkType(TypingContext context);
-    public abstract void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs);
     public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
     public abstract void resolve(TranslationContext context);
     public abstract void accept(EquationVisitor visitor);
index a853dfff6731f9309699b822fce6fec5d3d5999a..fa54f8ab28e3acf80b3044375b38c4d35b1d7dc1 100644 (file)
@@ -25,12 +25,6 @@ public abstract class ASTExpression extends SimplifiableExpression {
         throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectFreeVariables.");
     }
     
-    @Override
-    final public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectRefs.");
-    }
-    
     @Override
     final public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -69,12 +63,6 @@ public abstract class ASTExpression extends SimplifiableExpression {
                 getClass().getSimpleName() + " does not implement method inferType.");
     }
     
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        throw new InternalCompilerError("Class " + 
-                getClass().getSimpleName() + " does not implement method forVariables.");
-    }
-    
     @Override
     public void setLocationDeep(long loc) {
         if(location == Locations.NO_LOCATION)
index 04b70deb0ac47042e38732a7e831afd16a418555..cb525a9adfdef3bde0c5ab1b8dfdae5d63e51a19 100644 (file)
@@ -28,8 +28,4 @@ public class Assignment {
         pattern.setLocationDeep(loc);
         value.setLocationDeep(loc);
     }
-
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-    }
 }
index 3765fbefc1a78bfc7be8e23f811619b6cbfa3eea..c8f0eb893e15f7f58e5a6751b2435b05944b53c2 100644 (file)
@@ -35,10 +35,6 @@ public class Case extends Symbol {
         return lhs;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
-    }
-
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
         value.collectVars(allVars, vars);
@@ -109,8 +105,4 @@ public class Case extends Symbol {
             patterns[i] = patterns[i].checkTypeAsPattern(context, parameterTypes[i]);
         value = value.checkIgnoredType(context);
     }
-
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-    }
 }
index 5d91fbc3c63c474882ef371d4f1776b9a4c16fae..796a41c69c421103430da9c1fa32ff6989f09000 100644 (file)
@@ -26,11 +26,6 @@ public abstract class DecoratingExpression extends SimplifiableExpression {
         super(loc);
         this.expression = expression;
     }
-
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        expression.collectRefs(allRefs, refs);
-    }
     
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
@@ -100,11 +95,6 @@ public abstract class DecoratingExpression extends SimplifiableExpression {
         }
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        expression.forVariables(procedure);
-    }
-
     @Override
     public IVal toVal(CompilationContext context, CodeWriter w) {
         throw new InternalCompilerError("Cannot generate code for " + getClass().getSimpleName() + ".");
index 09cbcf25bf2557e5f48d82a04ae494455684008a..2b5c813a13db19dc6591d193353763c2f6c15e97 100644 (file)
@@ -42,20 +42,11 @@ public class EAmbiguous extends SimplifiableExpression {
         this.activeCount = alternatives.length;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-    }
-
     @Override
     protected void updateType() throws MatchException {
         throw new InternalCompilerError();
index 2b488068d547108d0341950bd71968463cd6ce75..4065f463ac4d8436a60a74b81e7e5a8cc4871fcd 100644 (file)
@@ -76,13 +76,6 @@ public class EApply extends Expression {
         return parameters;
     }
     
-
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        function.collectRefs(allRefs, refs);
-        for(Expression parameter : parameters)
-            parameter.collectRefs(allRefs, refs);
-    }
-    
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         function.collectVars(allVars, vars);
         for(Expression parameter : parameters)
@@ -369,13 +362,6 @@ public class EApply extends Expression {
             return false;
         }
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        function.forVariables(procedure);
-        for(Expression parameter : parameters)
-            parameter.forVariables(procedure);
-    }
     
     @Override
     public boolean isPattern(int arity) {
index e7a9d42468bc19f8068128e2d93a5ed9f8084c25..f441a1be5880254123eb7be77a1e116a31decbae 100644 (file)
@@ -50,21 +50,17 @@ public class EApplyType extends Expression {
         return parameter;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        expression.collectRefs(allRefs, refs);
+    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
+        expression.collectVars(allVars, vars);
     }
-       
-       public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-           expression.collectVars(allVars, vars);
-       }
 
-       @Override
-       protected void updateType() throws MatchException {
-           setType(Types.instantiate(expression.getType(), parameter));
-       }
-       
-       @Override
-       public IVal toVal(CompilationContext context, CodeWriter w) {
+    @Override
+    protected void updateType() throws MatchException {
+        setType(Types.instantiate(expression.getType(), parameter));
+    }
+
+    @Override
+    public IVal toVal(CompilationContext context, CodeWriter w) {
         IVal val = expression.toVal(context, w);
         return val.createSpecialization(parameter);
     }
@@ -133,11 +129,6 @@ public class EApplyType extends Expression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        expression.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 305d5309307bb059ef8dcb11eb5efce69ba3a547..98c54844c037661b6fe34ab7f12f07567cfd61de 100644 (file)
@@ -18,9 +18,9 @@ import gnu.trove.set.hash.TIntHashSet;
 
 public class EAsPattern extends Expression {
 
-    Variable var;
-    EVar eVar;
-    Expression pattern;
+    public Variable var;
+    public EVar eVar;
+    public Expression pattern;
 
     public EAsPattern(EVar eVar, Expression pattern) {
         this.eVar = eVar;
@@ -40,12 +40,6 @@ public class EAsPattern extends Expression {
         return pattern;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        pattern.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -143,12 +137,6 @@ public class EAsPattern extends Expression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        procedure.execute(eVar.location, var);
-        pattern.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 196ddc90fbc2423d72f22b8c675db70972e5c680..3bec2aaa13ecafde91be4380559df456779b6953 100644 (file)
@@ -23,7 +23,7 @@ public class EBind extends SimplifiableExpression {
     public Expression pattern;
     public Expression value;
     public Expression in;
-    private EVariable monadEvidence;
+    EVariable monadEvidence;
     SCLValue bindFunction;
     Type monadType;
     Type valueContentType;
@@ -43,12 +43,6 @@ public class EBind extends SimplifiableExpression {
         this.value = value;
         this.in = in;
     }
-
-    @Override
-    public void collectRefs(final TObjectIntHashMap<Object> allRefs, final TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
-        in.collectRefs(allRefs, refs);
-    }
     
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
@@ -158,14 +152,6 @@ public class EBind extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        pattern.forVariables(procedure);
-        value.forVariables(procedure);
-        if(monadEvidence != null)
-            monadEvidence.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 2f87719306901bde69636d1206a33efdea077acd..a8ad1480d1be35af8115d493629e3f93724b8db5 100644 (file)
@@ -26,35 +26,29 @@ public class ECHRRuleset extends Expression {
         this.in = in;
     }
     
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        ruleset.collectRefs(allRefs, refs);
-        in.collectRefs(allRefs, refs);
-    }
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         ruleset.collectVars(allVars, vars);
         in.collectVars(allVars, vars);
     }
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        ruleset.forVariables(procedure);
-        in.forVariables(procedure);
-    }
+
     @Override
     protected void updateType() throws MatchException {
         setType(in.getType());
     }
+
     @Override
     public IVal toVal(CompilationContext context, CodeWriter w) {
         ruleset.generateCode(w);
         return in.toVal(context, w);
     }
+
     @Override
     public void collectFreeVariables(THashSet<Variable> vars) {
         ruleset.collectFreeVariables(vars);
         in.collectFreeVariables(vars);
     }
+
     @Override
     public Expression resolve(TranslationContext context) {
         if(context.currentRuleset != null) {
index ce0385f815623760edf9a276c6a69e10da7f697a..734fd71b439f20a5c43d9cd1aec54a4968d82202 100644 (file)
@@ -24,31 +24,27 @@ public class ECHRRulesetConstructor extends Expression {
     public ECHRRulesetConstructor(CHRRuleset ruleset) {
         this.ruleset = ruleset;
     }
-    
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        ruleset.collectRefs(allRefs, refs);
-    }
+
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         ruleset.collectVars(allVars, vars);
     }
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        ruleset.forVariables(procedure);
-    }
+
     @Override
     protected void updateType() throws MatchException {
         throw new InternalCompilerError("Type of ECHRRulesetConstructor should be already given.");
     }
+
     @Override
     public IVal toVal(CompilationContext context, CodeWriter w) {
         return ruleset.generateCode(w);
     }
+
     @Override
     public void collectFreeVariables(THashSet<Variable> vars) {
         ruleset.collectFreeVariables(vars);
     }
+
     @Override
     public Expression resolve(TranslationContext context) {
         context.pushFrame();
index aa232cdb59ab7e10e29f01e14f72e7c2e7abeef6..fbaff1200124dfd88ffe71b815af1d8b691bf44f 100644 (file)
@@ -38,24 +38,12 @@ public class ECHRSelect extends Expression {
         this.query = query;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        query.collectRefs(allRefs, refs);
-        expression.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         query.collectVars(allVars, vars);
         expression.collectVars(allVars, vars);
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        query.forVariables(procedure);
-        expression.forVariables(procedure);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.list(expression.getType()));
index c5b4681a86d233e4ee87fa8fe5b152ae6aa7baeb..4a2e07f431cd9410889c2275980aaf70819dc55f 100644 (file)
@@ -35,7 +35,7 @@ import gnu.trove.set.hash.THashSet;
 import gnu.trove.set.hash.TIntHashSet;
 
 public class EConstant extends Expression {
-    SCLValue value;
+    public SCLValue value;
     Type[] typeParameters;
     
     public EConstant(SCLValue value, Type ... typeParameters) {
@@ -83,23 +83,17 @@ public class EConstant extends Expression {
         return this;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        int id = allRefs.get(value);
-        if(id >= 0)
-            refs.add(id);
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {   
     }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {   
-       }
 
-       public void toString(StringBuilder b, TypeUnparsingContext tuc) {
-           Name name = value.getName();
-           if(name.module.equals("Builtin") || name.module.equals("Prelude"))
-               b.append(name.name);
-           else
-               b.append(name);
+    public void toString(StringBuilder b, TypeUnparsingContext tuc) {
+        Name name = value.getName();
+        if(name.module.equals("Builtin") || name.module.equals("Prelude"))
+            b.append(name.name);
+        else
+            b.append(name);
         /*for(Type type : typeParameters) {
             b.append(" <");
             b.append(type.toString(tuc));
@@ -258,10 +252,6 @@ public class EConstant extends Expression {
     public Precedence getPrecedence() {
         return value.getPrecedence();
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-    }
     
     @Override
     public boolean isPattern(int arity) {
index ea657f8b1459d3fb64bbf58b8147e336ebae49a3..bfaf699ed4c81081c32281ae5b12eeeb2e57fe62 100644 (file)
@@ -29,12 +29,6 @@ public class EEnforce extends SimplifiableExpression {
         return query;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        query.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -96,11 +90,6 @@ public class EEnforce extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        query.forVariables(procedure);
-    }
     
     @Override
     public Expression replace(ReplaceContext context) {
index eec5a5888d24f24491cbd5ba52d34834d6031bb7..bffb7f026e6116264babd76540ba0303410b3cbc 100644 (file)
@@ -49,24 +49,12 @@ public class EEquations extends SimplifiableExpression {
         return transformer.transform(this);
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        for(Equation equation : equations)
-            equation.collectRefs(allRefs, refs);        
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         for(Equation equation : equations)
             equation.collectVars(allVars, vars);
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Equation equation : equations)
-            equation.forVariables(procedure);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.UNIT);
index fbe8cde2ab646a5bc745e3bb0de558dfb2954f4b..b3f4f648897b7a4c1469722606ab6d0c545b3091 100644 (file)
@@ -24,28 +24,25 @@ public class EError extends Expression {
         setType(type);
     }
     
-    public EError() {     
+    public EError() {
     }
     
     public EError(long loc) {
         this(loc, Types.metaVar(Kinds.STAR));
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
+    }
+
+    @Override
+    protected void updateType() throws MatchException {
+        setType(Types.metaVar(Kinds.STAR));
     }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {    
-       }
 
-       @Override
-       protected void updateType() throws MatchException {
-           setType(Types.metaVar(Kinds.STAR));     
-       }
-       
-       @Override
-       public IVal toVal(CompilationContext context, CodeWriter w) {
+    @Override
+    public IVal toVal(CompilationContext context, CodeWriter w) {
         throw new UnsupportedOperationException();
     }
 
@@ -87,10 +84,6 @@ public class EError extends Expression {
     public Expression replace(ReplaceContext context) {
         return this;
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 1e8341e66cbd4a7f408c8cd05ef6fe4d70bbd30e..0b5678f99eb15a9995e23ca7f5c6c82cd0493690 100644 (file)
@@ -35,27 +35,24 @@ public class EExternalConstant extends Expression {
         return value;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {            
     }
 
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {         
-       }
-       
-       public void toString(StringBuilder b, TypeUnparsingContext tuc) {
+    public void toString(StringBuilder b, TypeUnparsingContext tuc) {
         b.append(value);
     }
 
-       @Override
-       protected void updateType() throws MatchException {
-           throw new InternalCompilerError("EExternalConstants must have explicitly defined type.");
-       }
-       
-       @Override
-       public IVal toVal(CompilationContext context, CodeWriter w) {
-               ModuleWriter mw = w.getModuleWriter();
-               return mw.getExternalConstant(value, getType());
+    @Override
+    protected void updateType() throws MatchException {
+        throw new InternalCompilerError("EExternalConstants must have explicitly defined type.");
+    }
+
+    @Override
+    public IVal toVal(CompilationContext context, CodeWriter w) {
+        ModuleWriter mw = w.getModuleWriter();
+        return mw.getExternalConstant(value, getType());
     }
 
     @Override
@@ -116,10 +113,6 @@ public class EExternalConstant extends Expression {
     public IExpression toIExpression(ExpressionInterpretationContext context) {
         return new IConstant(value);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index da9a7b38be68463ce404b20a1e87adbf0d9d59fc..0a4d0ee165186b404055f7c540c7cfa057135bb0 100644 (file)
@@ -35,13 +35,6 @@ public class EFieldAccess extends SimplifiableExpression {
                ((EFieldAccess)parent).lastAccessor = false;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        parent.collectRefs(allRefs, refs);
-        accessor.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -185,12 +178,6 @@ public class EFieldAccess extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        parent.forVariables(procedure);
-        accessor.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index fc437cfd8c8d68be07fc997cd0b3a22063f1286c..8534f462409fc2b131e1059774fe3ee8300d0e75 100644 (file)
@@ -20,11 +20,6 @@ public class EGetConstraint extends SimplifiableExpression {
         super(loc);
         this.constraint = constraint;
     }
-
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-    }
     
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
@@ -81,11 +76,6 @@ public class EGetConstraint extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        evidence.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 1f3dccc3e9b848aa29a407c6c2cfb3743a2faf1e..ea64ac034c152e120f6472902233a246e1fcb5cf 100644 (file)
@@ -39,29 +39,22 @@ public class EIf extends Expression {
         this.else_ = else_;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        condition.collectRefs(allRefs, refs);
-        then_.collectRefs(allRefs, refs);
-        if(else_ != null)
-            else_.collectRefs(allRefs, refs);
-    }
-
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           condition.collectVars(allVars, vars);
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
+        condition.collectVars(allVars, vars);
         then_.collectVars(allVars, vars);
         if(else_ != null)
             else_.collectVars(allVars, vars);
-       }
+    }
+
+    @Override
+    protected void updateType() throws MatchException {
+        setType(then_.getType());
+    }
 
-       @Override
-       protected void updateType() throws MatchException {
-           setType(then_.getType());
-       }
-       
-       @Override
-       public IVal toVal(CompilationContext context, CodeWriter w) {
+    @Override
+    public IVal toVal(CompilationContext context, CodeWriter w) {
         IVal conditionVal = condition.toVal(context, w); 
         CodeWriter joinPoint = w.createBlock(getType());
         CodeWriter thenBlock = w.createBlock();
@@ -170,13 +163,6 @@ public class EIf extends Expression {
                 else_ != null ? else_.toIExpression(target) : new IConstant(Tuple0.INSTANCE));
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        condition.forVariables(procedure);
-        then_.forVariables(procedure);
-        if(else_ != null)
-            else_.forVariables(procedure);
-    }
     @Override
     public Expression accept(ExpressionTransformer transformer) {
         return transformer.transform(this);
index 17cf6e58edb59a23b6601f087595dd8d1df8b725..856dcd37123e20cb745af694063e06a421b8cd7c 100644 (file)
@@ -28,11 +28,6 @@ public class EIntegerLiteral extends SimplifiableExpression {
         this.value = value;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -140,12 +135,6 @@ public class EIntegerLiteral extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        if(constraint != null)
-            constraint.forVariables(procedure);
-    }
     
     @Override
     public boolean isPattern(int arity) {
index 573abfbb86055f081f57f49aba4d54db3cb08287..51b1f909e34624e164cb528ec9680d35854132ab 100644 (file)
@@ -37,20 +37,15 @@ public class ELambda extends SimplifiableExpression {
         this(loc, new Case(new Expression[] {pat}, exp));
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
         for(Case case_ : cases)
-            case_.collectRefs(allRefs, refs);
-    }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           for(Case case_ : cases)
             case_.collectVars(allVars, vars);
-       }
+    }
 
-       public Expression decomposeMatching() {
-           Expression[] patterns = cases[0].patterns;
+    public Expression decomposeMatching() {
+        Expression[] patterns = cases[0].patterns;
         int arity = patterns.length;
         
         // Simple cases
@@ -191,12 +186,6 @@ public class ELambda extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Case case_ : cases)
-            case_.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 34464fae41a7e7986fd88e72d5916cf4a089839e..b06f7b77035079d04c92a80e6469bd89e4b40806 100644 (file)
@@ -30,22 +30,18 @@ public class ELambdaType extends Expression {
         this.value = value;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
+        value.collectVars(allVars, vars);
+    }
+
+    @Override
+    protected void updateType() throws MatchException {
+        setType(Types.forAll(parameters, value.getType()));
     }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           value.collectVars(allVars, vars);
-       }
-       
-       @Override
-       protected void updateType() throws MatchException {
-           setType(Types.forAll(parameters, value.getType()));
-       }
 
-       @Override
+    @Override
     public IVal toVal(CompilationContext context, CodeWriter w) {
         return lambdaToVal(context, w);
     }
@@ -108,11 +104,6 @@ public class ELambdaType extends Expression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index de72c0c1cdc0ebe63bb7e9cf5740ab79f393ec39..7b7338a78e2f07efe17b4731a80b709c7635aa35 100644 (file)
@@ -36,13 +36,6 @@ public class ELet extends Expression {
         this.assignments = assignments;
         this.in = in;
     }
-
-    @Override
-    public void collectRefs(final TObjectIntHashMap<Object> allRefs, final TIntHashSet refs) {
-        for(Assignment assign : assignments)
-            assign.value.collectRefs(allRefs, refs);
-        in.collectRefs(allRefs, refs);
-    }
     
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
@@ -235,13 +228,6 @@ public class ELet extends Expression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Assignment assignment : assignments)
-            assignment.forVariables(procedure);
-        in.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 7a8b71ebb7b2758c7c01d87673a8c8a7b41a5470..a06100dd719f925e4c44abfb058b19c10d19b4c8 100644 (file)
@@ -31,13 +31,6 @@ public class EListComprehension extends SimplifiableExpression {
         this.qualifier = qualifier;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        head.collectRefs(allRefs, refs);
-        qualifier.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -119,12 +112,6 @@ public class EListComprehension extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        head.forVariables(procedure);
-        qualifier.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index d8d5f76658e4c6947edb11a6302bf974ba763987..d2a1d3509b65ace91caf56e25e3b47a8bd5473ac 100644 (file)
@@ -36,13 +36,6 @@ public class EListLiteral extends SimplifiableExpression {
     public Expression[] getComponents() {
         return components;
     }
-    
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        for(Expression component : components)
-            component.collectRefs(allRefs, refs);
-    }
 
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
@@ -140,12 +133,6 @@ public class EListLiteral extends SimplifiableExpression {
             componentExpressions[i] = components[i].toIExpression(target);
         return new IListLiteral(componentExpressions);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Expression component : components)
-            component.forVariables(procedure);
-    }
     
     @Override
     public Expression replace(ReplaceContext context) {
index 0d9d844b6f1c06f55ff61d72c5fce23b2eddd4bd..14bd02344e4d52e56b009adc9bd8cacd1b7535f8 100644 (file)
@@ -39,25 +39,22 @@ public class ELiteral extends Expression {
         return value;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {            
     }
 
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {         
-       }
-       
-       public void toString(StringBuilder b, TypeUnparsingContext tuc) {
+    public void toString(StringBuilder b, TypeUnparsingContext tuc) {
         b.append(value);
     }
-       
-       @Override
-       protected void updateType() throws MatchException {
-           setType(value.getType());       
-       }
 
-       @Override
-       public IVal toVal(CompilationContext context, CodeWriter w) {
+    @Override
+    protected void updateType() throws MatchException {
+        setType(value.getType());          
+    }
+
+    @Override
+    public IVal toVal(CompilationContext context, CodeWriter w) {
         return value;
     }
 
@@ -119,10 +116,6 @@ public class ELiteral extends Expression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-    }
     
     @Override
     public boolean isPattern(int arity) {
index a7a726879f566e114653316d546ff8ff00ee6046..0ca1d54427d13a636ca11eca672ea330dd688cef 100644 (file)
@@ -41,43 +41,36 @@ public class EMatch extends Expression {
         this.cases = cases;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
         for(Expression s : scrutinee)
-            s.collectRefs(allRefs, refs);
-        for(Case case_ : cases)
-            case_.collectRefs(allRefs, refs);
-    }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           for(Expression s : scrutinee)
             s.collectVars(allVars, vars);
-           for(Case case_ : cases)
+        for(Case case_ : cases)
             case_.collectVars(allVars, vars);
-       }
-       
-       @Override
-       protected void updateType() {
-           setType(cases[0].value.getType());
-       }
+    }
+
+    @Override
+    protected void updateType() {
+        setType(cases[0].value.getType());
+    }
+
+    @Override
+    public IVal toVal(CompilationContext context, CodeWriter w) {
+        ArrayList<Row> rows = new ArrayList<Row>(cases.length);
+        for(Case case_ : cases)
+            rows.add(new Row(case_.patterns, case_.value));
 
-       @Override
-       public IVal toVal(CompilationContext context, CodeWriter w) {
-           ArrayList<Row> rows = new ArrayList<Row>(cases.length);
-           for(Case case_ : cases)
-               rows.add(new Row(case_.patterns, case_.value));
-           
-           IVal[] scrutineeVals = new IVal[scrutinee.length];
-           for(int i=0;i<scrutinee.length;++i)
-               scrutineeVals[i] = scrutinee[i].toVal(context, w);
-           
-           CodeWriter joinPoint = w.createBlock(getType());
-           CodeWriter failurePoint = w.createBlock(); // TODO generate only one failurePoint per function
-           PatternMatchingCompiler.split(w, context, scrutineeVals, joinPoint.getContinuation(), failurePoint.getContinuation(), rows);
-           failurePoint.throw_(location, Throw.MatchingException, "Matching failure at: " + toString());
-           w.continueAs(joinPoint);
-           return w.getParameters()[0];
+        IVal[] scrutineeVals = new IVal[scrutinee.length];
+        for(int i=0;i<scrutinee.length;++i)
+            scrutineeVals[i] = scrutinee[i].toVal(context, w);
+
+        CodeWriter joinPoint = w.createBlock(getType());
+        CodeWriter failurePoint = w.createBlock(); // TODO generate only one failurePoint per function
+        PatternMatchingCompiler.split(w, context, scrutineeVals, joinPoint.getContinuation(), failurePoint.getContinuation(), rows);
+        failurePoint.throw_(location, Throw.MatchingException, "Matching failure at: " + toString());
+        w.continueAs(joinPoint);
+        return w.getParameters()[0];
     }
 
     @Override
@@ -186,14 +179,6 @@ public class EMatch extends Expression {
     public Case[] getCases() {
         return cases;
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Expression s : scrutinee)
-            s.forVariables(procedure);
-        for(Case case_ : cases)
-            case_.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 4860055c19d3fecc0ae04d9d0202383951c73175..5f274dadde72c9cee3dc0f0aad471efe39ad5808 100644 (file)
@@ -27,11 +27,6 @@ public class ERealLiteral extends SimplifiableExpression {
         this.value = value;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -128,12 +123,6 @@ public class ERealLiteral extends SimplifiableExpression {
     public String getValue() {
         return value;
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        if(constraint != null)
-            constraint.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index b9e55d8497c90a7fb13bf6000fe72e4a9e6dd0cb..1a133b6f9dc61e7b0ee283c4e8ed77614d15939a 100644 (file)
@@ -94,12 +94,6 @@ public class ERuleset extends SimplifiableExpression {
             visitor.visit(this);
             return b.toString();
         }
-
-        public void forVariables(VariableProcedure procedure) {
-            for(Expression headParameter : headParameters)
-                headParameter.forVariables(procedure);
-            body.forVariables(procedure);
-        }
     }
     
     private void checkRuleTypes(TypingContext context) {
@@ -147,18 +141,7 @@ public class ERuleset extends SimplifiableExpression {
         }
         in.collectFreeVariables(vars);
     }
-    
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        for(DatalogRule rule : rules) {
-            for(Expression parameter : rule.headParameters)
-                parameter.collectRefs(allRefs, refs);
-            rule.body.collectRefs(allRefs, refs);
-        }
-        in.collectRefs(allRefs, refs);
-    }
-    
+
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -169,7 +152,7 @@ public class ERuleset extends SimplifiableExpression {
         }
         in.collectVars(allVars, vars);
     }
-    
+
     @Override
     public void collectEffects(THashSet<Type> effects) {
         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support collectEffects.");
@@ -400,13 +383,6 @@ public class ERuleset extends SimplifiableExpression {
     public Expression getIn() {
         return in;
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(DatalogRule rule : rules)
-            rule.forVariables(procedure);
-        in.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 34aca4adcaccb8512ed29a0e39d2cdbb032a8650..ce4d66bd7567e268f395d12835a23a9258a906fa 100644 (file)
@@ -45,13 +45,6 @@ public class ESelect extends SimplifiableExpression {
         this.query = query;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        expression.collectRefs(allRefs, refs);
-        query.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -170,12 +163,6 @@ public class ESelect extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        expression.forVariables(procedure);
-        query.forVariables(procedure);
-    }
     
     @Override
     public Expression simplify(SimplificationContext context) {
index 91de49eb2e3d455d0f93f777675f1d2df0daebb4..8f59b3b4429c77f22d94a0482fba310a190929ec 100644 (file)
@@ -55,17 +55,13 @@ public class ESimpleLambda extends Expression {
         this.effect = effect;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
+        value.collectVars(allVars, vars);
     }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           value.collectVars(allVars, vars);
-       }
 
-       public Expression decomposeMatching() {
+    public Expression decomposeMatching() {
         value = value.decomposeMatching();
         return this;
     }
@@ -226,11 +222,6 @@ public class ESimpleLambda extends Expression {
     public Variable getParameter() {
         return parameter;
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 0a5d67651cc92ca4055e84984d7692844a4018d6..422bbea119f76aad1020317235258a1fd97ef4b7 100644 (file)
@@ -45,28 +45,23 @@ public class ESimpleLet extends Expression {
         this.in = in;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
-        in.collectRefs(allRefs, refs);
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
+        value.collectVars(allVars, vars);
+        in.collectVars(allVars, vars);
     }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           value.collectVars(allVars, vars);
-           in.collectVars(allVars, vars);
-       }
 
     @Override
     protected void updateType() throws MatchException {
         setType(in.getType());
     }
-    
-       @Override
-       public IVal toVal(CompilationContext context, CodeWriter w) {
-           IVal valueVal = value.toVal(context, w);
-           if(variable != null)
-               variable.setVal(valueVal);
+
+    @Override
+    public IVal toVal(CompilationContext context, CodeWriter w) {
+        IVal valueVal = value.toVal(context, w);
+        if(variable != null)
+            variable.setVal(valueVal);
         return in.toVal(context, w);
     }
 
@@ -198,12 +193,6 @@ public class ESimpleLet extends Expression {
         return in;
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-        in.forVariables(procedure);
-    }
-    
     @Override
     public Expression accept(ExpressionTransformer transformer) {
         return transformer.transform(this);
index e00514151f335c6772b6c761da66a51a4dbecefb..346e46cd3cc9fe2d735c4a2ba70345962a76bd9f 100644 (file)
@@ -30,17 +30,6 @@ public class ETransformation extends SimplifiableExpression {
         this.seed = seed;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        {
-            int ref = allRefs.get(TRANSFORMATION_RULES_TYPECHECKED);
-            if(ref >= 0)
-                refs.add(ref);
-        }
-        seed.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -111,11 +100,6 @@ public class ETransformation extends SimplifiableExpression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        seed.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 568b3c10818ea47740e3492b202c9b55e4e3f263..10c8e6f7a47e4511bc177e4d3cfd29071a08cbfc 100644 (file)
@@ -28,20 +28,16 @@ public class ETypeAnnotation extends SimplifiableExpression {
         this.type = type;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
+        value.collectVars(allVars, vars);
     }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           value.collectVars(allVars, vars);
-       }
 
-       @Override
-       protected void updateType() throws MatchException {
-           setType(type);
-       }
+    @Override
+    protected void updateType() throws MatchException {
+        setType(type);
+    }
 
     @Override
     public void collectFreeVariables(THashSet<Variable> vars) {
@@ -93,11 +89,6 @@ public class ETypeAnnotation extends SimplifiableExpression {
     public Expression getValue() {
         return value;
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-    }
     
     @Override
     public Expression accept(ExpressionTransformer transformer) {
index 761ed0f2f23da45b7cdac5b39bffdb6d22d43c2b..44c03a2acdd8d8ef7279938c67322b81ff7132f7 100644 (file)
@@ -27,7 +27,7 @@ import gnu.trove.set.hash.TIntHashSet;
 public class EVariable extends Expression {
     public static final EVariable[] EMPTY_ARRAY = new EVariable[0];
     
-    Variable variable;
+    public Variable variable;
     
     public EVariable(Variable variable) {
         this.variable = variable;
@@ -46,18 +46,15 @@ public class EVariable extends Expression {
         this.variable = variable;
     }
 
-       public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+    @Override
+    public void collectVars(TObjectIntHashMap<Variable> allVars,
+            TIntHashSet vars) {
+        int id = allVars.get(variable);
+        if(id >= 0)
+            vars.add(id);
     }
-       
-       @Override
-       public void collectVars(TObjectIntHashMap<Variable> allVars,
-               TIntHashSet vars) {
-           int id = allVars.get(variable);
-           if(id >= 0)
-               vars.add(id);
-       }
 
-       public void toString(StringBuilder b, TypeUnparsingContext tuc) {
+    public void toString(StringBuilder b, TypeUnparsingContext tuc) {
         b.append(variable == null ? "???" : variable.toString());
     }
 
@@ -180,12 +177,6 @@ public class EVariable extends Expression {
     public void accept(ExpressionVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        if(variable != null)
-            procedure.execute(location, variable);
-    }
     
     @Override
     public boolean isPattern(int arity) {
index 4997fa592e49e84c2fe6bc82d9cca2208e19406c..a2a0a02c5bc04b90b715ede54a0d9be0ca7e6055 100644 (file)
@@ -26,23 +26,11 @@ public class EViewPattern extends Expression {
         this.pattern = pattern;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        expression.collectRefs(allRefs, refs);
-        pattern.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         expression.collectVars(allVars, vars);
         pattern.collectVars(allVars, vars);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        expression.forVariables(procedure);
-        pattern.forVariables(procedure);
-    }
     
     @Override
     public Expression inferType(TypingContext context) {
index d8b42fca47e921bc26759442b77f41c7218e46b5..a9fd0367bbcaee69ce36f415e0c41565b1a1c7e9 100644 (file)
@@ -43,13 +43,6 @@ public class EWhen extends SimplifiableExpression {
         this.variables = variables;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        query.collectRefs(allRefs, refs);
-        action.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -149,12 +142,6 @@ public class EWhen extends SimplifiableExpression {
     public Expression getAction() {
         return action;
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        query.forVariables(procedure);
-        action.forVariables(procedure);
-    }
     
     @Override
     public Expression simplify(SimplificationContext context) {
index d3e226cf490b5e70a1aae97fd2d654e7ff448adc..221bc8067ac454a479b88d33c5a7d72d65f9b84f 100644 (file)
@@ -14,6 +14,8 @@ import org.simantics.scl.compiler.elaboration.errors.NotPatternException;
 import org.simantics.scl.compiler.elaboration.expressions.lhstype.LhsType;
 import org.simantics.scl.compiler.elaboration.expressions.lhstype.PatternMatchingLhs;
 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectRefsVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor;
 import org.simantics.scl.compiler.elaboration.query.QAtom;
 import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
 import org.simantics.scl.compiler.internal.codegen.references.IVal;
@@ -102,23 +104,23 @@ public abstract class Expression extends Symbol implements Typed {
             expression = new ESimpleLet(location, null, expression, new ELiteral(NoRepConstant.PUNIT));
         return expression;
     }
-       
-       /**
-        * Checks the type of the expression against the given type. Adds type
-        * applications and lambdas if needed.
-        */
-       public final Expression checkType(TypingContext context, Type requiredType) {
-           //System.out.println("checkType: " + this + " :: " + requiredType);
-           if(!context.isInPattern()) {
-               requiredType = Types.canonical(requiredType);
-           if(requiredType instanceof TForAll) {
+
+    /**
+     * Checks the type of the expression against the given type. Adds type
+     * applications and lambdas if needed.
+     */
+    public final Expression checkType(TypingContext context, Type requiredType) {
+        //System.out.println("checkType: " + this + " :: " + requiredType);
+        if(!context.isInPattern()) {
+            requiredType = Types.canonical(requiredType);
+            if(requiredType instanceof TForAll) {
                 TForAll forAll = (TForAll)requiredType;
                 TVar var = forAll.var;
                 TVar newVar = Types.var(var.getKind());
                 requiredType = Types.canonical(forAll.type).replace(var, newVar);
                 return new ELambdaType(new TVar[] {newVar}, checkType(context, requiredType));
             }
-           while(requiredType instanceof TFun) {
+            while(requiredType instanceof TFun) {
                 TFun fun = (TFun)requiredType;
                 if(fun.domain instanceof TPred) { // No need to canonicalize
                     ArrayList<Variable> constraints = new ArrayList<Variable>(2);
@@ -142,7 +144,7 @@ public abstract class Expression extends Symbol implements Typed {
                     context.pushEffectUpperBound(location, fun.effect);
                     Expression expr = checkType(context, fun.range);
                     context.popEffectUpperBound();       
-                    
+
                     // Wrap
                     Variable var = new Variable("punit", Types.PUNIT);
                     return new ESimpleLambda(location, var, fun.effect, expr);
@@ -150,15 +152,21 @@ public abstract class Expression extends Symbol implements Typed {
                 else
                     break;
             }
-           }
-           return checkBasicType(context, requiredType); 
-       }
+        }
+        return checkBasicType(context, requiredType); 
+    }
 
-       public abstract void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs);
-       public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
-       public abstract void forVariables(VariableProcedure procedure);
-       
-       public Expression decomposeMatching() {
+    public final void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+        accept(new CollectRefsVisitor(allRefs, refs));
+    }
+
+    public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
+
+    public final void forVariableUses(VariableProcedure procedure) {
+        accept(new ForVariablesUsesVisitor(procedure));
+    }
+
+    public Expression decomposeMatching() {
         return this;
     }
 
index fa67162d5620df596630bde077ae49bc031ea751..f1e62b2f7d61930e3832c8d93bdab673c5546832 100644 (file)
@@ -27,10 +27,4 @@ public class GuardedExpression extends Symbol {
             value.setLocationDeep(loc);
         }
     }
-
-    public void forVariables(VariableProcedure procedure) {
-        for(Expression guard : guards)
-            guard.forVariables(procedure);
-        value.forVariables(procedure);
-    }
 }
index 992a9939e89de06706fc49aaa7803f37b6d94def..1e2cd05c422791ffe3c73a7257b2d39c42759e1c 100644 (file)
@@ -25,16 +25,6 @@ public class GuardedExpressionGroup extends Expression {
         this.expressions = expressions;
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        for(GuardedExpression expression : expressions) {
-            for(Expression guard : expression.guards)
-                guard.collectRefs(allRefs, refs);
-            expression.value.collectRefs(allRefs, refs);
-        }
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -160,12 +150,6 @@ public class GuardedExpressionGroup extends Expression {
         visitor.visit(this);
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(GuardedExpression expression : expressions)
-            expression.forVariables(procedure);
-    }
-
     @Override
     public Expression accept(ExpressionTransformer transformer) {
         return transformer.transform(this);
index d75080095d1c45a455e7eb08d20ea58eca96be2b..3cdb32b72c93e12c3ad65a722260b8dc29926a3b 100644 (file)
@@ -73,6 +73,8 @@ EquationVisitor, StatementVisitor, CHRAstQueryVisitor {
         expression.pattern.accept(this);
         expression.value.accept(this);
         expression.in.accept(this);
+        if(expression.monadEvidence != null)
+            visit(expression.monadEvidence);
     }
 
     @Override
@@ -145,6 +147,7 @@ EquationVisitor, StatementVisitor, CHRAstQueryVisitor {
     public void visit(ELet expression) {
         for(Assignment assignment : expression.assignments)
             visit(assignment);
+        expression.in.accept(this);
     }
 
     public void visit(Assignment assignment) {
@@ -380,6 +383,8 @@ EquationVisitor, StatementVisitor, CHRAstQueryVisitor {
             visit(rule.head);
             visit(rule.body);
         }
+        for(IncludeStatement include : ruleset.includes)
+            include.value.accept(this);
     }
 
     @Override
index 793bd006531a4bdc87135691360a00ba405eb52d..12c9a917013ac1edca998fdec2372f1e9a36048e 100644 (file)
@@ -5,7 +5,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Types;
 
@@ -26,12 +25,6 @@ public class ExpressionAccessor extends FieldAccessor {
         fieldName.collectFreeVariables(vars);
     }
     
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        fieldName.collectRefs(allRefs, refs);
-    }
-    
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -70,9 +63,4 @@ public class ExpressionAccessor extends FieldAccessor {
     public void accept(FieldAccessorVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        fieldName.forVariables(procedure);
-    }
 }
index 0f0d8417f3cbead247f8b11dc3b83550d89803e2..21c892ce4697ce2d6e94947b9e83bbd16462e701 100644 (file)
@@ -5,7 +5,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
 
 import gnu.trove.map.hash.TObjectIntHashMap;
@@ -19,10 +18,6 @@ public abstract class FieldAccessor extends Symbol {
         this.accessSeparator = accessSeparator;
     }
 
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-    }
-
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
     }
@@ -48,6 +43,4 @@ public abstract class FieldAccessor extends Symbol {
     public abstract void setLocationDeep(long loc);
 
     public abstract void accept(FieldAccessorVisitor visitor);
-
-    public abstract void forVariables(VariableProcedure procedure);
 }
index 9cb37e58ff12c610207aad0a828a7dc2a8fabd60..920a816061e39a3344e6d9745b7762db7dfbe457 100644 (file)
@@ -3,7 +3,6 @@ package org.simantics.scl.compiler.elaboration.expressions.accessor;
 import org.simantics.scl.compiler.constants.StringConstant;
 import org.simantics.scl.compiler.elaboration.expressions.ELiteral;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 
 public class IdAccessor extends FieldAccessor {
@@ -34,8 +33,4 @@ public class IdAccessor extends FieldAccessor {
     public void accept(FieldAccessorVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-    }
 }
index d08a4383fa8816b11c641d3518586ec189b668b9..ac038d12c1877a876583c875672f84036116de46 100644 (file)
@@ -3,7 +3,6 @@ package org.simantics.scl.compiler.elaboration.expressions.accessor;
 import org.simantics.scl.compiler.constants.StringConstant;
 import org.simantics.scl.compiler.elaboration.expressions.ELiteral;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 
 public class StringAccessor extends FieldAccessor {
@@ -29,8 +28,4 @@ public class StringAccessor extends FieldAccessor {
     public void accept(FieldAccessorVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-    }
 }
index b1efd2ca95d965802528feab0381fe4978f68268..1283cc059b7124b4af7e3737437525c9f2ea8f30 100644 (file)
@@ -7,7 +7,6 @@ import org.simantics.scl.compiler.elaboration.expressions.Case;
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Type;
 
@@ -30,12 +29,6 @@ public class ListAssignment extends ListQualifier {
         pattern.checkTypeAsPattern(context, value.getType());
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -99,11 +92,6 @@ public class ListAssignment extends ListQualifier {
         visitor.visit(this);
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-    }
-
     @Override
     public ListQualifier accept(ListQualifierTransformer transformer) {
         return transformer.transform(this);
index 90b68c5dd3dffec03aca7fe474ff0ad30e807f01..db12689c862b69d250bba2336a59c3a447eee49a 100644 (file)
@@ -7,7 +7,6 @@ import org.simantics.scl.compiler.elaboration.expressions.Case;
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.TMetaVar;
 import org.simantics.scl.compiler.types.Type;
@@ -34,12 +33,6 @@ public class ListGenerator extends ListQualifier {
         pattern.checkTypeAsPattern(context, componentType);
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        value.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -105,11 +98,6 @@ public class ListGenerator extends ListQualifier {
         visitor.visit(this);
     }
     
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        value.forVariables(procedure);
-    }
-    
     @Override
     public ListQualifier accept(ListQualifierTransformer transformer) {
         return transformer.transform(this);
index 626bd48cb75e50d3a8585e30e05559dd1d8d76ff..2fe49150f6473d581a29c839507ec3675e8e3320 100644 (file)
@@ -5,7 +5,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
@@ -26,12 +25,6 @@ public class ListGuard extends ListQualifier {
         condition.checkType(context, Types.BOOLEAN);
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        condition.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -73,11 +66,6 @@ public class ListGuard extends ListQualifier {
         visitor.visit(this);
     }
     
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        condition.forVariables(procedure);
-    }
-    
     @Override
     public ListQualifier accept(ListQualifierTransformer transformer) {
         return transformer.transform(this);
index 939e6fd66a4f238e7ca239685fb2684b791bde21..47c9cf6d8d9e384a9ab7032ce2e62632c554c663 100644 (file)
@@ -4,7 +4,6 @@ import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
 import org.simantics.scl.compiler.types.Type;
 
@@ -15,7 +14,6 @@ import gnu.trove.set.hash.TIntHashSet;
 public abstract class ListQualifier extends Symbol {
 
     public abstract void checkType(TypingContext context);
-    public abstract void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs);
     public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
     public abstract void collectFreeVariables(THashSet<Variable> vars);
     /**
@@ -27,6 +25,5 @@ public abstract class ListQualifier extends Symbol {
     public abstract void setLocationDeep(long loc);
     public abstract void accept(ListQualifierVisitor visitor);
     public abstract ListQualifier accept(ListQualifierTransformer transformer);
-    public abstract void forVariables(VariableProcedure procedure);
     
 }
index f56820d2a3e9496af3cdb5b6b67c85d1b92401f7..a802a80accbc1ea64cda833701aa1788ad427f63 100644 (file)
@@ -5,7 +5,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Type;
 
@@ -27,13 +26,6 @@ public class ListSeq extends ListQualifier {
         a.checkType(context);
         b.checkType(context);  
     }
-    
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        a.collectRefs(allRefs, refs);
-        b.collectRefs(allRefs, refs);
-    }
 
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
@@ -95,12 +87,6 @@ public class ListSeq extends ListQualifier {
         visitor.visit(this);
     }
     
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        a.forVariables(procedure);
-        b.forVariables(procedure);
-    }
-    
     @Override
     public ListQualifier accept(ListQualifierTransformer transformer) {
         return transformer.transform(this);
index fbc153226926a8aa64d1cf429c46f5a2ab74949a..e1061564f767391b576c00e26a6329ba55246da5 100644 (file)
@@ -5,7 +5,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.TMetaVar;
 import org.simantics.scl.compiler.types.Type;
@@ -48,15 +47,6 @@ public class ListThen extends ListQualifier {
         }
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        left.collectRefs(allRefs, refs);
-        transformer.collectRefs(allRefs, refs);
-        if(by != null)
-            by.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -122,14 +112,6 @@ public class ListThen extends ListQualifier {
     public void accept(ListQualifierVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        left.forVariables(procedure);
-        transformer.forVariables(procedure);
-        if(by != null)
-            by.forVariables(procedure);
-    }
     
     @Override
     public ListQualifier accept(ListQualifierTransformer transformer) {
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectRefsVisitor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectRefsVisitor.java
new file mode 100644 (file)
index 0000000..366dc51
--- /dev/null
@@ -0,0 +1,56 @@
+package org.simantics.scl.compiler.elaboration.expressions.visitors;
+
+import org.simantics.scl.compiler.elaboration.expressions.EConstant;
+import org.simantics.scl.compiler.elaboration.expressions.ETransformation;
+import org.simantics.scl.compiler.elaboration.expressions.StandardExpressionVisitor;
+import org.simantics.scl.compiler.elaboration.query.QAtom;
+import org.simantics.scl.compiler.elaboration.relations.CompositeRelation;
+import org.simantics.scl.compiler.elaboration.relations.SCLRelation;
+
+import gnu.trove.map.hash.TObjectIntHashMap;
+import gnu.trove.set.hash.TIntHashSet;
+
+public class CollectRefsVisitor extends StandardExpressionVisitor {
+    private final TObjectIntHashMap<Object> allRefs;
+    private final TIntHashSet refs;
+    
+    public CollectRefsVisitor(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+        this.allRefs = allRefs;
+        this.refs = refs;
+    }
+    
+    @Override
+    public void visit(ETransformation expression) {
+        {
+            int ref = allRefs.get(ETransformation.TRANSFORMATION_RULES_TYPECHECKED);
+            if(ref >= 0)
+                refs.add(ref);
+        }
+        super.visit(expression);
+    }
+    
+    @Override
+    public void visit(EConstant expression) {
+        int id = allRefs.get(expression.value);
+        if(id >= 0)
+            refs.add(id);
+    }
+    
+    @Override
+    public void visit(QAtom query) {
+        collectRelationRefs(query.relation);
+        super.visit(query);
+    }
+    
+    private void collectRelationRefs(SCLRelation relation) {
+        if(relation instanceof CompositeRelation) {
+            for(SCLRelation subrelation : ((CompositeRelation) relation).getSubrelations())
+                collectRelationRefs(subrelation);
+        }
+        else {
+            int id = allRefs.get(relation);
+            if(id >= 0)
+                refs.add(id);
+        }
+    }
+}
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/ForVariablesUsesVisitor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/ForVariablesUsesVisitor.java
new file mode 100644 (file)
index 0000000..b4d1fd4
--- /dev/null
@@ -0,0 +1,25 @@
+package org.simantics.scl.compiler.elaboration.expressions.visitors;
+
+import org.simantics.scl.compiler.elaboration.expressions.EAsPattern;
+import org.simantics.scl.compiler.elaboration.expressions.EVariable;
+import org.simantics.scl.compiler.elaboration.expressions.StandardExpressionVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
+
+public class ForVariablesUsesVisitor extends StandardExpressionVisitor {
+    VariableProcedure procedure;
+    
+    public ForVariablesUsesVisitor(VariableProcedure procedure) {
+        this.procedure = procedure;
+    }
+    
+    @Override
+    public void visit(EVariable expression) {
+        if(expression.variable != null)
+            procedure.execute(expression.location, expression.variable);
+    }
+    @Override
+    public void visit(EAsPattern expression) {
+        expression.pattern.accept(this);
+        procedure.execute(expression.eVar.location, expression.var);
+    }
+}
index 53eb780fdaf2174393a8235d15a755aa8363d5be..459711a8d20bd00f8d9d3ca36bb385acac260d75 100644 (file)
@@ -8,7 +8,6 @@ import org.simantics.scl.compiler.elaboration.expressions.EApply;
 import org.simantics.scl.compiler.elaboration.expressions.EVar;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.query.pre.QPreExists;
 import org.simantics.scl.compiler.elaboration.query.pre.QPreGuard;
 import org.simantics.scl.compiler.errors.Locations;
@@ -75,12 +74,6 @@ public abstract class QAbstractCombiner extends Query {
             query.checkType(context);
     }
     
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        for(Query query : queries)
-            query.collectRefs(allRefs, refs);
-    }
-    
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         for(Query query : queries)
@@ -95,10 +88,4 @@ public abstract class QAbstractCombiner extends Query {
                 query.setLocationDeep(loc);
         }
     }
-    
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Query query : queries)
-            query.forVariables(procedure);
-    }
 }
index e04246e40e7d4224837205d7622c404527bae0aa..421bf833ecc0513cf47b352216b1772d91845a1e 100644 (file)
@@ -3,7 +3,6 @@ package org.simantics.scl.compiler.elaboration.query;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.errors.Locations;
 
 import gnu.trove.map.hash.TObjectIntHashMap;
@@ -32,12 +31,6 @@ public abstract class QAbstractModifier extends Query {
         query.checkType(context);
     }
     
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        query.collectRefs(allRefs, refs);
-    }
-    
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -51,9 +44,4 @@ public abstract class QAbstractModifier extends Query {
             query.setLocationDeep(loc);
         }
     }
-    
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        query.forVariables(procedure);
-    }
 }
index fd7dacb799b625984ccf280c1b4f96380701c950..c988aed56d82acfc5c1862ff8f806116fb118f12 100644 (file)
@@ -129,7 +129,7 @@ public class QAtom extends Query {
                     }
                     else {
                         optionalVariableByParameter[i] = -1;
-                        parameter.forVariables(procedure);
+                        parameter.forVariableUses(procedure);
                     }
                 }
             }
@@ -147,27 +147,6 @@ public class QAtom extends Query {
         }
     }
 
-    private static void collectRefs(SCLRelation relation, TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        if(relation instanceof CompositeRelation) {
-            for(SCLRelation subrelation : ((CompositeRelation) relation).getSubrelations())
-                collectRefs(subrelation, allRefs, refs);
-        }
-        else {
-            int id = allRefs.get(relation);
-            if(id >= 0)
-                refs.add(id);
-        }
-    }
-
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        collectRefs(relation, allRefs, refs);
-        for(Expression parameter : parameters)
-            parameter.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -250,12 +229,6 @@ public class QAtom extends Query {
         visitor.visit(this);
     }
 
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Expression parameter : parameters)
-            parameter.forVariables(procedure);
-    }
-
     @Override
     public void splitToPhases(TIntObjectHashMap<ArrayList<Query>> result) {
         int phase = relation.getPhase();
index 5356eccc2708987042bb174f215a2ab374782084..293c8bf707ba55142a9bbfc28ed9d899a69e1e87 100644 (file)
@@ -8,7 +8,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;
 import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.DerivateException;
 import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException;
@@ -92,13 +91,6 @@ public class QExists extends QAbstractModifier {
         visitor.visit(this);
     }
     
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Variable variable : variables)
-            procedure.execute(location, variable);
-        super.forVariables(procedure);
-    }
-    
     @Override
     public Query accept(QueryTransformer transformer) {
         return transformer.transform(this);
index 62ff9583ce97317519fe2074254f818b61cf6027..d148339a46946132187f04a1ed9433056ff3401a 100644 (file)
@@ -5,7 +5,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException;
 import org.simantics.scl.compiler.errors.Locations;
@@ -33,13 +32,6 @@ public class QIf extends Query {
         elseQuery.collectFreeVariables(vars);
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
-        condition.collectRefs(allRefs, refs);
-        thenQuery.collectRefs(allRefs, refs);
-        elseQuery.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
         condition.collectVars(allVars, vars);
@@ -82,13 +74,6 @@ public class QIf extends Query {
     public void accept(QueryVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        condition.forVariables(procedure);
-        elseQuery.forVariables(procedure);
-        thenQuery.forVariables(procedure);
-    }
     
     @Override
     public Query accept(QueryTransformer transformer) {
index ca9378c89f19da98d41b699e95ef88c75f497048..08d72563ece32a40f1c6256286305c496166d37b 100644 (file)
@@ -6,7 +6,6 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.QueryTransformer;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
-import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException;
 import org.simantics.scl.compiler.elaboration.rules.MappingRelation;
@@ -32,13 +31,6 @@ public class QMapping extends Query {
             parameter.collectFreeVariables(vars);
     }
 
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        for(Expression parameter : parameters)
-            parameter.collectRefs(allRefs, refs);
-    }
-
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -82,12 +74,6 @@ public class QMapping extends Query {
     public void accept(QueryVisitor visitor) {
         visitor.visit(this);
     }
-
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        for(Expression parameter : parameters)
-            parameter.forVariables(procedure);
-    }
     
     @Override
     public Query accept(QueryTransformer transformer) {
index 0ac54e22ec29d72b8468bde640220c4676a4ed39..7b610756a6eb9dc65f2c7a1e94ff7314af61adee 100644 (file)
@@ -14,6 +14,8 @@ import org.simantics.scl.compiler.elaboration.expressions.StandardExpressionVisi
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.elaboration.expressions.VariableProcedure;
 import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToStringVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectRefsVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor;
 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.DerivateException;
 import org.simantics.scl.compiler.elaboration.query.compilation.DynamicProgrammingOrdering;
@@ -36,7 +38,6 @@ public abstract class Query extends Symbol {
     public static final Query[] EMPTY_ARRAY = new Query[0];
     
     public abstract void collectFreeVariables(THashSet<Variable> vars);
-    public abstract void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs);
     public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
     public abstract void checkType(TypingContext context);
     
@@ -135,8 +136,6 @@ public abstract class Query extends Symbol {
         });
     }
     
-    public abstract void forVariables(VariableProcedure procedure);
-    
     public TIntObjectHashMap<ArrayList<Query>> splitToPhases() {
         TIntObjectHashMap<ArrayList<Query>> result = new TIntObjectHashMap<ArrayList<Query>>(2);
         splitToPhases(result);
@@ -156,4 +155,11 @@ public abstract class Query extends Symbol {
     }
     
     public abstract Query accept(QueryTransformer transformer);
+    
+    public void forVariables(VariableProcedure procedure) {
+        accept(new ForVariablesUsesVisitor(procedure));
+    }
+    public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
+        accept(new CollectRefsVisitor(allRefs, refs));
+    }
 }
index ee96433d3e11e35c7e98370916de82f6b3c0d7f8..859690ec816265ce327596859246a4404a260a8d 100644 (file)
@@ -40,12 +40,6 @@ public abstract class PreQuery extends Query {
         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support collectConstraints.");
     }
     
-    @Override
-    public void collectRefs(TObjectIntHashMap<Object> allRefs,
-            TIntHashSet refs) {
-        throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support collectRefs.");
-    }
-    
     @Override
     public void collectVars(TObjectIntHashMap<Variable> allVars,
             TIntHashSet vars) {
@@ -71,9 +65,4 @@ public abstract class PreQuery extends Query {
             query = new QExists(extraVariables.toArray(new Variable[extraVariables.size()]), query);
         return query;
     }
-    
-    @Override
-    public void forVariables(VariableProcedure procedure) {
-        throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support forVariables.");
-    }
 }
index 42eb9530d3717401b427b78f7c951c99620f8675..b404b1c53577741eb06ba69e40cc47ebedf0503f 100644 (file)
@@ -8,7 +8,6 @@ import static org.simantics.scl.compiler.elaboration.expressions.Expressions.let
 import static org.simantics.scl.compiler.elaboration.expressions.Expressions.tuple;
 import static org.simantics.scl.compiler.elaboration.expressions.Expressions.var;
 
-import org.simantics.scl.compiler.common.names.Name;
 import org.simantics.scl.compiler.common.names.Names;
 import org.simantics.scl.compiler.elaboration.expressions.EApply;
 import org.simantics.scl.compiler.elaboration.expressions.EVariable;
index 6060315c4d3103f34933dc9e6fcee61ab2ea7233..50958221ca9e0ac063895ed5ba65573deb895c7b 100644 (file)
@@ -184,7 +184,7 @@ public class TransformationBuilder {
                 }
             };
             for(QMapping mapping : decomposed.targetMappings)
-                mapping.parameters[0].forVariables(check);
+                mapping.parameters[0].forVariableUses(check);
             sourceVariables = sourceVariableList.toArray(new Variable[sourceVariableList.size()]);
         }
         
@@ -220,7 +220,7 @@ public class TransformationBuilder {
             }
             else {
                 PatternAnalyzer analyzer = new PatternAnalyzer(variableSet, mappedVariableUseCount); 
-                expression.forVariables(analyzer);
+                expression.forVariableUses(analyzer);
 
                 if(analyzer.containsVariables)
                     semiopenMappings.add(mapping);
index 75b083f0c9fbadc3a138e77b0b8a7a65b613bed4..06da2356294d80dd89e3803e940c71bb37953a74 100644 (file)
@@ -186,7 +186,7 @@ public class UnifiableFactory {
         
         // Default action
         final THashSet<Variable> dependences = new THashSet<Variable>();
-        expression.forVariables(new VariableProcedure() {
+        expression.forVariableUses(new VariableProcedure() {
             
             @Override
             public void execute(long location, Variable variable) {
index 0c0d8682a5706688c6031f8f68698823390ccb89..3ce1b01580c7415d517f712ca499cf4670c8aa45 100644 (file)
@@ -99,7 +99,8 @@ public class ModelledSTSTest {
     }
     
     public List<CommandSessionVariable> run(List<CommandSessionVariable> vars) throws IOException {
-        ModuleRepository repo = new ModuleRepository(SCLOsgi.SOURCE_REPOSITORY);
+//        ModuleRepository repo = new ModuleRepository(SCLOsgi.SOURCE_REPOSITORY);
+       ModuleRepository repo = SCLOsgi.MODULE_REPOSITORY;
         CommandSession session = null;
         try {
 //            repo.setAdvisor(new ModuleCompilationOptionsAdvisor() {
@@ -139,7 +140,7 @@ public class ModelledSTSTest {
             return result;
         } finally {
             // remember to flush this repository
-            repo.flush();
+//            repo.flush();
             Builtins.flush();
             JavaModule.flush();
         }