X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.compiler%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fcompiler%2Finternal%2Fcodegen%2Fssa%2FSSAModule.java;h=d25038117131d3376a094b3815134d9f268708b0;hb=refs%2Fchanges%2F34%2F1534%2F3;hp=9ca2303c00be9a349984721707ebd7d46144491d;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAModule.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAModule.java index 9ca2303c0..d25038117 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAModule.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/ssa/SSAModule.java @@ -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 functions = new THashMap(); - ArrayList staticFields = new ArrayList(); + ArrayList staticFields = new ArrayList(); + public ArrayList closuresToGenerate = new ArrayList(); 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() { @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(); + } }