]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/java/JavaModule.java
Builtins and JavaModule SCL modules may leak memory
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / java / JavaModule.java
old mode 100755 (executable)
new mode 100644 (file)
index 39c2dbe..aeec9a3
@@ -23,7 +23,7 @@ import org.simantics.scl.compiler.types.kinds.Kinds;
 
 public class JavaModule extends ConcreteModule {
 
 
 public class JavaModule extends ConcreteModule {
 
-    public static final JavaModule INSTANCE = new JavaModule();
+    public static JavaModule INSTANCE = new JavaModule();
     
     public static final String MODULE_NAME = "JavaBuiltin";
 
     
     public static final String MODULE_NAME = "JavaBuiltin";
 
@@ -56,6 +56,16 @@ public class JavaModule extends ConcreteModule {
         addValue("sor", JavaMathOperation.SOR);
         addValue("sxor", JavaMathOperation.SXOR);
         
         addValue("sor", JavaMathOperation.SOR);
         addValue("sxor", JavaMathOperation.SXOR);
         
+        addValue("badd", JavaMathOperation.BADD);
+        addValue("bsub", JavaMathOperation.BSUB);
+        addValue("bmul", JavaMathOperation.BMUL);
+        addValue("bdiv", JavaMathOperation.BDIV);
+        addValue("brem", JavaMathOperation.BREM);
+        addValue("bneg", JavaMathOperation.BNEG);
+        addValue("band", JavaMathOperation.BAND);
+        addValue("bor", JavaMathOperation.BOR);
+        addValue("bxor", JavaMathOperation.BXOR);
+        
         // Conversions
         for(JavaConversionOperation operation : JavaConversionOperation.OPCODES)
             addValue(operation.getMnemonic(), operation);
         // Conversions
         for(JavaConversionOperation operation : JavaConversionOperation.OPCODES)
             addValue(operation.getMnemonic(), operation);
@@ -75,6 +85,13 @@ public class JavaModule extends ConcreteModule {
         addValue("lcmpgt", new JavaComparisonOperation(">", Types.LONG));
         addValue("lcmpge", new JavaComparisonOperation(">=", Types.LONG));     
         
         addValue("lcmpgt", new JavaComparisonOperation(">", Types.LONG));
         addValue("lcmpge", new JavaComparisonOperation(">=", Types.LONG));     
         
+        addValue("bcmpeq", new JavaComparisonOperation("==", Types.BYTE));
+        addValue("bcmpne", new JavaComparisonOperation("!=", Types.BYTE));
+        addValue("bcmplt", new JavaComparisonOperation("<", Types.BYTE));
+        addValue("bcmple", new JavaComparisonOperation("<=", Types.BYTE));
+        addValue("bcmpgt", new JavaComparisonOperation(">", Types.BYTE));
+        addValue("bcmpge", new JavaComparisonOperation(">=", Types.BYTE));
+        
         addValue("scmpeq", new JavaComparisonOperation("==", Types.SHORT));
         addValue("scmpne", new JavaComparisonOperation("!=", Types.SHORT));
         addValue("scmplt", new JavaComparisonOperation("<", Types.SHORT));
         addValue("scmpeq", new JavaComparisonOperation("==", Types.SHORT));
         addValue("scmpne", new JavaComparisonOperation("!=", Types.SHORT));
         addValue("scmplt", new JavaComparisonOperation("<", Types.SHORT));
@@ -112,7 +129,6 @@ public class JavaModule extends ConcreteModule {
         addValue("ifge", new JavaComparisonToZeroOperation(">="));
         
         TVar A = Types.var(Kinds.STAR);
         addValue("ifge", new JavaComparisonToZeroOperation(">="));
         
         TVar A = Types.var(Kinds.STAR);
-        TVar B = Types.var(Kinds.STAR);
         
         addValue("unsafeCoerce", UnsafeCoerce.INSTANCE);
         addValue("equals", new JavaMethod(true, 
         
         addValue("unsafeCoerce", UnsafeCoerce.INSTANCE);
         addValue("equals", new JavaMethod(true, 
@@ -121,6 +137,8 @@ public class JavaModule extends ConcreteModule {
                 "java/lang/Object", "hashCode", Types.NO_EFFECTS, Types.INTEGER, A));
         addValue("toString", new JavaMethod(true, 
                 "java/lang/Object", "toString", Types.NO_EFFECTS, Types.STRING, A));
                 "java/lang/Object", "hashCode", Types.NO_EFFECTS, Types.INTEGER, A));
         addValue("toString", new JavaMethod(true, 
                 "java/lang/Object", "toString", Types.NO_EFFECTS, Types.STRING, A));
+        
+        setParentClassLoader(getClass().getClassLoader());
     }
     
     static Expression createLiteral(FunctionValue value) {
     }
     
     static Expression createLiteral(FunctionValue value) {
@@ -129,6 +147,9 @@ public class JavaModule extends ConcreteModule {
             result = new EApplyType(result, var);
         return result;
     }
             result = new EApplyType(result, var);
         return result;
     }
-    
+
+    public static void flush() {
+       INSTANCE = new JavaModule();
+    }
 }
 
 }