]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/elaboration/transformations/TransformationBuilder.java
Merge "Ensure GetElementClassRequest is not constructed without elementFactory"
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / elaboration / transformations / TransformationBuilder.java
index dcb212488972f04954a6e9e13b05e734894040ea..6060315c4d3103f34933dc9e6fcee61ab2ea7233 100644 (file)
@@ -4,7 +4,7 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
-import org.simantics.scl.compiler.common.names.Name;
+import org.simantics.scl.compiler.common.names.Names;
 import org.simantics.scl.compiler.constants.Constant;
 import org.simantics.scl.compiler.elaboration.contexts.EnvironmentalContext;
 import org.simantics.scl.compiler.elaboration.contexts.TypingContext;
@@ -33,7 +33,6 @@ import org.simantics.scl.compiler.errors.Locations;
 import org.simantics.scl.compiler.internal.codegen.references.IVal;
 import org.simantics.scl.compiler.internal.elaboration.utils.ForcedClosure;
 import org.simantics.scl.compiler.top.SCLCompilerConfiguration;
-import org.simantics.scl.compiler.types.TCon;
 import org.simantics.scl.compiler.types.Type;
 import org.simantics.scl.compiler.types.Types;
 
@@ -43,12 +42,6 @@ import gnu.trove.map.hash.TObjectIntHashMap;
 import gnu.trove.set.hash.THashSet;
 
 public class TransformationBuilder {
-    private static final TCon UMap = Types.con("Unification", "UMap");
-    private static final Name createUMap = Name.create("Unification", "createUMap");
-    
-    private static final TCon Unifiable = Types.con("Unification", "Unifiable");
-    private static final Name uVar = Name.create("Unification", "uVar");
-
     private final ErrorLog errorLog;
     private final TypingContext context;
     private final UnifiableFactory unifiableFactory;
@@ -80,11 +73,11 @@ public class TransformationBuilder {
                     mappingRelation.parameterTypes[0]
             });
             mapping.umap = new Variable("map_" + mappingRelation.name.name,
-                    Types.apply(UMap, mappingRelation.parameterTypes)
+                    Types.apply(Names.Unifiable_UMap, mappingRelation.parameterTypes)
                     );
             mappings.put(mappingRelation, mapping);
             mappingStatements.add(new LetStatement(new EVariable(mapping.umap),
-                    Expressions.apply(context, Types.PROC, createUMap,
+                    Expressions.apply(context.getCompilationContext(), Types.PROC, Names.Unifiable_createUMap,
                             mappingRelation.parameterTypes[0],
                             mappingRelation.parameterTypes[1],
                             Expressions.punit())));
@@ -252,10 +245,10 @@ public class TransformationBuilder {
             int count = mappedVariableUseCount.get(variable);
             if(count > 1) {
                 Variable uniVariable = new Variable("uvar_" + variable.getName(),
-                        Types.apply(Unifiable, variable.getType()));
+                        Types.apply(Names.Unifiable_Unifiable, variable.getType()));
                 phase2Actions.add(new LetStatement(new EVariable(uniVariable), 
-                        Expressions.apply(context, Types.PROC,
-                                uVar,
+                        Expressions.apply(context.getCompilationContext(), Types.PROC,
+                                Names.Unifiable_uVar,
                                 variable.getType(),
                                 Expressions.tuple())));
                 uniVariableMap.put(variable, uniVariable);
@@ -298,7 +291,7 @@ public class TransformationBuilder {
                     new QAtom(decomposed.ruleMatchingRelation,
                             Type.EMPTY_ARRAY,
                             Expressions.vars(sourceVariables)),
-                            statementsToExpression(context, phase2Actions),
+                            statementsToExpression(context.getCompilationContext(), phase2Actions),
                             sourceVariables).compile(context)));
 
         // Enforcing statement
@@ -314,7 +307,7 @@ public class TransformationBuilder {
             for(int phase : phases.keys()) {
                 ArrayList<Query> targetQuery = phases.get(phase);
                 Expression enforcing = new EEnforce(new QConjunction(targetQuery.toArray(new Query[targetQuery.size()]))).compile(context);
-                enforcing = statementsToExpression(context, phase3Actions, enforcing);
+                enforcing = statementsToExpression(context.getCompilationContext(), phase3Actions, enforcing);
                 enforcing = new EWhen(
                         rule.location,
                         new QAtom(decomposed.ruleMatchingRelation,
@@ -349,8 +342,8 @@ public class TransformationBuilder {
             for(int phase : phases)
                 allEnforcingStatements.addAll(enforcingStatements.get(phase));
         }
-        Expression expression = statementsToExpression(context, allEnforcingStatements);
-        expression = statementsToExpression(context, mappingStatements, expression);
+        Expression expression = statementsToExpression(context.getCompilationContext(), allEnforcingStatements);
+        expression = statementsToExpression(context.getCompilationContext(), mappingStatements, expression);
         
         // Matching
         Expression result = new ERuleset(