]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/codegen/utils/MethodBuilderBase.java
(refs #7250) Merging master, minor CHR bugfixes
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / internal / codegen / utils / MethodBuilderBase.java
index 7fb83fb49e3fd210dddd0ed7228a9febdaa792da..bd1a911a15f4ec4fe2342284baec23414da7a1a2 100644 (file)
@@ -25,6 +25,10 @@ public class MethodBuilderBase {
         }
         methodVisitor.visitCode();
     }
+    
+    public LocalVariable getThis(TypeDesc type) {
+        return new LocalVariable(0, type);
+    }
 
     public void loadConstant(boolean value) {
         if(value)
@@ -379,6 +383,7 @@ public class MethodBuilderBase {
     public void invokeInterface(String className, String methodName,
             TypeDesc ret, TypeDesc[] params) {
         checkClassName(className);
+        checkParameters(params);
         methodVisitor.visitMethodInsn(Opcodes.INVOKEINTERFACE, className, methodName,
                 MethodDesc.forArguments(ret, params).getDescriptor(), true);
     }
@@ -391,6 +396,7 @@ public class MethodBuilderBase {
     public void invokeVirtual(String className, String methodName,
             TypeDesc ret, TypeDesc[] params) {
         checkClassName(className);
+        checkParameters(params);
         methodVisitor.visitMethodInsn(Opcodes.INVOKEVIRTUAL, className, methodName,
                 MethodDesc.forArguments(ret, params).getDescriptor(), false);
     }
@@ -402,6 +408,7 @@ public class MethodBuilderBase {
 
     public void invokeConstructor(String className, TypeDesc[] params) {
         checkClassName(className);
+        checkParameters(params);
         methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, className, "<init>",
                 MethodDesc.forArguments(TypeDesc.VOID, params).getDescriptor(), false);
     }
@@ -417,6 +424,7 @@ public class MethodBuilderBase {
     public void invokeStatic(String className, String methodName, TypeDesc ret,
             TypeDesc[] params) {
         checkClassName(className);
+        checkParameters(params);
         methodVisitor.visitMethodInsn(Opcodes.INVOKESTATIC, className, methodName,
                 MethodDesc.forArguments(ret, params).getDescriptor(), false);
     }
@@ -606,4 +614,10 @@ public class MethodBuilderBase {
         else
             methodVisitor.visitLookupSwitchInsn(defaultLabel, values, labels);
     }
+    
+    private static void checkParameters(TypeDesc[] params) {
+        for(TypeDesc param : params)
+            if(param.equals(TypeDesc.VOID))
+                throw new IllegalArgumentException();
+    }
 }