(refs #7375) Replaced collectVars method by a visitor 56/756/1
authorHannu Niemistö <hannu.niemisto@semantum.fi>
Mon, 24 Jul 2017 12:08:41 +0000 (15:08 +0300)
committerHannu Niemistö <hannu.niemisto@semantum.fi>
Mon, 24 Jul 2017 12:08:41 +0000 (15:08 +0300)
Change-Id: I4838702fadeca47449433693dae9630d5cac895d

58 files changed:
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/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/GuardedExpressionGroup.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/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/CollectVarsVisitor.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/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

index 71dcd04251e2609a7449a119e165a1639ad30354..785c27da0e6286e9f81222d266331cd6c4808815 100644 (file)
@@ -4,12 +4,8 @@ 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.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.errors.Locations;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EqBasic extends Equation {
     public Expression left;
     public Expression right;
@@ -39,12 +35,6 @@ public class EqBasic extends Equation {
         right = right.checkType(context, left.getType());
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        left.collectVars(allVars, vars);
-        right.collectVars(allVars, vars);
-    }
-
     @Override
     public void resolve(TranslationContext context) {
         left = left.resolve(context);
index aa66cd8906fa9dd7149996d665dc93b1385aa45a..c72d9433f8e835f0f8adff9455743671668e0364 100644 (file)
@@ -4,12 +4,8 @@ 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.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.errors.Locations;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EqGuard extends Equation {
     public Expression guard;
 
@@ -35,11 +31,6 @@ public class EqGuard extends Equation {
         guard = guard.checkIgnoredType(context);
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        guard.collectVars(allVars, vars);
-    }
-
     @Override
     public void resolve(TranslationContext context) {
         guard = guard.resolve(context);
index 5b4268691e73e1bc32ab0c92cc90f644c550f3bb..cb801a33d6f03c2455b05d6755df339130687190 100644 (file)
@@ -3,19 +3,14 @@ package org.simantics.scl.compiler.elaboration.equation;
 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.internal.parsing.Symbol;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public abstract class Equation extends Symbol {
     public static final Equation[] EMPTY_ARRAY = new Equation[0];    
 
     public abstract void setLocationDeep(long loc);
 
     public abstract void checkType(TypingContext context);
-    public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
     public abstract void resolve(TranslationContext context);
     public abstract void accept(EquationVisitor visitor);
     public abstract Equation replace(ReplaceContext context);
index 2858a579c3938d8ebdfb44c24ac05d02bf03bab5..c96218b6524d74b37dbe1bd1882071bb300239b2 100644 (file)
@@ -7,9 +7,6 @@ import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public abstract class ASTExpression extends SimplifiableExpression {
     public ASTExpression() {
     }
@@ -19,12 +16,6 @@ public abstract class ASTExpression extends SimplifiableExpression {
         throw new InternalCompilerError(getClass().getSimpleName() + " does not support simplify.");
     }
     
-    @Override
-    final public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectVars.");
-    }
-    
     @Override
     final protected void updateType() throws MatchException {
         throw new InternalCompilerError(getClass().getSimpleName() + " does not support updateType.");
index 2669b4733fc328fc5376a2c310990cf24fe45c9c..a50bcc2ddf926b37b02b04f39dce0273088c721c 100644 (file)
@@ -8,9 +8,6 @@ import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
 import org.simantics.scl.compiler.types.Type;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class Case extends Symbol {
     public Expression[] patterns;
     public Expression value;
@@ -34,11 +31,6 @@ public class Case extends Symbol {
         return lhs;
     }
 
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        value.collectVars(allVars, vars);
-    }
-
     public void resolve(TranslationContext context) {
         context.pushFrame();
         for(int i=0;i<patterns.length;++i)
index c531b854745540fb0f87930b2a25706820a9a6d0..4563e241ed1e2104b02d445dd1e9a7ac6180180c 100644 (file)
@@ -15,9 +15,6 @@ import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public abstract class DecoratingExpression extends SimplifiableExpression {
     public Expression expression;
     
@@ -25,12 +22,6 @@ public abstract class DecoratingExpression extends SimplifiableExpression {
         super(loc);
         this.expression = expression;
     }
-    
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        expression.collectVars(allVars, vars);
-    }
 
     @Override
     protected void updateType() throws MatchException {
index 0826bbbca5727b925b57155190985f4269e6defa..7434bf2acfecbb9b128685bc9e9283e5e0ea17d5 100644 (file)
@@ -16,8 +16,6 @@ import org.simantics.scl.compiler.types.util.TypeListener;
 import org.simantics.scl.compiler.types.util.TypeUnparsingContext;
 
 import gnu.trove.map.hash.THashMap;
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
 
 public class EAmbiguous extends SimplifiableExpression {
     public static final boolean DEBUG = false;
@@ -41,11 +39,6 @@ public class EAmbiguous extends SimplifiableExpression {
         this.activeCount = alternatives.length;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-    }
-
     @Override
     protected void updateType() throws MatchException {
         throw new InternalCompilerError();
index 14366a4c9a366ea4e84711e20a319a79ae1998d4..02c7dff4585c95e0d55d7bf485266f90327b31e6 100644 (file)
@@ -32,9 +32,6 @@ import org.simantics.scl.compiler.types.exceptions.UnificationException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 import org.simantics.scl.compiler.types.util.MultiFunction;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EApply extends Expression {
     public Expression function;
     public Expression[] parameters;
@@ -74,15 +71,9 @@ public class EApply extends Expression {
     public Expression[] getParameters() {
         return parameters;
     }
-    
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        function.collectVars(allVars, vars);
-        for(Expression parameter : parameters)
-            parameter.collectVars(allVars, vars);
-    }
-       
-       @Override
-       protected void updateType() throws MatchException {
+
+    @Override
+    protected void updateType() throws MatchException {
         MultiFunction mfun = Types.matchFunction(function.getType(), parameters.length);
         /*for(int i=0;i<parameters.length;++i)
             if(!Types.equals(parameters[i].getType(), mfun.parameterTypes[i]))
index f9426f21ac500cf7bb1e4f72988f0d1c5007b97f..30d1209cea12b692c3575337033d31bfe29ac5bd 100644 (file)
@@ -15,9 +15,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EApplyType extends Expression {    
     public Expression expression;
     Type parameter;
@@ -49,10 +46,6 @@ public class EApplyType extends Expression {
         return parameter;
     }
 
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        expression.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.instantiate(expression.getType(), parameter));
index 59538d603f72e2c7322460fb01b9de3cfe945c75..21248179f9a7711732edf31c359c41d799f1b8fb 100644 (file)
@@ -12,9 +12,6 @@ import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EAsPattern extends Expression {
 
     public Variable var;
@@ -38,15 +35,6 @@ public class EAsPattern extends Expression {
     public Expression getPattern() {
         return pattern;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        int id = allVars.get(var);
-        if(id >= 0)
-            vars.add(id);
-        pattern.collectVars(allVars, vars);
-    }
     
     @Override
     public Expression simplify(SimplificationContext context) {
index ce72e282aa2a58b1d1e59030d739fe8f89c46c27..5c4a729e2e15fb748a7a17e7793c48d4257e196b 100644 (file)
@@ -15,9 +15,6 @@ import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.exceptions.UnificationException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EBind extends SimplifiableExpression {
     public Expression pattern;
     public Expression value;
@@ -43,13 +40,6 @@ public class EBind extends SimplifiableExpression {
         this.in = in;
     }
     
-    @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());
index e1495588adecf3cd8e5142da1b3be98f5f39913e..e3fc0a4f2c5a56279d2580981b02a924b01ddcaf 100644 (file)
@@ -12,9 +12,6 @@ import org.simantics.scl.compiler.internal.interpreted.IExpression;
 import org.simantics.scl.compiler.top.ExpressionInterpretationContext;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ECHRRuleset extends Expression {
     public CHRRuleset ruleset;
     public Expression in;
@@ -23,12 +20,6 @@ public class ECHRRuleset extends Expression {
         this.ruleset = ruleset;
         this.in = in;
     }
-    
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        ruleset.collectVars(allVars, vars);
-        in.collectVars(allVars, vars);
-    }
 
     @Override
     protected void updateType() throws MatchException {
index 5d7b490e70c7d2617d6ac00de39cdd88c491e70c..431bd850dd4e8225f74d3c13284073a60b9d588a 100644 (file)
@@ -13,9 +13,6 @@ import org.simantics.scl.compiler.internal.interpreted.IExpression;
 import org.simantics.scl.compiler.top.ExpressionInterpretationContext;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ECHRRulesetConstructor extends Expression {
     public CHRRuleset ruleset;
     
@@ -23,11 +20,6 @@ public class ECHRRulesetConstructor extends Expression {
         this.ruleset = ruleset;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        ruleset.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         throw new InternalCompilerError("Type of ECHRRulesetConstructor should be already given.");
index 71c4a43e02df08078e6c6b16aa43731ba5bcae32..bf3b818f56c01c844b078705751ca1f3d20fd873 100644 (file)
@@ -21,9 +21,6 @@ import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ECHRSelect extends Expression {
     public CHRQuery query;
     public Variable[] existentialVariables;
@@ -36,12 +33,6 @@ public class ECHRSelect extends Expression {
         this.query = query;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        query.collectVars(allVars, vars);
-        expression.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.list(expression.getType()));
index 9fcb4ca46ebb5190018b5b15b4d6e16c3a242624..a668fe12b1cb036f17c69d477283bf01a0dc488f 100644 (file)
@@ -32,9 +32,6 @@ import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.util.MultiFunction;
 import org.simantics.scl.compiler.types.util.TypeUnparsingContext;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EConstant extends Expression {
     public SCLValue value;
     Type[] typeParameters;
@@ -83,11 +80,6 @@ public class EConstant extends Expression {
             setType(Types.instantiate(getType(), type));
         return this;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {   
-    }
     
     @Override
     public Set<Variable> getFreeVariables() {
index 3bd337963807aef4beacc3774c58045b4d78db6c..8e1adf7849c51b2b41bcb56bdc6df95e60f5b112 100644 (file)
@@ -12,9 +12,6 @@ import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EEnforce extends SimplifiableExpression {
     
     public Query query;
@@ -27,12 +24,6 @@ public class EEnforce extends SimplifiableExpression {
         return query;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        query.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.tupleConstructor(0));
index 268cc24977d14fcd806b1ffc434ab50b167c382c..7773a5346c00820cfe2c9a09dc3ecab2cc0cec64 100644 (file)
@@ -10,9 +10,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EEquations extends SimplifiableExpression {
 
     public Equation[] equations;
@@ -48,12 +45,6 @@ public class EEquations extends SimplifiableExpression {
         return transformer.transform(this);
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        for(Equation equation : equations)
-            equation.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.UNIT);
index def4087169b67abe35e91f15dd907e40864885e5..997a5723b66b05a501c5b38eabdf088cc19ce684 100644 (file)
@@ -13,9 +13,6 @@ import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EError extends Expression {
 
     public EError(long loc, Type type) {
@@ -30,11 +27,6 @@ public class EError extends Expression {
         this(loc, Types.metaVar(Kinds.STAR));
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.metaVar(Kinds.STAR));
index 0321ae3fcb37796603da7dc161c7246a5b7d4585..788483dbe475ba82d33c41496e1e0bef5ef08feb 100644 (file)
@@ -19,9 +19,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.util.TypeUnparsingContext;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EExternalConstant extends Expression {
     Object value;
     
@@ -34,11 +31,6 @@ public class EExternalConstant extends Expression {
         return value;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {            
-    }
-
     public void toString(StringBuilder b, TypeUnparsingContext tuc) {
         b.append(value);
     }
index 668c05393d0f29444823b70833479d600fb86f33..04a5840f5c731b24bfcf8cf0b71f17d832676d72 100644 (file)
@@ -16,9 +16,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EFieldAccess extends SimplifiableExpression {
 
     private static final Type VARIABLE = Types.con("Simantics/Variables", "Variable");
@@ -34,13 +31,6 @@ public class EFieldAccess extends SimplifiableExpression {
                ((EFieldAccess)parent).lastAccessor = false;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        parent.collectVars(allVars, vars);
-        accessor.collectVars(allVars, vars);
-    }
-
     private boolean returnsValue() {
        return accessor.accessSeparator == '#' && !accessor.isVariableId();
     }
index a070ba8da9817771e5913f5b8539e10c7ebde87b..24ff0a149344a928ef453773e653bb0c8ea0d0b4 100644 (file)
@@ -7,9 +7,6 @@ import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.TPred;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EGetConstraint extends SimplifiableExpression {
     TPred constraint;
     public EVariable evidence;
@@ -19,13 +16,6 @@ public class EGetConstraint extends SimplifiableExpression {
         this.constraint = constraint;
     }
     
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        if(evidence != null)
-            evidence.collectVars(allVars, vars);        
-    }
-    
     @Override
     public Expression inferType(TypingContext context) {
         Variable variable = new Variable("evidence");
index a6574824398e5965299d7e545afcf04d19a48613..fe6216fe153c3bb8fec3da0e83c86940aa8a9269 100644 (file)
@@ -17,9 +17,6 @@ import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.runtime.tuple.Tuple0;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EIf extends Expression {
     public Expression condition;
     public Expression then_;
@@ -38,15 +35,6 @@ public class EIf extends Expression {
         this.else_ = else_;
     }
 
-    @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());
index fa4db7ff1c4e1c50c2e5a7ed2f93852660cc4853..dc265934a75383dc7f017f794880726dacd71ea9 100644 (file)
@@ -16,9 +16,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EIntegerLiteral extends SimplifiableExpression {
     public String value;
     public EVariable constraint;
@@ -26,11 +23,6 @@ public class EIntegerLiteral extends SimplifiableExpression {
     public EIntegerLiteral(String value) {
         this.value = value;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-    }
     
     public String getValue() {
         return value;
index bc3e925b05f6887914db8a4fcf086df5cc3597b7..ccf86bbf5110204bcdf63bedf130dbc4e5327265 100644 (file)
@@ -12,9 +12,6 @@ import org.simantics.scl.compiler.types.exceptions.UnificationException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 import org.simantics.scl.compiler.types.util.MultiFunction;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ELambda extends SimplifiableExpression {
     public Case[] cases;
     Type effect = Types.NO_EFFECTS;
@@ -36,13 +33,6 @@ public class ELambda extends SimplifiableExpression {
         this(loc, new Case(new Expression[] {pat}, exp));
     }
 
-    @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;
         int arity = patterns.length;
index 9aed4450e4c1a6eb55b41b84312419cb6becfee7..73e38397da334145d852cd26fdc41d2f447c773e 100644 (file)
@@ -15,9 +15,6 @@ import org.simantics.scl.compiler.types.TVar;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ELambdaType extends Expression {
     public TVar[] parameters;
     public Expression value;
@@ -28,12 +25,6 @@ public class ELambdaType extends Expression {
         this.value = value;
     }
 
-    @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()));
index 71195352405ecf2c2ce35ba5010bd5e814982162..23c5b0be282d7fbd4a0a840cd00dd6b43fb4cce5 100644 (file)
@@ -36,14 +36,6 @@ public class ELet extends Expression {
         this.in = in;
     }
     
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        for(Assignment assign : assignments)
-            assign.value.collectVars(allVars, vars);
-        in.collectVars(allVars, vars);
-    }
-    
     @Override
     protected void updateType() throws MatchException {
         setType(in.getType());
index a6d79e817fcdb087bde2a0276492885cd63f2537..78f7ce115c24b6b22eb06df747cb2ca7890df050 100644 (file)
@@ -10,9 +10,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EListComprehension extends SimplifiableExpression {
 
     public Expression head;
@@ -29,13 +26,6 @@ public class EListComprehension extends SimplifiableExpression {
         this.head = head;
         this.qualifier = qualifier;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        head.collectVars(allVars, vars);
-        qualifier.collectVars(allVars, vars);
-    }
     
     @Override
     public Expression checkBasicType(TypingContext context, Type requiredType) {
index 797dbc2e5e654c33e9e5ab2b0ffb3bc0a9166e17..0f9ae5a15327da2fe4329c7760c8ebb234b5f22f 100644 (file)
@@ -15,9 +15,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EListLiteral extends SimplifiableExpression {
 
     public Expression[] components;
@@ -35,13 +32,6 @@ public class EListLiteral extends SimplifiableExpression {
     public Expression[] getComponents() {
         return components;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        for(Expression component : components)
-            component.collectVars(allVars, vars);
-    }
     
     @Override
     public Expression simplify(SimplificationContext context) {
index 3f65de3b6f0a19249c99e49d28fc2f30ffa4ce0e..bef28f20ff298a75b65f594cf4bbea08446017d7 100644 (file)
@@ -19,9 +19,6 @@ import org.simantics.scl.compiler.top.ExpressionInterpretationContext;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.util.TypeUnparsingContext;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ELiteral extends Expression {
     Constant value;
     
@@ -38,11 +35,6 @@ public class ELiteral extends Expression {
     public Constant getValue() {
         return value;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {            
-    }
     
     @Override
     public Set<Variable> getFreeVariables() {
index ba9cee65edc0cc7daa1bfc8cfb652514da64933c..279815ecfd1b19227483a7b363bc6e137af63303 100644 (file)
@@ -17,9 +17,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EMatch extends Expression {
 
     public Expression[] scrutinee;
@@ -40,15 +37,6 @@ public class EMatch extends Expression {
         this.cases = cases;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        for(Expression s : scrutinee)
-            s.collectVars(allVars, vars);
-        for(Case case_ : cases)
-            case_.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() {
         setType(cases[0].value.getType());
index 8c861004cadbd2cb88fbddd1bacab331d311534d..90cc94bef87437deeb4869dfb87bd7781838690f 100644 (file)
@@ -15,9 +15,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ERealLiteral extends SimplifiableExpression {
     public String value;
     public EVariable constraint;
@@ -26,11 +23,6 @@ public class ERealLiteral extends SimplifiableExpression {
         this.value = value;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-    }
-
     private Expression tryToConvertToPrimitive(ErrorLog errorLog, Type requiredType) {
         if(requiredType.equals(Types.DOUBLE))
             return new ELiteral(new DoubleConstant(Double.parseDouble(value)));
index dadf52797d28052416c24961a166ee66657b6c78..9663a2a724bfc7f4184e3d870d6340b98c80c125 100644 (file)
@@ -128,17 +128,6 @@ public class ERuleset extends SimplifiableExpression {
         in = in.checkIgnoredType(context);
         return compile(context);
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        for(DatalogRule rule : rules) {
-            for(Expression parameter : rule.headParameters)
-                parameter.collectVars(allVars, vars);
-            rule.body.collectVars(allVars, vars);
-        }
-        in.collectVars(allVars, vars);
-    }
     
     @Override
     public Expression resolve(TranslationContext context) {
index 09079377f0a0a11afe61147fb0827865300c4ba1..e7014a8657fb091d011ec0432626b55c73c606da 100644 (file)
@@ -26,9 +26,6 @@ import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ESelect extends SimplifiableExpression {
 
     private final Type ARRAY_LIST = Types.con("ArrayList", "T"); 
@@ -44,13 +41,6 @@ public class ESelect extends SimplifiableExpression {
         this.query = query;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        expression.collectVars(allVars, vars);
-        query.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(selectVariant==SCLTerminals.SELECT_FIRST 
index 13c75db78bed5fe0f24cb211009ffb7c04f61b80..833e3e9e345d427e6037179e7f2b3bd1ef6469ec 100644 (file)
@@ -23,9 +23,6 @@ import org.simantics.scl.compiler.types.exceptions.UnificationException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 import org.simantics.scl.compiler.types.util.MultiFunction;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ESimpleLambda extends Expression {
     public Variable parameter;
     public Expression value;
@@ -55,12 +52,6 @@ public class ESimpleLambda extends Expression {
         this.effect = effect;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        value.collectVars(allVars, vars);
-    }
-
     public Expression decomposeMatching() {
         value = value.decomposeMatching();
         return this;
index 4957b578dd9597c8ae9f70d08d6f843d7d686a3f..aedb05d4b118906355728558f6598a3ee3f3641d 100644 (file)
@@ -15,9 +15,6 @@ import org.simantics.scl.compiler.top.ExpressionInterpretationContext;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ESimpleLet extends Expression {
     public Variable variable; // may be null
     public Expression value;
@@ -44,13 +41,6 @@ public class ESimpleLet extends Expression {
         this.in = in;
     }
 
-    @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());
index e6f57ac861ce2b0440400c90bbbdfdee82283b06..b96907ea3b9e4b3b69907f0cd53b766e6d8d07e2 100644 (file)
@@ -14,9 +14,6 @@ import org.simantics.scl.compiler.top.SCLCompilerConfiguration;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ETransformation extends SimplifiableExpression {
     public static final Object TRANSFORMATION_RULES_TYPECHECKED = new Object();
     
@@ -28,12 +25,6 @@ public class ETransformation extends SimplifiableExpression {
         this.seed = seed;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        seed.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.UNIT);
index 872da88f11c313659c247106f1b266c4f2cddd5d..713342ed568cedd6b1e747743a394d967158d64d 100644 (file)
@@ -8,9 +8,6 @@ import org.simantics.scl.compiler.internal.parsing.types.TypeAst;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ETypeAnnotation extends SimplifiableExpression {
     public Expression value;
     Type type;
@@ -27,12 +24,6 @@ public class ETypeAnnotation extends SimplifiableExpression {
         this.type = type;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        value.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(type);
index fccc62e9869cfc4f5469d2804588d4ed465baf41..7fe0e0a92d3220ceaf604c24715d9a48a0865044 100644 (file)
@@ -22,9 +22,6 @@ import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 import org.simantics.scl.compiler.types.util.TypeUnparsingContext;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EVariable extends Expression {
     public static final EVariable[] EMPTY_ARRAY = new EVariable[0];
     
@@ -47,14 +44,6 @@ public class EVariable extends Expression {
         this.variable = variable;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        int id = allVars.get(variable);
-        if(id >= 0)
-            vars.add(id);
-    }
-    
     @Override
     public Set<Variable> getFreeVariables() {
         if(variable == null)
index f2a017edda95d9aa15581b8bf22658e84b32558e..4957f7c856360ac1b19fc15a5fff5bdc1bd24954 100644 (file)
@@ -12,9 +12,6 @@ import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.util.MultiFunction;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EViewPattern extends Expression {
     public Expression expression;
     public Expression pattern;
@@ -23,12 +20,6 @@ public class EViewPattern extends Expression {
         this.expression = expression;
         this.pattern = pattern;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        expression.collectVars(allVars, vars);
-        pattern.collectVars(allVars, vars);
-    }
     
     @Override
     public Expression inferType(TypingContext context) {
index 55ea86baf443c1d5b72704239309be61924e18db..df6d56888d22013fe9ff38a836ace4ecc188d836 100644 (file)
@@ -16,9 +16,6 @@ import org.simantics.scl.compiler.types.exceptions.MatchException;
 import org.simantics.scl.compiler.types.exceptions.UnificationException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class EWhen extends SimplifiableExpression {
 
     public Query query;
@@ -41,13 +38,6 @@ public class EWhen extends SimplifiableExpression {
         this.variables = variables;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        query.collectVars(allVars, vars);
-        action.collectVars(allVars, vars);
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(Types.UNIT);
index 5b60dad423c942ddbb2a0ff4d03906a5e327b0cb..427acbd19b9dbbdd082df33f7c8ca97b0792d3ed 100644 (file)
@@ -18,6 +18,7 @@ import org.simantics.scl.compiler.elaboration.expressions.printing.ExpressionToS
 import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectEffectsVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectFreeVariablesVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectRefsVisitor;
+import org.simantics.scl.compiler.elaboration.expressions.visitors.CollectVarsVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.visitors.StandardExpressionVisitor;
 import org.simantics.scl.compiler.elaboration.query.QAtom;
@@ -163,7 +164,9 @@ public abstract class Expression extends Symbol implements Typed {
         accept(new CollectRefsVisitor(allRefs, refs));
     }
 
-    public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
+    public final void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
+        accept(new CollectVarsVisitor(allVars, vars));
+    }
 
     public final void forVariableUses(VariableProcedure procedure) {
         accept(new ForVariablesUsesVisitor(procedure));
index 90e13d7507f1d858b48c56485a84b90bcd3c8125..48283a887a2dc883ded12c0632faf800d434b097 100644 (file)
@@ -14,9 +14,6 @@ import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.MatchException;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class GuardedExpressionGroup extends Expression {
     public GuardedExpression[] expressions;
 
@@ -24,16 +21,6 @@ public class GuardedExpressionGroup extends Expression {
         this.expressions = expressions;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        for(GuardedExpression expression : expressions) {
-            for(Expression guard : expression.guards)
-                guard.collectVars(allVars, vars);
-            expression.value.collectVars(allVars, vars);
-        }
-    }
-
     @Override
     protected void updateType() throws MatchException {
         setType(expressions[0].value.getType());
index 2febc404f2e967f87d71f28573bf578e74196dfe..3df40521a6e061cb677b7b67d001b644c8fdbd96 100644 (file)
@@ -4,13 +4,9 @@ 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.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Types;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ExpressionAccessor extends FieldAccessor {
     public Expression fieldName;
 
@@ -19,12 +15,6 @@ public class ExpressionAccessor extends FieldAccessor {
         this.fieldName = fieldName;
     }
     
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        fieldName.collectVars(allVars, vars);
-    }
-    
     @Override
     public void resolve(TranslationContext context) {
         fieldName = fieldName.resolve(context);
index 21c892ce4697ce2d6e94947b9e83bbd16462e701..de02aa695b38fec1405658a39a8c35437e575e0d 100644 (file)
@@ -4,13 +4,8 @@ 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.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.internal.parsing.Symbol;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.THashSet;
-import gnu.trove.set.hash.TIntHashSet;
-
 public abstract class FieldAccessor extends Symbol {
     public char accessSeparator;
     
@@ -18,20 +13,13 @@ public abstract class FieldAccessor extends Symbol {
         this.accessSeparator = accessSeparator;
     }
 
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-    }
-
-    public void collectFreeVariables(THashSet<Variable> vars) {
-    }
-
     public void simplify(SimplificationContext context) {
     }
 
     public void resolve(TranslationContext context) {
     }
 
-    public void checkType(TypingContext context) {        
+    public void checkType(TypingContext context) {
     }
 
     public abstract Expression asExpression();
index 47aeef1a5c40b9e05e91296257afc1c9a4875d0d..cddcffc77bdedb7f95f9896c3f223f0a1d2b94e4 100644 (file)
@@ -11,9 +11,6 @@ import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.errors.Locations;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ListAssignment extends ListQualifier {
     public Expression pattern;
     public Expression value;
@@ -29,12 +26,6 @@ public class ListAssignment extends ListQualifier {
         pattern.checkTypeAsPattern(context, value.getType());
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        value.collectVars(allVars, vars);
-    }
-
     @Override
     public CompiledQualifier compile(SimplificationContext context) {
         if(pattern instanceof EVariable)
index 959e3bf3d5d71afec0f61d5817f201946eb73e00..e0401e6dcc0cad39c9b822b21bee82ea411980e7 100644 (file)
@@ -14,9 +14,6 @@ import org.simantics.scl.compiler.types.TMetaVar;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ListGenerator extends ListQualifier {
     public Expression pattern;
     public Expression value;
@@ -33,12 +30,6 @@ public class ListGenerator extends ListQualifier {
         pattern.checkTypeAsPattern(context, componentType);
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        value.collectVars(allVars, vars);
-    }
-
     @Override
     public CompiledQualifier compile(SimplificationContext context) {
         if(pattern instanceof EVariable)
index 9a5c37bdc3fc494f164a45f85efa08177084fb1e..e5e8ee9d47cdca494a9224a088519426fe684f81 100644 (file)
@@ -4,13 +4,9 @@ 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.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Types;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ListGuard extends ListQualifier {
     public Expression condition;
 
@@ -23,12 +19,6 @@ public class ListGuard extends ListQualifier {
         condition.checkType(context, Types.BOOLEAN);
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        condition.collectVars(allVars, vars);
-    }
-
     @Override
     public CompiledQualifier compile(SimplificationContext context) {
         return new CompiledQualifier(
index 9365e6a87f5d48a7ebd7146abf48afad34df083d..69818ef01266e952632cca67a50c49af849c661c 100644 (file)
@@ -3,16 +3,11 @@ package org.simantics.scl.compiler.elaboration.expressions.list;
 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.internal.parsing.Symbol;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public abstract class ListQualifier extends Symbol {
 
     public abstract void checkType(TypingContext context);
-    public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
     /**
      * Called in simplification.
      */
index 6bab8c91e0f52dba74b85b84ee7e40e076b6748b..f1126121f3de197cc8bc6bb892987b487c7fdc64 100644 (file)
@@ -7,9 +7,6 @@ import org.simantics.scl.compiler.elaboration.expressions.Expression;
 import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.errors.Locations;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ListSeq extends ListQualifier {
     public ListQualifier a;
     public ListQualifier b;
@@ -25,13 +22,6 @@ public class ListSeq extends ListQualifier {
         b.checkType(context);  
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        a.collectVars(allVars, vars);
-        b.collectVars(allVars, vars);
-    }
-
     @Override
     public CompiledQualifier compile(SimplificationContext context) {
         CompiledQualifier cA = a.compile(context);
index b8bd395668b2be7a046a3191e29c44e6af6778c5..df1d1f2b0772802e8ebcae20e6a25029be1873be 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.Expression;
-import org.simantics.scl.compiler.elaboration.expressions.Variable;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.TMetaVar;
 import org.simantics.scl.compiler.types.Type;
@@ -12,9 +11,6 @@ import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.exceptions.UnificationException;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ListThen extends ListQualifier {
     public ListQualifier left;
     public Expression transformer;
@@ -46,15 +42,6 @@ public class ListThen extends ListQualifier {
         }
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        left.collectVars(allVars, vars);
-        transformer.collectVars(allVars, vars);
-        if(by != null)
-            by.collectVars(allVars, vars);
-    }
-
     @Override
     public CompiledQualifier compile(SimplificationContext context) {
         CompiledQualifier q = left.compile(context);
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectVarsVisitor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectVarsVisitor.java
new file mode 100644 (file)
index 0000000..7c4bee0
--- /dev/null
@@ -0,0 +1,35 @@
+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.Variable;
+
+import gnu.trove.map.hash.TObjectIntHashMap;
+import gnu.trove.set.hash.TIntHashSet;
+
+public class CollectVarsVisitor extends StandardExpressionVisitor {
+    private final TObjectIntHashMap<Variable> allVars;
+    private final TIntHashSet vars;
+    
+    public CollectVarsVisitor(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
+        this.allVars = allVars;
+        this.vars = vars;
+    }
+
+    @Override
+    public void visit(EVariable expression) {
+        if(expression.variable != null) {
+            int id = allVars.get(expression.variable);
+            if(id >= 0)
+                vars.add(id);
+        }
+    }
+    
+    @Override
+    public void visit(EAsPattern expression) {
+        int id = allVars.get(expression.var);
+        if(id >= 0)
+            vars.add(id);
+        expression.pattern.accept(this);
+    }
+}
index e711d372cf9a490d29461fd5f02e8ada68d6ca1d..a3ca43d362ba09e28493c6d55326a4755c9b1589 100644 (file)
@@ -7,14 +7,10 @@ import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
 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.query.pre.QPreExists;
 import org.simantics.scl.compiler.elaboration.query.pre.QPreGuard;
 import org.simantics.scl.compiler.errors.Locations;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public abstract class QAbstractCombiner extends Query {
     public Query[] queries;
     
@@ -68,12 +64,6 @@ public abstract class QAbstractCombiner extends Query {
             query.checkType(context);
     }
     
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        for(Query query : queries)
-            query.collectVars(allVars, vars);
-    }
-    
     @Override
     public void setLocationDeep(long loc) {
         if(location == Locations.NO_LOCATION) {
index 234c8b615a97b0f91076388e0579d9e3a903ec6d..d580f2bb04c0b5e00fbf5b7444ceaf50194938cf 100644 (file)
@@ -2,12 +2,8 @@ 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.errors.Locations;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public abstract class QAbstractModifier extends Query {
     public Query query;
     
@@ -26,12 +22,6 @@ public abstract class QAbstractModifier extends Query {
         query.checkType(context);
     }
     
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        query.collectVars(allVars, vars);
-    }
-    
     @Override
     public void setLocationDeep(long loc) {
         if(location == Locations.NO_LOCATION) {
index 208513b21bff747d28700e4d2ac2b58a37cffa66..5f13bfd7b385a7b15a559ee07e41161ad13b464c 100644 (file)
@@ -27,7 +27,6 @@ import org.simantics.scl.compiler.types.Types;
 
 import gnu.trove.map.hash.THashMap;
 import gnu.trove.map.hash.TIntObjectHashMap;
-import gnu.trove.map.hash.TObjectIntHashMap;
 import gnu.trove.set.hash.TIntHashSet;
 
 public class QAtom extends Query {
@@ -140,13 +139,6 @@ public class QAtom extends Query {
         }
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        for(Expression parameter : parameters)
-            parameter.collectVars(allVars, vars);
-    }
-
     @Override
     public Query replace(ReplaceContext context) {
         Type[] newTypeParameters;
index 85950c24a9b2d65b597a2c1b69347c79f3134d46..03bcec3e9b6f322f3b426829f30c7d814095a1d2 100644 (file)
@@ -4,15 +4,11 @@ import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
 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.query.compilation.ConstraintCollectionContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Types;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class QIf extends Query {
     public Expression condition;
     public Query thenQuery;
@@ -23,14 +19,7 @@ public class QIf extends Query {
         this.thenQuery = thenQuery;
         this.elseQuery = elseQuery;
     }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
-        condition.collectVars(allVars, vars);
-        thenQuery.collectVars(allVars, vars);
-        elseQuery.collectVars(allVars, vars);
-    }
-
+    
     @Override
     public void checkType(TypingContext context) {
         condition.checkType(context, Types.BOOLEAN);
index 428ed922cdf17d4611efe656375ec06e08c42c62..02061b79801d0fceadc61b6fe91176a9757fbc9d 100644 (file)
@@ -5,16 +5,12 @@ import org.simantics.scl.compiler.elaboration.contexts.ReplaceContext;
 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.query.compilation.ConstraintCollectionContext;
 import org.simantics.scl.compiler.elaboration.query.compilation.UnsolvableQueryException;
 import org.simantics.scl.compiler.elaboration.rules.MappingRelation;
 import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.types.Type;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class QMapping extends Query {
     public final MappingRelation mappingRelation;
     public final Expression[] parameters;
@@ -24,13 +20,6 @@ public class QMapping extends Query {
         this.parameters = parameters;
     }
 
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        for(Expression parameter : parameters)
-            parameter.collectVars(allVars, vars);
-    }
-
     @Override
     public void checkType(TypingContext context) {
         // Check parameter types
index cea31bbe8d1ccbcf8d41bb6fbaf0ad2671f8a197..58f7807540188b6a81422e8be3a4d96fc238791c 100644 (file)
@@ -14,6 +14,7 @@ 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.CollectVarsVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.visitors.ForVariablesUsesVisitor;
 import org.simantics.scl.compiler.elaboration.expressions.visitors.StandardExpressionVisitor;
 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
@@ -36,7 +37,6 @@ import gnu.trove.set.hash.TIntHashSet;
 public abstract class Query extends Symbol {
     public static final Query[] EMPTY_ARRAY = new Query[0];
     
-    public abstract void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars);
     public abstract void checkType(TypingContext context);
     
     public Query resolve(TranslationContext context) {
@@ -160,4 +160,8 @@ public abstract class Query extends Symbol {
     public void collectRefs(TObjectIntHashMap<Object> allRefs, TIntHashSet refs) {
         accept(new CollectRefsVisitor(allRefs, refs));
     }
+
+    public void collectVars(TObjectIntHashMap<Variable> allVars, TIntHashSet vars) {
+        accept(new CollectVarsVisitor(allVars, vars));
+    }
 }
index b7b9f964bec4dd70320903f103722804791c3834..2f4d14baecfda0fa64c36b3646398066fb744aad 100644 (file)
@@ -12,9 +12,6 @@ import org.simantics.scl.compiler.elaboration.query.Query;
 import org.simantics.scl.compiler.elaboration.query.QueryVisitor;
 import org.simantics.scl.compiler.elaboration.query.compilation.ConstraintCollectionContext;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.TIntHashSet;
-
 /**
  * Query classes that may exist before resolving
  */
@@ -33,12 +30,6 @@ public abstract class PreQuery extends Query {
         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support collectConstraints.");
     }
     
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support collectVars.");
-    }
-    
     @Override
     public Query replace(ReplaceContext replaceContext) {
         throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support replace.");