forked from JavaTX/JavaCompilerCore
Merge branch 'bytecode' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into refactoring
This commit is contained in:
commit
7a47de7bfa
@ -53,7 +53,7 @@ public class ClassGenerator extends ClassGen{
|
||||
}
|
||||
|
||||
public DHBWInstructionFactory getInstructionFactory() {
|
||||
return factory ;
|
||||
return factory;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -158,4 +158,8 @@ public class DHBWInstructionFactory extends InstructionFactory{
|
||||
public Attribute createSignatureAttribute(String signature) {
|
||||
return new Signature(cp.addUtf8("Signature"),2,cp.addUtf8(signature),cp.getConstantPool());
|
||||
}
|
||||
|
||||
public void resetStoreIndexes() {
|
||||
storeIndexes = new HashMap<>();
|
||||
}
|
||||
}
|
||||
|
@ -12,6 +12,7 @@ import org.apache.commons.bcel6.generic.InstructionList;
|
||||
|
||||
import de.dhbwstuttgart.typeinference.Menge;
|
||||
import de.dhbwstuttgart.bytecode.ClassGenerator;
|
||||
import de.dhbwstuttgart.bytecode.DHBWInstructionFactory;
|
||||
import de.dhbwstuttgart.logger.Logger;
|
||||
import de.dhbwstuttgart.myexception.JVMCodeException;
|
||||
import de.dhbwstuttgart.syntaxtree.Method;
|
||||
@ -324,7 +325,8 @@ public class MethodCall extends Expr
|
||||
@Override
|
||||
public InstructionList genByteCode(ClassGenerator cg, TypeinferenceResultSet rs) {
|
||||
InstructionList il = new InstructionList();
|
||||
InstructionFactory _factory = new InstructionFactory(cg, cg.getConstantPool());
|
||||
DHBWInstructionFactory _factory = cg.getInstructionFactory();
|
||||
_factory.resetStoreIndexes();
|
||||
|
||||
il.append(receiver.get_Expr().genByteCode(cg, rs));
|
||||
|
||||
@ -343,6 +345,8 @@ public class MethodCall extends Expr
|
||||
argumentTypen = new org.apache.commons.bcel6.generic.Type[this.getArgumentList().size()];
|
||||
int i = 0;
|
||||
for(Expr argument : this.arglist.expr){
|
||||
_factory.getStoreIndex(argument.get_Name());
|
||||
|
||||
argumentTypen[i] = argument.getType().getBytecodeType(cg, rs);
|
||||
//Das Argument auf den Stack legen:
|
||||
il.append(argument.genByteCode(cg, rs));
|
||||
|
16
test/bytecode/types/OL.jav
Normal file
16
test/bytecode/types/OL.jav
Normal file
@ -0,0 +1,16 @@
|
||||
class OL {
|
||||
|
||||
Integer m(Integer x) { return x + x; }
|
||||
|
||||
Boolean m(Boolean x) {return x || x; }
|
||||
}
|
||||
|
||||
class Main {
|
||||
|
||||
main(x) {
|
||||
ol;
|
||||
ol = new OL();
|
||||
return ol.m(x);
|
||||
}
|
||||
|
||||
}
|
75
test/bytecode/types/OLTest.java
Normal file
75
test/bytecode/types/OLTest.java
Normal file
@ -0,0 +1,75 @@
|
||||
package bytecode.types;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
import java.io.File;
|
||||
import java.lang.reflect.Method;
|
||||
import java.net.URL;
|
||||
import java.net.URLClassLoader;
|
||||
import java.util.Vector;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import bytecode.SourceFileBytecodeTest;
|
||||
|
||||
public class OLTest extends SourceFileBytecodeTest{
|
||||
@Override
|
||||
protected void init() {
|
||||
testName = "OL";
|
||||
rootDirectory = System.getProperty("user.dir")+"/test/bytecode/types/";
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testInteger() {
|
||||
try{
|
||||
ClassLoader classLoader = getClassLoader();
|
||||
|
||||
Class cls = classLoader.loadClass(testName);
|
||||
|
||||
Object obj = cls.newInstance();
|
||||
|
||||
File file = new File(rootDirectory);
|
||||
URL url = file.toURL();
|
||||
URL[] urls = new URL[]{url};
|
||||
|
||||
Class stringVector = classLoader.loadClass("Integer");
|
||||
|
||||
Class[] params = new Class[1];
|
||||
params[0] = stringVector;
|
||||
|
||||
Method method = cls.getDeclaredMethod("m", params);
|
||||
method.invoke(obj, stringVector.newInstance());
|
||||
assertTrue(true);
|
||||
}catch(Exception e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBoolen() {
|
||||
try{
|
||||
ClassLoader classLoader = getClassLoader();
|
||||
|
||||
Class cls = classLoader.loadClass(testName);
|
||||
|
||||
Object obj = cls.newInstance();
|
||||
|
||||
File file = new File(rootDirectory);
|
||||
URL url = file.toURL();
|
||||
URL[] urls = new URL[]{url};
|
||||
|
||||
Class stringVector = classLoader.loadClass("Boolean");
|
||||
|
||||
Class[] params = new Class[1];
|
||||
params[0] = stringVector;
|
||||
|
||||
Method method = cls.getDeclaredMethod("m", params);
|
||||
method.invoke(obj, stringVector.newInstance());
|
||||
assertTrue(true);
|
||||
}catch(Exception e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -11,12 +11,7 @@ class Overloading{
|
||||
}
|
||||
|
||||
main(String[] args) {
|
||||
ol;
|
||||
ol = new Overloading();
|
||||
v;
|
||||
v = new Vector<String> ();
|
||||
ol.method(v);
|
||||
|
||||
new Overloading().method(new Vector<String> ());
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user