From: Hannu Niemistö Date: Mon, 24 Jul 2017 10:01:47 +0000 (+0300) Subject: Merge "possibleVariable into Simantics/Variables" X-Git-Tag: v1.31.0~264^2~36 X-Git-Url: https://gerrit.simantics.org/r/gitweb?p=simantics%2Fplatform.git;a=commitdiff_plain;h=80110419efddee4e5eaa0d6f3db4ba69602fb1f9;hp=21137c34eea354153dbc83b92a5be05957b48ee5 Merge "possibleVariable into Simantics/Variables" --- diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/TypeChecking.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/TypeChecking.java index 58bb98a41..52b8692d8 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/TypeChecking.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/compilation/TypeChecking.java @@ -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 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java index 918dd9fb3..2697ea08f 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRLiteral.java @@ -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 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 vars) { if(relation == SpecialCHRRelation.ASSIGN) { parameters[1].collectFreeVariables(vars); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java index 4e5670fcd..8bba6697d 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRQuery.java @@ -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 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 vars) { for(CHRLiteral literal : literals) literal.collectFreeVariables(vars); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRule.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRule.java index c668005d7..67b30b221 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRule.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRule.java @@ -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 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 vars) { head.collectFreeVariables(vars); body.collectFreeVariables(vars); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRuleset.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRuleset.java index 63a8344f2..805e781e7 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRuleset.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/CHRRuleset.java @@ -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 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 vars) { for(IncludeStatement include : includes) include.value.collectFreeVariables(vars); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AssignOp.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AssignOp.java index 5ef54ea82..730caba73 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AssignOp.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/AssignOp.java @@ -25,6 +25,4 @@ public class AssignOp extends PlanOp { variable.setVal(expression.toVal(context, w)); planContext.nextOp(w); } - - } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqBasic.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqBasic.java index 121166f6b..08b1a0726 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqBasic.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqBasic.java @@ -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 vars) { left.collectFreeVariables(vars); @@ -60,12 +53,6 @@ public class EqBasic extends Equation { right = right.checkType(context, left.getType()); } - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - left.collectRefs(allRefs, refs); - right.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { left.collectVars(allVars, vars); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqGuard.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqGuard.java index bbd464139..5dac9fce4 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqGuard.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/EqGuard.java @@ -33,11 +33,6 @@ public class EqGuard extends Equation { } } - @Override - public void forVariables(VariableProcedure procedure) { - guard.forVariables(procedure); - } - @Override public void collectFreeVariables(THashSet vars) { guard.collectFreeVariables(vars); @@ -53,11 +48,6 @@ public class EqGuard extends Equation { guard = guard.checkIgnoredType(context); } - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - guard.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { guard.collectVars(allVars, vars); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/Equation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/Equation.java index 34ef75395..ca4102c96 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/Equation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/equation/Equation.java @@ -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 vars); public abstract void collectEffects(THashSet effects); public abstract void checkType(TypingContext context); - public abstract void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs); public abstract void collectVars(TObjectIntHashMap allVars, TIntHashSet vars); public abstract void resolve(TranslationContext context); public abstract void accept(EquationVisitor visitor); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ASTExpression.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ASTExpression.java index a853dfff6..fa54f8ab2 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ASTExpression.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ASTExpression.java @@ -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 allRefs, - TIntHashSet refs) { - throw new InternalCompilerError(getClass().getSimpleName() + " does not support collectRefs."); - } - @Override final public void collectVars(TObjectIntHashMap 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) diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Assignment.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Assignment.java index 04b70deb0..cb525a9ad 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Assignment.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Assignment.java @@ -28,8 +28,4 @@ public class Assignment { pattern.setLocationDeep(loc); value.setLocationDeep(loc); } - - public void forVariables(VariableProcedure procedure) { - value.forVariables(procedure); - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Case.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Case.java index 3765fbefc..c8f0eb893 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Case.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Case.java @@ -35,10 +35,6 @@ public class Case extends Symbol { return lhs; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - value.collectRefs(allRefs, refs); - } - public void collectVars(TObjectIntHashMap 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); - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/DecoratingExpression.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/DecoratingExpression.java index 5d91fbc3c..796a41c69 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/DecoratingExpression.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/DecoratingExpression.java @@ -26,11 +26,6 @@ public abstract class DecoratingExpression extends SimplifiableExpression { super(loc); this.expression = expression; } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - expression.collectRefs(allRefs, refs); - } @Override public void collectVars(TObjectIntHashMap 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() + "."); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAmbiguous.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAmbiguous.java index 09cbcf25b..2b5c813a1 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAmbiguous.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAmbiguous.java @@ -42,20 +42,11 @@ public class EAmbiguous extends SimplifiableExpression { this.activeCount = alternatives.length; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - } - @Override public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { } - @Override - public void forVariables(VariableProcedure procedure) { - } - @Override protected void updateType() throws MatchException { throw new InternalCompilerError(); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java index 2b488068d..4065f463a 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApply.java @@ -76,13 +76,6 @@ public class EApply extends Expression { return parameters; } - - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - function.collectRefs(allRefs, refs); - for(Expression parameter : parameters) - parameter.collectRefs(allRefs, refs); - } - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApplyType.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApplyType.java index e7a9d4246..f441a1be5 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApplyType.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EApplyType.java @@ -50,21 +50,17 @@ public class EApplyType extends Expression { return parameter; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - expression.collectRefs(allRefs, refs); + public void collectVars(TObjectIntHashMap allVars, TIntHashSet vars) { + expression.collectVars(allVars, vars); } - - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAsPattern.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAsPattern.java index 305d53093..98c54844c 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAsPattern.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EAsPattern.java @@ -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 allRefs, - TIntHashSet refs) { - pattern.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EBind.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EBind.java index 196ddc90f..3bec2aaa1 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EBind.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EBind.java @@ -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 allRefs, final TIntHashSet refs) { - value.collectRefs(allRefs, refs); - in.collectRefs(allRefs, refs); - } @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRuleset.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRuleset.java index 2f8771930..a8ad1480d 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRuleset.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRuleset.java @@ -26,35 +26,29 @@ public class ECHRRuleset extends Expression { this.in = in; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - ruleset.collectRefs(allRefs, refs); - in.collectRefs(allRefs, refs); - } @Override public void collectVars(TObjectIntHashMap 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 vars) { ruleset.collectFreeVariables(vars); in.collectFreeVariables(vars); } + @Override public Expression resolve(TranslationContext context) { if(context.currentRuleset != null) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRulesetConstructor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRulesetConstructor.java index ce0385f81..734fd71b4 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRulesetConstructor.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRRulesetConstructor.java @@ -24,31 +24,27 @@ public class ECHRRulesetConstructor extends Expression { public ECHRRulesetConstructor(CHRRuleset ruleset) { this.ruleset = ruleset; } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - ruleset.collectRefs(allRefs, refs); - } + @Override public void collectVars(TObjectIntHashMap 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 vars) { ruleset.collectFreeVariables(vars); } + @Override public Expression resolve(TranslationContext context) { context.pushFrame(); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java index aa232cdb5..fbaff1200 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ECHRSelect.java @@ -38,24 +38,12 @@ public class ECHRSelect extends Expression { this.query = query; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - query.collectRefs(allRefs, refs); - expression.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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())); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EConstant.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EConstant.java index c5b4681a8..4a2e07f43 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EConstant.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EConstant.java @@ -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 allRefs, TIntHashSet refs) { - int id = allRefs.get(value); - if(id >= 0) - refs.add(id); + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { } - - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEnforce.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEnforce.java index ea657f8b1..bfaf699ed 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEnforce.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEnforce.java @@ -29,12 +29,6 @@ public class EEnforce extends SimplifiableExpression { return query; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - query.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEquations.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEquations.java index eec5a5888..bffb7f026 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEquations.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EEquations.java @@ -49,24 +49,12 @@ public class EEquations extends SimplifiableExpression { return transformer.transform(this); } - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - for(Equation equation : equations) - equation.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EError.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EError.java index fbe8cde2a..b3f4f6488 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EError.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EError.java @@ -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 allRefs, TIntHashSet refs) { + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + } + + @Override + protected void updateType() throws MatchException { + setType(Types.metaVar(Kinds.STAR)); } - - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EExternalConstant.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EExternalConstant.java index 1e8341e66..0b5678f99 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EExternalConstant.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EExternalConstant.java @@ -35,27 +35,24 @@ public class EExternalConstant extends Expression { return value; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { } - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EFieldAccess.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EFieldAccess.java index da9a7b38b..0a4d0ee16 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EFieldAccess.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EFieldAccess.java @@ -35,13 +35,6 @@ public class EFieldAccess extends SimplifiableExpression { ((EFieldAccess)parent).lastAccessor = false; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - parent.collectRefs(allRefs, refs); - accessor.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EGetConstraint.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EGetConstraint.java index fc437cfd8..8534f4624 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EGetConstraint.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EGetConstraint.java @@ -20,11 +20,6 @@ public class EGetConstraint extends SimplifiableExpression { super(loc); this.constraint = constraint; } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - } @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java index 1f3dccc3e..ea64ac034 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIf.java @@ -39,29 +39,22 @@ public class EIf extends Expression { this.else_ = else_; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - condition.collectRefs(allRefs, refs); - then_.collectRefs(allRefs, refs); - if(else_ != null) - else_.collectRefs(allRefs, refs); - } - - @Override - public void collectVars(TObjectIntHashMap allVars, - TIntHashSet vars) { - condition.collectVars(allVars, vars); + @Override + public void collectVars(TObjectIntHashMap 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIntegerLiteral.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIntegerLiteral.java index 17cf6e58e..856dcd371 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIntegerLiteral.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EIntegerLiteral.java @@ -28,11 +28,6 @@ public class EIntegerLiteral extends SimplifiableExpression { this.value = value; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambda.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambda.java index 573abfbb8..51b1f909e 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambda.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambda.java @@ -37,20 +37,15 @@ public class ELambda extends SimplifiableExpression { this(loc, new Case(new Expression[] {pat}, exp)); } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { for(Case case_ : cases) - case_.collectRefs(allRefs, refs); - } - - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambdaType.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambdaType.java index 34464fae4..b06f7b770 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambdaType.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELambdaType.java @@ -30,22 +30,18 @@ public class ELambdaType extends Expression { this.value = value; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - value.collectRefs(allRefs, refs); + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + value.collectVars(allVars, vars); + } + + @Override + protected void updateType() throws MatchException { + setType(Types.forAll(parameters, value.getType())); } - - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELet.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELet.java index de72c0c1c..7b7338a78 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELet.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELet.java @@ -36,13 +36,6 @@ public class ELet extends Expression { this.assignments = assignments; this.in = in; } - - @Override - public void collectRefs(final TObjectIntHashMap allRefs, final TIntHashSet refs) { - for(Assignment assign : assignments) - assign.value.collectRefs(allRefs, refs); - in.collectRefs(allRefs, refs); - } @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListComprehension.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListComprehension.java index 7a8b71ebb..a06100dd7 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListComprehension.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListComprehension.java @@ -31,13 +31,6 @@ public class EListComprehension extends SimplifiableExpression { this.qualifier = qualifier; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - head.collectRefs(allRefs, refs); - qualifier.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListLiteral.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListLiteral.java index d8d5f7665..d2a1d3509 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListLiteral.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EListLiteral.java @@ -36,13 +36,6 @@ public class EListLiteral extends SimplifiableExpression { public Expression[] getComponents() { return components; } - - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - for(Expression component : components) - component.collectRefs(allRefs, refs); - } @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELiteral.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELiteral.java index 0d9d844b6..14bd02344 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELiteral.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ELiteral.java @@ -39,25 +39,22 @@ public class ELiteral extends Expression { return value; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { } - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java index a7a726879..0ca1d5442 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EMatch.java @@ -41,43 +41,36 @@ public class EMatch extends Expression { this.cases = cases; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { for(Expression s : scrutinee) - s.collectRefs(allRefs, refs); - for(Case case_ : cases) - case_.collectRefs(allRefs, refs); - } - - @Override - public void collectVars(TObjectIntHashMap 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 rows = new ArrayList(cases.length); + for(Case case_ : cases) + rows.add(new Row(case_.patterns, case_.value)); - @Override - public IVal toVal(CompilationContext context, CodeWriter w) { - ArrayList rows = new ArrayList(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 allRefs, - TIntHashSet refs) { - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java index b9e55d849..1a133b6f9 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ERuleset.java @@ -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 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 allVars, TIntHashSet vars) { @@ -169,7 +152,7 @@ public class ERuleset extends SimplifiableExpression { } in.collectVars(allVars, vars); } - + @Override public void collectEffects(THashSet 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESelect.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESelect.java index 34aca4adc..ce4d66bd7 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESelect.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESelect.java @@ -45,13 +45,6 @@ public class ESelect extends SimplifiableExpression { this.query = query; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - expression.collectRefs(allRefs, refs); - query.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLambda.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLambda.java index 91de49eb2..8f59b3b44 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLambda.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLambda.java @@ -55,17 +55,13 @@ public class ESimpleLambda extends Expression { this.effect = effect; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - value.collectRefs(allRefs, refs); + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + value.collectVars(allVars, vars); } - - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLet.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLet.java index 0a5d67651..422bbea11 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLet.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ESimpleLet.java @@ -45,28 +45,23 @@ public class ESimpleLet extends Expression { this.in = in; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - value.collectRefs(allRefs, refs); - in.collectRefs(allRefs, refs); + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + value.collectVars(allVars, vars); + in.collectVars(allVars, vars); } - - @Override - public void collectVars(TObjectIntHashMap 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETransformation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETransformation.java index e00514151..346e46cd3 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETransformation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETransformation.java @@ -30,17 +30,6 @@ public class ETransformation extends SimplifiableExpression { this.seed = seed; } - @Override - public void collectRefs(TObjectIntHashMap 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 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETypeAnnotation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETypeAnnotation.java index 568b3c108..10c8e6f7a 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETypeAnnotation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/ETypeAnnotation.java @@ -28,20 +28,16 @@ public class ETypeAnnotation extends SimplifiableExpression { this.type = type; } - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - value.collectRefs(allRefs, refs); + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + value.collectVars(allVars, vars); } - - @Override - public void collectVars(TObjectIntHashMap 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 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVariable.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVariable.java index 761ed0f2f..44c03a2ac 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVariable.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EVariable.java @@ -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 allRefs, TIntHashSet refs) { + @Override + public void collectVars(TObjectIntHashMap allVars, + TIntHashSet vars) { + int id = allVars.get(variable); + if(id >= 0) + vars.add(id); } - - @Override - public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EViewPattern.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EViewPattern.java index 4997fa592..a2a0a02c5 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EViewPattern.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EViewPattern.java @@ -26,23 +26,11 @@ public class EViewPattern extends Expression { this.pattern = pattern; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { - expression.collectRefs(allRefs, refs); - pattern.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EWhen.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EWhen.java index d8b42fca4..a9fd0367b 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EWhen.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/EWhen.java @@ -43,13 +43,6 @@ public class EWhen extends SimplifiableExpression { this.variables = variables; } - @Override - public void collectRefs(TObjectIntHashMap allRefs, - TIntHashSet refs) { - query.collectRefs(allRefs, refs); - action.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Expression.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Expression.java index d3e226cf4..221bc8067 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Expression.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/Expression.java @@ -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 constraints = new ArrayList(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 allRefs, TIntHashSet refs); - public abstract void collectVars(TObjectIntHashMap allVars, TIntHashSet vars); - public abstract void forVariables(VariableProcedure procedure); - - public Expression decomposeMatching() { + public final void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs) { + accept(new CollectRefsVisitor(allRefs, refs)); + } + + public abstract void collectVars(TObjectIntHashMap allVars, TIntHashSet vars); + + public final void forVariableUses(VariableProcedure procedure) { + accept(new ForVariablesUsesVisitor(procedure)); + } + + public Expression decomposeMatching() { return this; } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpression.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpression.java index fa67162d5..f1e62b2f7 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpression.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpression.java @@ -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); - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java index 992a9939e..1e2cd05c4 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/GuardedExpressionGroup.java @@ -25,16 +25,6 @@ public class GuardedExpressionGroup extends Expression { this.expressions = expressions; } - @Override - public void collectRefs(TObjectIntHashMap 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 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java index d75080095..3cdb32b72 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/StandardExpressionVisitor.java @@ -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 diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/ExpressionAccessor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/ExpressionAccessor.java index 793bd0065..12c9a9170 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/ExpressionAccessor.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/ExpressionAccessor.java @@ -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 allRefs, - TIntHashSet refs) { - fieldName.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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); - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/FieldAccessor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/FieldAccessor.java index 0f0d8417f..21c892ce4 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/FieldAccessor.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/FieldAccessor.java @@ -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 allRefs, - TIntHashSet refs) { - } - public void collectVars(TObjectIntHashMap 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); } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/IdAccessor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/IdAccessor.java index 9cb37e58f..920a81606 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/IdAccessor.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/IdAccessor.java @@ -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) { - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/StringAccessor.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/StringAccessor.java index d08a4383f..ac038d12c 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/StringAccessor.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/accessor/StringAccessor.java @@ -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) { - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListAssignment.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListAssignment.java index b1efd2ca9..1283cc059 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListAssignment.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListAssignment.java @@ -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 allRefs, - TIntHashSet refs) { - value.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGenerator.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGenerator.java index 90b68c5dd..db12689c8 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGenerator.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGenerator.java @@ -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 allRefs, - TIntHashSet refs) { - value.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGuard.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGuard.java index 626bd48cb..2fe49150f 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGuard.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGuard.java @@ -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 allRefs, - TIntHashSet refs) { - condition.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListQualifier.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListQualifier.java index 939e6fd66..47c9cf6d8 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListQualifier.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListQualifier.java @@ -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 allRefs, TIntHashSet refs); public abstract void collectVars(TObjectIntHashMap allVars, TIntHashSet vars); public abstract void collectFreeVariables(THashSet 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); } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java index f56820d2a..a802a80ac 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListSeq.java @@ -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 allRefs, - TIntHashSet refs) { - a.collectRefs(allRefs, refs); - b.collectRefs(allRefs, refs); - } @Override public void collectVars(TObjectIntHashMap 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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListThen.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListThen.java index fbc153226..e1061564f 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListThen.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListThen.java @@ -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 allRefs, - TIntHashSet refs) { - left.collectRefs(allRefs, refs); - transformer.collectRefs(allRefs, refs); - if(by != null) - by.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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 index 000000000..366dc514b --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/CollectRefsVisitor.java @@ -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 allRefs; + private final TIntHashSet refs; + + public CollectRefsVisitor(TObjectIntHashMap 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 index 000000000..b4d1fd4fe --- /dev/null +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/visitors/ForVariablesUsesVisitor.java @@ -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); + } +} diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractCombiner.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractCombiner.java index 53eb780fd..459711a8d 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractCombiner.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractCombiner.java @@ -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 allRefs, TIntHashSet refs) { - for(Query query : queries) - query.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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); - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractModifier.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractModifier.java index e04246e40..421bf833e 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractModifier.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAbstractModifier.java @@ -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 allRefs, - TIntHashSet refs) { - query.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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); - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java index fd7dacb79..c988aed56 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QAtom.java @@ -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 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 allRefs, - TIntHashSet refs) { - collectRefs(relation, allRefs, refs); - for(Expression parameter : parameters) - parameter.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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> result) { int phase = relation.getPhase(); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QExists.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QExists.java index 5356eccc2..293c8bf70 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QExists.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QExists.java @@ -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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java index 62ff9583c..d148339a4 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QIf.java @@ -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 allRefs, TIntHashSet refs) { - condition.collectRefs(allRefs, refs); - thenQuery.collectRefs(allRefs, refs); - elseQuery.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QMapping.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QMapping.java index ca9378c89..08d72563e 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QMapping.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/QMapping.java @@ -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 allRefs, - TIntHashSet refs) { - for(Expression parameter : parameters) - parameter.collectRefs(allRefs, refs); - } - @Override public void collectVars(TObjectIntHashMap 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) { diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/Query.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/Query.java index 0ac54e22e..7b610756a 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/Query.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/Query.java @@ -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 vars); - public abstract void collectRefs(TObjectIntHashMap allRefs, TIntHashSet refs); public abstract void collectVars(TObjectIntHashMap 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> splitToPhases() { TIntObjectHashMap> result = new TIntObjectHashMap>(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 allRefs, TIntHashSet refs) { + accept(new CollectRefsVisitor(allRefs, refs)); + } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/pre/PreQuery.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/pre/PreQuery.java index ee96433d3..859690ec8 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/pre/PreQuery.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/query/pre/PreQuery.java @@ -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 allRefs, - TIntHashSet refs) { - throw new InternalCompilerError(location, getClass().getSimpleName() + " does not support collectRefs."); - } - @Override public void collectVars(TObjectIntHashMap 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."); - } } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java index 42eb9530d..b404b1c53 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/relations/TransitiveClosureRelation.java @@ -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; diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/TransformationBuilder.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/TransformationBuilder.java index 6060315c4..50958221c 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/TransformationBuilder.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/TransformationBuilder.java @@ -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); diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/UnifiableFactory.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/UnifiableFactory.java index 75b083f0c..06da23562 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/UnifiableFactory.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/UnifiableFactory.java @@ -186,7 +186,7 @@ public class UnifiableFactory { // Default action final THashSet dependences = new THashSet(); - expression.forVariables(new VariableProcedure() { + expression.forVariableUses(new VariableProcedure() { @Override public void execute(long location, Variable variable) { diff --git a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java index 0c0d8682a..3ce1b0158 100644 --- a/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java +++ b/bundles/org.simantics.tests.modelled/src/org/simantics/tests/modelled/utils/ModelledSTSTest.java @@ -99,7 +99,8 @@ public class ModelledSTSTest { } public List run(List 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(); }