2014-09-02 08:33:54 +00:00
|
|
|
package de.dhbwstuttgart.syntaxtree.statement;
|
2015-11-06 17:27:47 +00:00
|
|
|
|
2013-10-18 11:33:46 +00:00
|
|
|
import java.util.Iterator;
|
|
|
|
|
2015-11-06 17:27:47 +00:00
|
|
|
import org.apache.commons.bcel6.generic.InstructionList;
|
|
|
|
|
|
|
|
import de.dhbwstuttgart.typeinference.Menge;
|
|
|
|
import de.dhbwstuttgart.bytecode.ClassGenerator;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.FormalParameter;
|
2015-02-26 16:41:29 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.JavaCodeResult;
|
|
|
|
import de.dhbwstuttgart.typeinference.ResultSet;
|
2015-11-27 15:10:35 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.TypeinferenceResultSet;
|
2013-10-18 11:33:46 +00:00
|
|
|
|
2015-02-26 16:41:29 +00:00
|
|
|
public class ArgumentList extends SyntaxTreeNode
|
2013-10-18 11:33:46 +00:00
|
|
|
{
|
2015-04-22 19:40:22 +00:00
|
|
|
public Menge<Expr> expr = new Menge<Expr>();
|
2013-10-18 11:33:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
public Object get_firstElement()
|
|
|
|
{
|
|
|
|
return expr.firstElement();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Andreas Stadelmeier, a10023
|
|
|
|
* @return Anzahl der Argumente in der ArgumentList
|
|
|
|
*/
|
|
|
|
public int size() {
|
|
|
|
return expr.size();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @author Andreas Stadelmeier, a10023
|
|
|
|
* @param n
|
|
|
|
* @return Das Element (Expr) in der Argumentliste an der Stelle n
|
|
|
|
*/
|
|
|
|
public Expr argumentAt(int n){
|
|
|
|
return expr.elementAt(n);
|
|
|
|
}
|
|
|
|
public String toString(){
|
|
|
|
if(expr == null)return "[]";
|
|
|
|
String ret = " [ ";
|
|
|
|
for(Expr expr : this.expr){
|
|
|
|
ret += expr.toString()+", ";
|
|
|
|
}
|
|
|
|
return ret + "]";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
|
|
|
JavaCodeResult ret = new JavaCodeResult();
|
|
|
|
Iterator<Expr> it = this.expr.iterator();
|
|
|
|
while(it.hasNext()){
|
|
|
|
Expr expr = it.next();
|
|
|
|
ret.attach(expr.printJavaCode(resultSet));
|
|
|
|
if(it.hasNext())ret.attach(", ");
|
|
|
|
}
|
|
|
|
//if(this.expr.size()>0)ret = ret.substring(0, ret.length()-2);
|
|
|
|
return ret;
|
|
|
|
}
|
2015-02-26 16:41:29 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getOffset() {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public int getVariableLength() {
|
|
|
|
return 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
2015-04-22 19:40:22 +00:00
|
|
|
public Menge<? extends SyntaxTreeNode> getChildren() {
|
2015-02-26 16:41:29 +00:00
|
|
|
return expr;
|
|
|
|
}
|
2015-11-06 17:27:47 +00:00
|
|
|
|
2015-11-27 15:10:35 +00:00
|
|
|
public InstructionList generateBytecode(ClassGenerator cg, TypeinferenceResultSet rs){
|
2015-11-06 17:27:47 +00:00
|
|
|
InstructionList ret = new InstructionList();
|
|
|
|
for(Expr e : expr){
|
2015-11-27 15:10:35 +00:00
|
|
|
ret.append(e.genByteCode(cg, rs));
|
2015-11-06 17:27:47 +00:00
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
2015-11-27 15:10:35 +00:00
|
|
|
public org.apache.commons.bcel6.generic.Type[] getBytecodeTypeList(ClassGenerator cg, TypeinferenceResultSet rs){
|
2015-11-06 17:27:47 +00:00
|
|
|
org.apache.commons.bcel6.generic.Type[] ret = new org.apache.commons.bcel6.generic.Type[expr.size()];
|
|
|
|
int i = 0;
|
|
|
|
for(Expr e : expr){
|
2015-11-27 15:10:35 +00:00
|
|
|
ret[i] = e.getType().getBytecodeType(cg, rs);
|
2015-11-06 17:27:47 +00:00
|
|
|
i++;
|
|
|
|
}
|
|
|
|
return ret;
|
|
|
|
}
|
2013-10-18 11:33:46 +00:00
|
|
|
}
|