LDC2_W fuer Long verwendet. Tests bereinigt.
This commit is contained in:
parent
5029cca0f1
commit
deb632050a
@ -340,7 +340,7 @@ public class BytecodeGenMethod implements StatementVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void doVisitRelOpInsn(Operator op, String typeOfBinary, Label branchLabel, Label endLabel) {
|
private void doVisitRelOpInsn(Operator op, String typeOfBinary, Label branchLabel, Label endLabel) {
|
||||||
|
System.out.println("TypeOfBinary: " + typeOfBinary);
|
||||||
switch (typeOfBinary) {
|
switch (typeOfBinary) {
|
||||||
case "java/lang/Long":
|
case "java/lang/Long":
|
||||||
mv.visitInsn(Opcodes.LCMP);
|
mv.visitInsn(Opcodes.LCMP);
|
||||||
@ -970,6 +970,7 @@ public class BytecodeGenMethod implements StatementVisitor {
|
|||||||
public void visit(Literal literal) {
|
public void visit(Literal literal) {
|
||||||
Object value = literal.value;
|
Object value = literal.value;
|
||||||
String typeOfLiteral = getResolvedType(literal.getType());
|
String typeOfLiteral = getResolvedType(literal.getType());
|
||||||
|
System.out.println("typeOfLiteral :=> "+ typeOfLiteral);
|
||||||
// Der Wert des Literals wird auf den Stack geladen und
|
// Der Wert des Literals wird auf den Stack geladen und
|
||||||
// geboxt, wenn es nötig ist.
|
// geboxt, wenn es nötig ist.
|
||||||
loadValue(typeOfLiteral, value, false);
|
loadValue(typeOfLiteral, value, false);
|
||||||
@ -1118,8 +1119,10 @@ public class BytecodeGenMethod implements StatementVisitor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void visitLongLiteral(Long value, boolean isLong) {
|
private void visitLongLiteral(Long value, boolean isLong) {
|
||||||
if (value < Math.pow(2, 15) || (value >= -Math.pow(2, 15)) && value < -128) {
|
if (value == 0) {
|
||||||
visitShortLiteral(value.shortValue(), isLong);
|
mv.visitInsn(Opcodes.LCONST_0);
|
||||||
|
} else if (value == 1) {
|
||||||
|
mv.visitInsn(Opcodes.LCONST_1);
|
||||||
} else {
|
} else {
|
||||||
mv.visitLdcInsn(value);
|
mv.visitLdcInsn(value);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@ package bytecode;
|
|||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
|
|
||||||
@ -33,8 +34,10 @@ public class BinaryTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() {
|
public void test() throws Exception {
|
||||||
fail("Not yet implemented");
|
Method m2 = classToTest.getDeclaredMethod("m2", Integer.class,Integer.class);
|
||||||
|
Integer res = (Integer) m2.invoke(instanceOfClass, 2,3);
|
||||||
|
assertEquals(6, res);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -35,10 +35,10 @@ public class FacTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void test() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
public void testInteger() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
Method getFac = classToTest.getDeclaredMethod("getFac", Integer.class);
|
Method getFac = classToTest.getDeclaredMethod("getFac", Integer.class);
|
||||||
Double result = (Double) getFac.invoke(instanceOfClass,3);
|
Integer result = (Integer) getFac.invoke(instanceOfClass,3);
|
||||||
assertEquals(result, 6.0);
|
assertEquals(result, 6);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -16,26 +16,15 @@ public class GenTest {
|
|||||||
private static String path;
|
private static String path;
|
||||||
private static File fileToTest;
|
private static File fileToTest;
|
||||||
private static JavaTXCompiler compiler;
|
private static JavaTXCompiler compiler;
|
||||||
private static ClassLoader loader;
|
|
||||||
private static Class<?> classToTest;
|
|
||||||
private static String pathToClassFile;
|
private static String pathToClassFile;
|
||||||
private static Object instanceOfClass;
|
|
||||||
|
|
||||||
@BeforeClass
|
@Test
|
||||||
public static void setUpBeforeClass() throws Exception {
|
public void generateBC() throws Exception {
|
||||||
path = System.getProperty("user.dir")+"/test/bytecode/javFiles/Gen.jav";
|
path = System.getProperty("user.dir")+"/test/bytecode/javFiles/Gen.jav";
|
||||||
fileToTest = new File(path);
|
fileToTest = new File(path);
|
||||||
compiler = new JavaTXCompiler(fileToTest);
|
compiler = new JavaTXCompiler(fileToTest);
|
||||||
pathToClassFile = System.getProperty("user.dir")+"/testBytecode/generatedBC/";
|
pathToClassFile = System.getProperty("user.dir")+"/testBytecode/generatedBC/";
|
||||||
compiler.generateBytecode(pathToClassFile);
|
compiler.generateBytecode(pathToClassFile);
|
||||||
loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)});
|
|
||||||
classToTest = loader.loadClass("Gen");
|
|
||||||
instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
fail("Not yet implemented");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,41 +0,0 @@
|
|||||||
package bytecode;
|
|
||||||
|
|
||||||
import static org.junit.Assert.*;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLClassLoader;
|
|
||||||
|
|
||||||
import org.junit.BeforeClass;
|
|
||||||
import org.junit.Test;
|
|
||||||
|
|
||||||
import de.dhbwstuttgart.core.JavaTXCompiler;
|
|
||||||
|
|
||||||
public class StaticTest {
|
|
||||||
|
|
||||||
private static String path;
|
|
||||||
private static File fileToTest;
|
|
||||||
private static JavaTXCompiler compiler;
|
|
||||||
private static ClassLoader loader;
|
|
||||||
private static Class<?> classToTest;
|
|
||||||
private static String pathToClassFile;
|
|
||||||
private static Object instanceOfClass;
|
|
||||||
|
|
||||||
@BeforeClass
|
|
||||||
public static void setUpBeforeClass() throws Exception {
|
|
||||||
path = System.getProperty("user.dir")+"/test/bytecode/javFiles/StaticM.jav";
|
|
||||||
fileToTest = new File(path);
|
|
||||||
compiler = new JavaTXCompiler(fileToTest);
|
|
||||||
pathToClassFile = System.getProperty("user.dir")+"/testBytecode/generatedBC/";
|
|
||||||
compiler.generateBytecode(pathToClassFile);
|
|
||||||
loader = new URLClassLoader(new URL[] {new URL("file://" + pathToClassFile)});
|
|
||||||
classToTest = loader.loadClass("StaticM");
|
|
||||||
instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test() {
|
|
||||||
fail("Not yet implemented");
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -17,53 +17,15 @@ public class Tph3Test {
|
|||||||
private static String path;
|
private static String path;
|
||||||
private static File fileToTest;
|
private static File fileToTest;
|
||||||
private static JavaTXCompiler compiler;
|
private static JavaTXCompiler compiler;
|
||||||
private static ClassLoader loader;
|
|
||||||
private static Class<?> classToTest;
|
|
||||||
private static String pathToClassFile;
|
private static String pathToClassFile;
|
||||||
private static Object instanceOfClass;
|
|
||||||
|
|
||||||
@BeforeClass
|
@Test
|
||||||
public static void setUpBeforeClass() throws Exception {
|
public void generateBC() throws Exception {
|
||||||
path = System.getProperty("user.dir")+"/test/bytecode/javFiles/Tph3.jav";
|
path = System.getProperty("user.dir")+"/test/bytecode/javFiles/Tph3.jav";
|
||||||
fileToTest = new File(path);
|
fileToTest = new File(path);
|
||||||
compiler = new JavaTXCompiler(fileToTest);
|
compiler = new JavaTXCompiler(fileToTest);
|
||||||
pathToClassFile = System.getProperty("user.dir")+"/testBytecode/generatedBC/";
|
pathToClassFile = System.getProperty("user.dir")+"/testBytecode/generatedBC/";
|
||||||
compiler.generateBytecode(pathToClassFile);
|
compiler.generateBytecode(pathToClassFile);
|
||||||
loader = new URLClassLoader(new URL[] {new URL("file://"+pathToClassFile)});
|
|
||||||
classToTest = loader.loadClass("Tph3");
|
|
||||||
instanceOfClass = classToTest.getDeclaredConstructor().newInstance();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test1() throws Exception {
|
|
||||||
Method m = classToTest.getDeclaredMethod("m", Object.class, Object.class);
|
|
||||||
Object result = m.invoke(instanceOfClass, 1,2);
|
|
||||||
|
|
||||||
assertEquals(1,result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test2() throws Exception {
|
|
||||||
Method m = classToTest.getDeclaredMethod("m", Object.class, Object.class);
|
|
||||||
Object result = m.invoke(instanceOfClass, "sss",2);
|
|
||||||
|
|
||||||
assertEquals("sss",result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test3() throws Exception {
|
|
||||||
Method m = classToTest.getDeclaredMethod("m2", Object.class, Object.class);
|
|
||||||
Object result = m.invoke(instanceOfClass, 1,2);
|
|
||||||
|
|
||||||
assertEquals(2,result);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void test4() throws Exception {
|
|
||||||
Method m = classToTest.getDeclaredMethod("m2", Object.class, Object.class);
|
|
||||||
Object result = m.invoke(instanceOfClass, 1,"xxx");
|
|
||||||
|
|
||||||
assertEquals("xxx",result);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -41,4 +41,18 @@ public class WhileTest {
|
|||||||
assertEquals(2, result);
|
assertEquals(2, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testDouble() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
|
Method m = classToTest.getDeclaredMethod("m", Double.class);
|
||||||
|
Double result = (Double) m.invoke(instanceOfClass, 0.0);
|
||||||
|
assertEquals(2.0, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLong() throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
|
||||||
|
Method m = classToTest.getDeclaredMethod("m", Long.class);
|
||||||
|
Long result = (Long) m.invoke(instanceOfClass, 0l);
|
||||||
|
assertEquals(2l, result);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
import java.lang.Integer;
|
import java.lang.Integer;
|
||||||
|
import java.lang.Double;
|
||||||
|
|
||||||
public class BinaryInMeth {
|
public class BinaryInMeth {
|
||||||
|
|
||||||
m(a){
|
m(a){
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import java.lang.Integer;
|
import java.lang.Integer;
|
||||||
import java.lang.Long;
|
//import java.lang.Double;
|
||||||
import java.lang.Double;
|
|
||||||
|
|
||||||
public class Fac {
|
public class Fac {
|
||||||
|
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import java.lang.Integer;
|
import java.lang.Integer;
|
||||||
|
import java.lang.String;
|
||||||
|
|
||||||
public class Plus {
|
public class Plus {
|
||||||
|
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
import java.lang.Integer;
|
import java.lang.Integer;
|
||||||
// wenn nur ein Import da steht,wird die Type von
|
|
||||||
// dem Literal 2 Number berechnet => Deswegen kann
|
|
||||||
// nicht auf den Stack geladen.
|
|
||||||
import java.lang.Long;
|
import java.lang.Long;
|
||||||
|
import java.lang.Double;
|
||||||
|
|
||||||
public class While {
|
public class While {
|
||||||
Integer m(x) {
|
m(x) {
|
||||||
while(x < 2) {
|
while(x < 2) {
|
||||||
x = x+1;
|
x = x+1;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user