]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/expressions/list/ListGenerator.java
(refs #7614) Assign type-checked expression back to list comprehension
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / expressions / list / ListGenerator.java
index 59f45bb365c0118f905add1a30bdafcf0e312ce2..67076789e5272368a14e5f386aeb93bf690f4821 100644 (file)
@@ -1,5 +1,7 @@
 package org.simantics.scl.compiler.elaboration.expressions.list;
 
+import java.util.Set;
+
 import org.simantics.scl.compiler.elaboration.contexts.SimplificationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TranslationContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
@@ -12,10 +14,6 @@ import org.simantics.scl.compiler.types.TMetaVar;
 import org.simantics.scl.compiler.types.Types;
 import org.simantics.scl.compiler.types.kinds.Kinds;
 
-import gnu.trove.map.hash.TObjectIntHashMap;
-import gnu.trove.set.hash.THashSet;
-import gnu.trove.set.hash.TIntHashSet;
-
 public class ListGenerator extends ListQualifier {
     public Expression pattern;
     public Expression value;
@@ -28,20 +26,8 @@ public class ListGenerator extends ListQualifier {
     @Override
     public void checkType(TypingContext context) {
         TMetaVar componentType = Types.metaVar(Kinds.STAR);
-        value.checkType(context, Types.apply(Types.LIST, componentType));
-        pattern.checkTypeAsPattern(context, componentType);
-    }
-
-    @Override
-    public void collectVars(TObjectIntHashMap<Variable> allVars,
-            TIntHashSet vars) {
-        value.collectVars(allVars, vars);
-    }
-
-    @Override
-    public void collectFreeVariables(THashSet<Variable> vars) {
-        value.collectFreeVariables(vars);
-        pattern.collectFreeVariables(vars);
+        value = value.checkType(context, Types.apply(Types.LIST, componentType));
+        pattern = pattern.checkTypeAsPattern(context, componentType);
     }
 
     @Override
@@ -49,7 +35,7 @@ public class ListGenerator extends ListQualifier {
         if(pattern instanceof EVariable)
             return new CompiledQualifier(value, pattern);
         else {
-            THashSet<Variable> variables = pattern.getFreeVariables();
+            Set<Variable> variables = pattern.getFreeVariables();
             Variable[] variableArray = variables.toArray(new Variable[variables.size()]);
             Expression[] variableExps = new Expression[variableArray.length];
             for(int i=0;i<variableArray.length;++i)