JavaPatternMatching/src/de/dhbwstuttgart/syntaxtree/statement/ArgumentList.java

102 lines
2.2 KiB
Java
Raw Normal View History

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-04 14:35:44 +00:00
import de.dhbwstuttgart.myexception.JVMCodeException;
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;
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
{
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
public Menge<? extends SyntaxTreeNode> getChildren() {
2015-02-26 16:41:29 +00:00
return expr;
}
2015-11-06 17:27:47 +00:00
public InstructionList generateBytecode(ClassGenerator cg){
InstructionList ret = new InstructionList();
for(Expr e : expr){
ret.append(e.genByteCode(cg));
}
return ret;
}
public org.apache.commons.bcel6.generic.Type[] getBytecodeTypeList(ClassGenerator cg){
org.apache.commons.bcel6.generic.Type[] ret = new org.apache.commons.bcel6.generic.Type[expr.size()];
int i = 0;
for(Expr e : expr){
ret[i] = e.getType().getBytecodeType(cg);
i++;
}
return ret;
}
2013-10-18 11:33:46 +00:00
}