]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAModule.java
Make it possible to debug SCL compiler in production builds
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / ssa / SSAModule.java
index 9ca2303c00be9a349984721707ebd7d46144491d..7370a58c29d1b2d7428de1f51a89cac94b25a586 100644 (file)
@@ -23,16 +23,20 @@ import org.simantics.scl.compiler.internal.codegen.utils.SSALambdaLiftingContext
 import org.simantics.scl.compiler.internal.codegen.utils.SSASimplificationContext;
 import org.simantics.scl.compiler.internal.codegen.utils.SSAValidationContext;
 import org.simantics.scl.compiler.top.SCLCompilerConfiguration;
-import org.simantics.scl.compiler.types.Type;
-import org.simantics.scl.runtime.tuple.Tuple2;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import gnu.trove.map.hash.THashMap;
 import gnu.trove.procedure.TObjectObjectProcedure;
 import gnu.trove.procedure.TObjectProcedure;
 
 public class SSAModule {
+
+    private static final Logger LOGGER = LoggerFactory.getLogger(SSAModule.class);
+
     THashMap<Name, SCLConstant> functions = new THashMap<Name, SCLConstant>();
-    ArrayList<Tuple2> staticFields = new ArrayList<Tuple2>();
+    ArrayList<StaticField> staticFields = new ArrayList<StaticField>();
+    public ArrayList<SSAClosure> closuresToGenerate = new ArrayList<SSAClosure>(); 
 
     public void put(Name name, SCLConstant function) {
         functions.put(name, function);
@@ -71,11 +75,11 @@ public class SSAModule {
             try {            
                 function.getDefinition().validate(context);
             } catch(RuntimeException e) {
-                System.out.println("-- VALIDATE " + function.getName() + " ----------------");
+                LOGGER.info("-- VALIDATE " + function.getName() + " ----------------");
                 PrintingContext printingContext = new PrintingContext();
                 printingContext.setErrorMarker(context.errorMarker);
                 function.getDefinition().toString(printingContext);
-                System.out.println(printingContext.toString());
+                LOGGER.info(printingContext.toString());
                 throw e;
             }
         }
@@ -105,10 +109,10 @@ public class SSAModule {
     public void generateCode(final ModuleBuilder moduleBuilder) throws CodeBuildingException {
         final String moduleClassName = moduleBuilder.getNamingPolicy().getModuleClassName();
         if(SCLCompilerConfiguration.TRACE_METHOD_CREATION)
-            System.out.println("Create class " + moduleClassName);
+            LOGGER.info("Create class " + moduleClassName);
         final ClassBuilder classFile = new ClassBuilder(moduleBuilder, Opcodes.ACC_PUBLIC, moduleClassName,
                 "java/lang/Object");        
-        classFile.setSourceFile("_SCL_Module");
+        classFile.setSourceFile(moduleBuilder.getNamingPolicy().getModuleName());
         functions.forEachValue(new TObjectProcedure<SCLConstant>() {
             @Override
             public boolean execute(SCLConstant function) {
@@ -169,14 +173,17 @@ public class SSAModule {
         });
 
         JavaTypeTranslator javaTypeTranslator = moduleBuilder.getJavaTypeTranslator();
-        for(Tuple2 tuple : staticFields) {
-               classFile.addField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, (String)tuple.c0
-                       javaTypeTranslator.toTypeDesc((Type)tuple.c1));
+        for(StaticField tuple : staticFields) {
+               classFile.addField(Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC, tuple.name
+                       javaTypeTranslator.toTypeDesc(tuple.type));
         }
         
         classFile.addDefaultConstructor();
         
         moduleBuilder.addClass(classFile);
+        
+        for(SSAClosure closure : closuresToGenerate)
+            closure.generateCode(moduleBuilder);
     }
     
     /**
@@ -193,7 +200,7 @@ public class SSAModule {
         });        
     }
     
-    public void addStaticField(Tuple2 tuple) {
+    public void addStaticField(StaticField tuple) {
        staticFields.add(tuple);
     }
 
@@ -217,4 +224,11 @@ public class SSAModule {
         for(SCLConstant function : functions.values())
             function.saveInlinableDefinition();
     }
+
+    public void cleanup() {
+        for(SSAClosure closure : closuresToGenerate)
+            closure.cleanup();
+        for(SCLConstant constant : functions.values())
+            constant.cleanup();
+    }
 }