131 lines
3.5 KiB
Java
Executable File
131 lines
3.5 KiB
Java
Executable File
// ino.module.Receiver.8650.package
|
|
package de.dhbwstuttgart.syntaxtree.statement;
|
|
// ino.end
|
|
// ino.module.Receiver.8650.import
|
|
import java.util.Hashtable;
|
|
import de.dhbwstuttgart.typeinference.Menge;
|
|
import de.dhbwstuttgart.bytecode.ClassGenerator;
|
|
import de.dhbwstuttgart.logger.Logger;
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
import de.dhbwstuttgart.myexception.SCStatementException;
|
|
import de.dhbwstuttgart.syntaxtree.Class;
|
|
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
|
import de.dhbwstuttgart.typeinference.JavaCodeResult;
|
|
import de.dhbwstuttgart.typeinference.ResultSet;
|
|
import de.dhbwstuttgart.typeinference.assumptions.ClassAssumption;
|
|
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
|
import de.dhbwstuttgart.typeinference.exceptions.TypeinferenceException;
|
|
|
|
|
|
|
|
|
|
// ino.class.Receiver.26123.declaration
|
|
public class Receiver
|
|
// ino.end
|
|
// ino.class.Receiver.26123.body
|
|
{
|
|
// ino.attribute.expr.26126.declaration
|
|
private Expr expr;
|
|
private TypeAssumptions typeAssumptions;
|
|
// ino.end
|
|
// ino.attribute.parserlog.26129.declaration
|
|
protected static Logger parserlog = Logger.getLogger("parser");
|
|
// ino.end
|
|
|
|
// ino.method.Receiver.26132.defdescription type=javadoc
|
|
/**
|
|
* Autor: J�rg B�uerle
|
|
* @param expr
|
|
*/
|
|
// ino.end
|
|
// ino.method.Receiver.26132.definition
|
|
public Receiver(Expr expr)
|
|
// ino.end
|
|
// ino.method.Receiver.26132.body
|
|
{
|
|
this.expr = expr;
|
|
}
|
|
// ino.end
|
|
|
|
// ino.method.get_Type.26138.definition
|
|
public String get_Type()
|
|
// ino.end
|
|
// ino.method.get_Type.26138.body
|
|
{
|
|
return expr.getTypeName();
|
|
}
|
|
// ino.end
|
|
|
|
// ino.method.set_Expr.26141.definition
|
|
public void set_Expr(Expr express)
|
|
// ino.end
|
|
// ino.method.set_Expr.26141.body
|
|
{
|
|
expr=express;
|
|
}
|
|
// ino.end
|
|
|
|
// ino.method.get_Expr.26144.definition
|
|
public Expr get_Expr()
|
|
// ino.end
|
|
// ino.method.get_Expr.26144.body
|
|
{
|
|
return expr;
|
|
}
|
|
// ino.end
|
|
|
|
// ino.method.toString.26147.defdescription type=javadoc
|
|
/**
|
|
* <br/>Author: Martin Pl�micke
|
|
* @return
|
|
*/
|
|
// ino.end
|
|
// ino.method.toString.26147.definition
|
|
public String toString()
|
|
// ino.end
|
|
// ino.method.toString.26147.body
|
|
{
|
|
return expr.toString();
|
|
}
|
|
// ino.end
|
|
|
|
/*
|
|
public void setClass(Class cl){
|
|
this.receiverClass = cl;
|
|
}
|
|
*/
|
|
|
|
public Class getReceiverClass(ClassGenerator cg){
|
|
de.dhbwstuttgart.syntaxtree.type.Type receiverType = this.get_Expr().getType();
|
|
if(receiverType instanceof TypePlaceholder){
|
|
receiverType = cg.resolveTPH((TypePlaceholder)receiverType);
|
|
}
|
|
if(!(receiverType instanceof RefType)){
|
|
throw new TypeinferenceException("Typ des Receivers nicht eindeutig",this.get_Expr());
|
|
}
|
|
ClassAssumption receiverClassAssumption = typeAssumptions.getClassAssumptionFor((RefType)receiverType);
|
|
de.dhbwstuttgart.syntaxtree.Class receiverCl = receiverClassAssumption.getAssumedClass();
|
|
return receiverCl;
|
|
}
|
|
|
|
/**
|
|
* Setzt die TypeAssumptions für diesen Receiver.
|
|
* Das ist notwendig für die Bytecodegenerierung
|
|
* @param ass
|
|
*/
|
|
public void setAssumptions(TypeAssumptions ass){
|
|
this.typeAssumptions = ass;
|
|
}
|
|
|
|
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
|
return new JavaCodeResult().attach(this.get_Expr().printJavaCode(resultSet));
|
|
}
|
|
}
|
|
// ino.end
|