]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAModule.java
SCL compiler generates line numbers to bytecode
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / ssa / SSAModule.java
index 9ca2303c00be9a349984721707ebd7d46144491d..d25038117131d3376a094b3815134d9f268708b0 100644 (file)
@@ -23,8 +23,6 @@ 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 gnu.trove.map.hash.THashMap;
 import gnu.trove.procedure.TObjectObjectProcedure;
@@ -32,7 +30,8 @@ import gnu.trove.procedure.TObjectProcedure;
 
 public class SSAModule {
     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);
@@ -108,7 +107,7 @@ public class SSAModule {
             System.out.println("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 +168,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 +195,7 @@ public class SSAModule {
         });        
     }
     
-    public void addStaticField(Tuple2 tuple) {
+    public void addStaticField(StaticField tuple) {
        staticFields.add(tuple);
     }
 
@@ -217,4 +219,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();
+    }
 }