diff --git a/src/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java b/src/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java index 5c9df9e1..ffa6a4ae 100644 --- a/src/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java +++ b/src/de/dhbwstuttgart/bytecode/BytecodeGenMethod.java @@ -177,9 +177,15 @@ public class BytecodeGenMethod implements StatementVisitor { false); } binary.lexpr.accept(this); + if(!getResolvedType(binary.lexpr.getType()).equals(typeOfBinary)) doCast(getResolvedType(binary.lexpr.getType()), typeOfBinary); + binary.rexpr.accept(this); + + if(!getResolvedType(binary.rexpr.getType()).equals(typeOfBinary)) + doCast(getResolvedType(binary.rexpr.getType()), typeOfBinary); + switch (binary.operation.toString()) { case "ADD": doVisitAddOpInsn(typeOfBinary); diff --git a/test/bytecode/OpTest.java b/test/bytecode/OpTest.java index ebdd6a1b..4ca3041f 100644 --- a/test/bytecode/OpTest.java +++ b/test/bytecode/OpTest.java @@ -45,51 +45,51 @@ public class OpTest { assertEquals(Opcodes.ACC_PUBLIC, classToTest.getModifiers()); } - @Test - public void testNumberOfMethods() { - int numOfMeth = classToTest.getDeclaredMethods().length; - assertEquals(5, numOfMeth); - } - - @Test - public void testAddString() throws NoSuchMethodException, SecurityException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException, InstantiationException { - Method addString = classToTest.getDeclaredMethod("addString", String.class,String.class); - String result = (String) addString.invoke(instanceOfClass, "Byte","Code"); - assertEquals("ByteCode", result); - } - - @Test - public void testAddInt() throws NoSuchMethodException, SecurityException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException, InstantiationException { - Method addInt = classToTest.getDeclaredMethod("addInt", Integer.class,Integer.class); - Integer result = (Integer) addInt.invoke(instanceOfClass, 7,3); - assertEquals(10, result); - } - - @Test - public void testAddLong() throws NoSuchMethodException, SecurityException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException, InstantiationException { - Method addLong = classToTest.getDeclaredMethod("addLong", Long.class,Long.class); - Long result = (Long) addLong.invoke(instanceOfClass, 7L,3L); - assertEquals(10L, result); - } - - @Test - public void testAddFloat() throws NoSuchMethodException, SecurityException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException, InstantiationException { - Method addFloat = classToTest.getDeclaredMethod("addFloat", Float.class,Float.class); - Float result = (Float) addFloat.invoke(instanceOfClass, 7f,3f); - assertEquals(10f, result); - } - - @Test - public void testAddDouble() throws NoSuchMethodException, SecurityException, IllegalAccessException, - IllegalArgumentException, InvocationTargetException, InstantiationException { - Method addDouble = classToTest.getDeclaredMethod("addDouble", Double.class,Double.class); - Double result = (Double) addDouble.invoke(instanceOfClass, 7.0,3.0); - assertEquals(10.0, result); - } +// @Test +// public void testNumberOfMethods() { +// int numOfMeth = classToTest.getDeclaredMethods().length; +// assertEquals(5, numOfMeth); +// } +// +// @Test +// public void testAddString() throws NoSuchMethodException, SecurityException, IllegalAccessException, +// IllegalArgumentException, InvocationTargetException, InstantiationException { +// Method addString = classToTest.getDeclaredMethod("addString", String.class,String.class); +// String result = (String) addString.invoke(instanceOfClass, "Byte","Code"); +// assertEquals("ByteCode", result); +// } +// +// @Test +// public void testAddInt() throws NoSuchMethodException, SecurityException, IllegalAccessException, +// IllegalArgumentException, InvocationTargetException, InstantiationException { +// Method addInt = classToTest.getDeclaredMethod("addInt", Integer.class,Integer.class); +// Integer result = (Integer) addInt.invoke(instanceOfClass, 7,3); +// assertEquals(10, result); +// } +// +// @Test +// public void testAddLong() throws NoSuchMethodException, SecurityException, IllegalAccessException, +// IllegalArgumentException, InvocationTargetException, InstantiationException { +// Method addLong = classToTest.getDeclaredMethod("addLong", Long.class,Long.class); +// Long result = (Long) addLong.invoke(instanceOfClass, 7L,3L); +// assertEquals(10L, result); +// } +// +// @Test +// public void testAddFloat() throws NoSuchMethodException, SecurityException, IllegalAccessException, +// IllegalArgumentException, InvocationTargetException, InstantiationException { +// Method addFloat = classToTest.getDeclaredMethod("addFloat", Float.class,Float.class); +// Float result = (Float) addFloat.invoke(instanceOfClass, 7f,3f); +// assertEquals(10f, result); +// } +// +// @Test +// public void testAddDouble() throws NoSuchMethodException, SecurityException, IllegalAccessException, +// IllegalArgumentException, InvocationTargetException, InstantiationException { +// Method addDouble = classToTest.getDeclaredMethod("addDouble", Double.class,Double.class); +// Double result = (Double) addDouble.invoke(instanceOfClass, 7.0,3.0); +// assertEquals(10.0, result); +// } // @Test // public void testAddIntLong() throws NoSuchMethodException, SecurityException, IllegalAccessException, @@ -106,23 +106,25 @@ public class OpTest { // Double result = (Double) add.invoke(instanceOfClass, 7d,3L); // assertEquals(10d, result); // } -// + // @Test // public void testAddIntShort() throws NoSuchMethodException, SecurityException, IllegalAccessException, // IllegalArgumentException, InvocationTargetException, InstantiationException { // Method add = classToTest.getDeclaredMethod("add", Integer.class,Short.class); -// Integer result = (Integer) add.invoke(instanceOfClass, 7,3); +// Short s = 3; +// Integer result = (Integer) add.invoke(instanceOfClass, 7,s); // assertEquals(10, result); // } -// + // @Test // public void testAddIntByte() throws NoSuchMethodException, SecurityException, IllegalAccessException, // IllegalArgumentException, InvocationTargetException, InstantiationException { // Method add = classToTest.getDeclaredMethod("add", Integer.class,Byte.class); -// Integer result = (Integer) add.invoke(instanceOfClass, 7,3); +// Byte b = 3; +// Integer result = (Integer) add.invoke(instanceOfClass, 7,b); // assertEquals(10, result); // } -// + // @Test // public void testAddDFloat() throws NoSuchMethodException, SecurityException, IllegalAccessException, // IllegalArgumentException, InvocationTargetException, InstantiationException { @@ -130,7 +132,7 @@ public class OpTest { // Double result = (Double) add.invoke(instanceOfClass, 7f,3d); // assertEquals(10d, result); // } -// + // @Test // public void testAddIntD() throws NoSuchMethodException, SecurityException, IllegalAccessException, // IllegalArgumentException, InvocationTargetException, InstantiationException { @@ -138,20 +140,22 @@ public class OpTest { // Double result = (Double) add.invoke(instanceOfClass, 7,3d); // assertEquals(10d, result); // } -// + // @Test // public void testAddShortD() throws NoSuchMethodException, SecurityException, IllegalAccessException, // IllegalArgumentException, InvocationTargetException, InstantiationException { // Method add = classToTest.getDeclaredMethod("add", Short.class,Double.class); -// Double result = (Double) add.invoke(instanceOfClass, 7,3d); -// assertEquals(10d, result); -// } -// -// @Test -// public void testAddByteD() throws NoSuchMethodException, SecurityException, IllegalAccessException, -// IllegalArgumentException, InvocationTargetException, InstantiationException { -// Method add = classToTest.getDeclaredMethod("add", Byte.class,Double.class); -// Double result = (Double) add.invoke(instanceOfClass, 7,3d); +// Short s = 7; +// Double result = (Double) add.invoke(instanceOfClass, s,3d); // assertEquals(10d, result); // } + + @Test + public void testAddByteD() throws NoSuchMethodException, SecurityException, IllegalAccessException, + IllegalArgumentException, InvocationTargetException, InstantiationException { + Method add = classToTest.getDeclaredMethod("add", Byte.class,Double.class); + Byte b = 7; + Double result = (Double) add.invoke(instanceOfClass, b,3d); + assertEquals(10d, result); + } } diff --git a/test/bytecode/javFiles/Op.jav b/test/bytecode/javFiles/Op.jav index f36b790d..37de3881 100644 --- a/test/bytecode/javFiles/Op.jav +++ b/test/bytecode/javFiles/Op.jav @@ -8,26 +8,26 @@ import java.lang.Short; import java.lang.Byte; public class Op { - addInt(Integer a, Integer b) { - Integer c = a+b; - return c; - } - addString(String a, String b) { - String c = a+b; - return c; - } - addLong(Long a, Long b) { - Long c = a+b; - return c; - } - addFloat(Float a, Float b) { - Float c = a+b; - return c; - } - addDouble(Double a, Double b) { - Double c = a+b; - return c; - } +// addInt(Integer a, Integer b) { +// Integer c = a+b; +// return c; +// } +// addString(String a, String b) { +// String c = a+b; +// return c; +// } +// addLong(Long a, Long b) { +// Long c = a+b; +// return c; +// } +// addFloat(Float a, Float b) { +// Float c = a+b; +// return c; +// } +// addDouble(Double a, Double b) { +// Double c = a+b; +// return c; +// } // subInt(Integer a, Integer b) { // Integer c = a-b; @@ -55,7 +55,7 @@ public class Op { // Double c = a+b; // return c; // } -// + // add(Integer a, Short b) { // Integer c = a+b; // return c; @@ -65,7 +65,7 @@ public class Op { // Integer c = a+b; // return c; // } -// + // add(Float a, Double b) { // Double c = a+b; // return c; @@ -75,14 +75,14 @@ public class Op { // Double c = a+b; // return c; // } -// + // add(Short a, Double b) { // Double c = a+b; // return c; // } -// -// add(Byte a, Double b) { -// Double c = a+b; -// return c; -// } + + add(Byte a, Double b) { + Double c = a+b; + return c; + } } \ No newline at end of file