forked from JavaTX/JavaCompilerCore
Standardkonstruktor enthält nun SuperCall
This commit is contained in:
parent
4191c8d8b2
commit
1c2ac73dbd
@ -27,6 +27,7 @@ import de.dhbwstuttgart.syntaxtree.modifier.Modifiers;
|
||||
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
||||
import de.dhbwstuttgart.syntaxtree.statement.Expr;
|
||||
import de.dhbwstuttgart.syntaxtree.statement.Statement;
|
||||
import de.dhbwstuttgart.syntaxtree.statement.SuperCall;
|
||||
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
|
||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
||||
import de.dhbwstuttgart.syntaxtree.type.SuperWildcardType;
|
||||
@ -90,7 +91,7 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
||||
|
||||
//ByteCodeResult bc = new ByteCodeResult();
|
||||
//_cg = new ClassGen(pkgName.get_Name() + "/" + name, superClass.get_Name(), name + ".java", Constants.ACC_PUBLIC , new String[] { });
|
||||
//_cg zurückgeben
|
||||
//_cg zur<EFBFBD>ckgeben
|
||||
//bc.append(BCELByteCodeOutput);
|
||||
//return _cg;
|
||||
}
|
||||
@ -1247,7 +1248,11 @@ public class Class extends GTVDeclarationContext implements AClassOrInterface, I
|
||||
}
|
||||
}
|
||||
if(!constructorVorhanden){//Falls kein Konstruktor vorhanden ist, muss noch der Standardkonstruktor angefügt werden:
|
||||
Block konstruktorBlock = new Block();
|
||||
konstruktorBlock.statements.add(new SuperCall(konstruktorBlock));
|
||||
//Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(konstruktorBlock,this.getName().toString(), this));
|
||||
Constructor standardKonstruktor = new Constructor(Method.createEmptyMethod(this.getName().toString(), this));
|
||||
|
||||
this.addField(standardKonstruktor);
|
||||
}
|
||||
|
||||
|
@ -58,19 +58,19 @@ public class Constructor extends Method {
|
||||
InstructionList il = new InstructionList(); //sollte nicht new sein sondern aus Block kommen
|
||||
Class parentClass = this.getParentClass();
|
||||
|
||||
//Hier müsste drin stehen: Kreiere einen Block, welcher ein Statement enthält, welches ein Super Statement ist.
|
||||
//Hier m<EFBFBD>sste drin stehen: Kreiere einen Block, welcher ein Statement enth<EFBFBD>lt, welches ein Super Statement ist.
|
||||
|
||||
//TODO: Alles dynamisch gestalten
|
||||
//init darf nur drin stehen, wenn Konstruktor;
|
||||
methode.method = new MethodGen(Constants.ACC_PUBLIC, org.apache.bcel.generic.Type.getReturnType(methode.getType().get_Name()), org.apache.bcel.generic.Type.NO_ARGS , new String[] { }, "<init>", parentClass.name, il, _cp);
|
||||
|
||||
methode.genByteCode(cg); //Aufrufen um Iteration über Block zu starten
|
||||
methode.genByteCode(cg); //Aufrufen um Iteration <EFBFBD>ber Block zu starten
|
||||
|
||||
}
|
||||
// super statement muss drin sein
|
||||
// stmt genByteCode + im block genByteCode implementieren & dann Hierarchie ausprobieren
|
||||
// de.dhbw.systanxtree.stmts supercall
|
||||
// Aufrufhierarchie: Class->Felder->Konstruktor->Methode innerhalb Konstruktor->Block->Statements (in diesem Fall nur super())->hier wird bytecode für superaufruf generiert
|
||||
// Aufrufhierarchie: Class->Felder->Konstruktor->Methode innerhalb Konstruktor->Block->Statements (in diesem Fall nur super())->hier wird bytecode f<EFBFBD>r superaufruf generiert
|
||||
|
||||
|
||||
|
||||
@ -316,7 +316,6 @@ public class Constructor extends Method {
|
||||
|
||||
@Override
|
||||
public void set_Method_Name(String string) {
|
||||
|
||||
this.methode.set_Method_Name(string);
|
||||
}
|
||||
|
||||
|
@ -705,7 +705,11 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
||||
// Methode und Block teilen sich einen ReturnType:
|
||||
return this.returntype;
|
||||
}
|
||||
|
||||
public static Method createEmptyMethod(Block withBlock, String withSignature, Class parent) {
|
||||
Method ret = Method.createEmptyMethod(withSignature, parent);
|
||||
ret.set_Block(withBlock);
|
||||
return ret;
|
||||
}
|
||||
public static Method createEmptyMethod(String withSignature, Class parent) {
|
||||
Method ret = new Method(0);
|
||||
DeclId DImethod = new DeclId();
|
||||
@ -745,7 +749,7 @@ public class Method extends Field implements IItemWithOffset, TypeInsertable
|
||||
|
||||
//oben steht MethodGen method als Variable (Z. 71)
|
||||
|
||||
// Über Statements iterieren um Block abzurufen
|
||||
// <EFBFBD>ber Statements iterieren um Block abzurufen
|
||||
for (Statement statements : block.get_Statement()) {
|
||||
statements.genByteCode(cg);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user