JavaPatternMatching/src/mycompiler/mystatement/Return.java
2014-02-22 04:58:49 +01:00

157 lines
4.4 KiB
Java
Executable File

// ino.module.Return.8651.package
package mycompiler.mystatement;
// ino.end
// ino.module.Return.8651.import
import java.util.Hashtable;
import java.util.Vector;
import mycompiler.SyntaxTreeNode;
import mycompiler.mybytecode.ClassFile;
import mycompiler.mybytecode.CodeAttribute;
import mycompiler.mybytecode.JVMCode;
import mycompiler.myclass.Class;
import mycompiler.myexception.CTypeReconstructionException;
import mycompiler.myexception.JVMCodeException;
import mycompiler.myexception.SCExcept;
import mycompiler.myexception.SCStatementException;
import mycompiler.mytype.GenericTypeVar;
import mycompiler.mytype.Type;
import mycompiler.mytype.TypePlaceholder;
import mycompiler.mytypereconstruction.CSupportData;
import mycompiler.mytypereconstruction.replacementlistener.CReplaceTypeEvent;
import mycompiler.mytypereconstruction.set.CSubstitutionSet;
import mycompiler.mytypereconstruction.set.CTripleSet;
import mycompiler.mytypereconstruction.set.CTypeAssumptionSet;
import mycompiler.mytypereconstruction.typeassumption.CTypeAssumption;
import org.apache.log4j.Logger;
// ino.end
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
import typinferenz.JavaCodeResult;
import typinferenz.SingleConstraint;
import typinferenz.ConstraintsSet;
import typinferenz.FreshTypeVariable;
import typinferenz.ResultSet;
import typinferenz.assumptions.TypeAssumptions;
// ino.class.Return.26150.declaration
public class Return extends Statement
// ino.end
// ino.class.Return.26150.body
{
// ino.method.Return.26154.definition
public Return(int offset,int variableLength)
// ino.end
// ino.method.Return.26154.body
{
super(offset,variableLength);
}
// ino.end
// ino.attribute.retexpr.26157.declaration
public Expr retexpr;
// ino.end
// ino.attribute.parserlog.26160.declaration
protected static Logger parserlog = Logger.getLogger("parser");
// ino.end
// ino.method.set_ReturnExpr.26166.definition
public Return set_ReturnExpr(Expr ret)
// ino.end
// ino.method.set_ReturnExpr.26166.body
{
this.retexpr=ret;
return this;
}
// ino.end
// ino.method.get_Type.26169.definition
public String get_Type()
// ino.end
// ino.method.get_Type.26169.body
{
return retexpr.getTypeName();
}
// ino.end
// ino.method.codegen.26172.definition
public void codegen(ClassFile classfile, CodeAttribute code, Vector paralist)
throws JVMCodeException
// ino.end
// ino.method.codegen.26172.body
{
retexpr.codegen(classfile, code, paralist);
code.add_code(JVMCode.nreturn(retexpr.getTypeName()));
}
// ino.end
// ino.method.toString.26178.definition
public String toString()
// ino.end
// ino.method.toString.26178.body
{
return type + " Return " + retexpr.toString();
}
// ino.end
// ino.method.wandleRefTypeAttributes2GenericAttributes.26181.definition
public void wandleRefTypeAttributes2GenericAttributes(Vector<Type> paralist, Vector<GenericTypeVar> genericMethodParameters)
// ino.end
// ino.method.wandleRefTypeAttributes2GenericAttributes.26181.body
{
}
// ino.end
public boolean addOffsetsToStatement(CTypeAssumption localAssumption, String NameVariable, boolean isMemberVariable)
{
retexpr.addOffsetsToExpression(localAssumption,NameVariable,isMemberVariable);
return true;
}
@Override
public ConstraintsSet TYPEStmt(TypeAssumptions assumptions) {
ConstraintsSet ret = new ConstraintsSet();
ret.add(this.retexpr.TYPEExpr(assumptions));
//this.setTypeVariable(TypePlaceholder.fresh("Return Type"));
this.setType(TypePlaceholder.fresh(this));
ret.add(new SingleConstraint(retexpr.getType(), this.getType()));
return ret;
}
public void replaceType(CReplaceTypeEvent e) {
super.replaceType(e);
}
public int getTypeLineNumber() {
return 0;
}
@Override
public String getTypeInformation(){
String ret = this.getType()+" :: (Return "+this.retexpr.getTypeInformation()+")";
return ret;
}
@Override
public JavaCodeResult printJavaCode(ResultSet resultSet) {
JavaCodeResult ret = new JavaCodeResult("return ");
ret.attach(this.retexpr.printJavaCode(resultSet));
return ret.attach(";");
}
@Override
public Vector<SyntaxTreeNode> getChildren() {
Vector<SyntaxTreeNode> ret = new Vector<SyntaxTreeNode>();
ret.add(this.retexpr);
return ret;
}
}
// ino.end