2013-10-18 11:33:46 +00:00
|
|
|
// ino.module.Binary.8623.package
|
2014-09-02 08:33:54 +00:00
|
|
|
package de.dhbwstuttgart.syntaxtree.statement;
|
2013-10-18 11:33:46 +00:00
|
|
|
// ino.end
|
|
|
|
// ino.module.Binary.8623.import
|
|
|
|
import java.util.Enumeration;
|
2014-05-07 06:10:55 +00:00
|
|
|
import java.util.HashMap;
|
2013-10-18 11:33:46 +00:00
|
|
|
import java.util.Hashtable;
|
2014-02-09 15:07:31 +00:00
|
|
|
|
2015-06-16 12:58:27 +00:00
|
|
|
import org.apache.bcel.generic.ClassGen;
|
2014-09-08 13:12:47 +00:00
|
|
|
|
2015-06-16 12:58:27 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.Menge;
|
|
|
|
import de.dhbwstuttgart.logger.Logger;
|
2014-09-04 14:35:44 +00:00
|
|
|
import de.dhbwstuttgart.myexception.CTypeReconstructionException;
|
|
|
|
import de.dhbwstuttgart.myexception.JVMCodeException;
|
|
|
|
import de.dhbwstuttgart.myexception.SCExcept;
|
|
|
|
import de.dhbwstuttgart.myexception.SCStatementException;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.Class;
|
2014-09-04 14:35:44 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.syntaxtree.operator.AddOp;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.operator.LogOp;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.operator.MulOp;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.operator.Operator;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.operator.RelOp;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.GenericTypeVar;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.Type;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
|
|
|
import de.dhbwstuttgart.typeinference.ConstraintsSet;
|
|
|
|
import de.dhbwstuttgart.typeinference.JavaCodeResult;
|
|
|
|
import de.dhbwstuttgart.typeinference.OderConstraint;
|
2014-09-08 13:12:47 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.Pair;
|
2014-09-02 08:33:54 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.ResultSet;
|
|
|
|
import de.dhbwstuttgart.typeinference.SingleConstraint;
|
|
|
|
import de.dhbwstuttgart.typeinference.UndConstraint;
|
|
|
|
import de.dhbwstuttgart.typeinference.assumptions.TypeAssumptions;
|
2014-09-05 09:49:31 +00:00
|
|
|
import de.dhbwstuttgart.typeinference.unify.CSubstitutionSet;
|
2013-10-18 11:33:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.class.Binary.24966.description type=line
|
|
|
|
// neu von Felix
|
|
|
|
// ino.end
|
|
|
|
// ino.class.Binary.24966.declaration
|
|
|
|
public class Binary extends BinaryExpr
|
|
|
|
// ino.end
|
|
|
|
// ino.class.Binary.24966.body
|
|
|
|
{
|
|
|
|
|
|
|
|
// ino.method.Binary.24970.definition
|
|
|
|
public Binary(int offset, int variableLength)
|
|
|
|
// ino.end
|
|
|
|
// ino.method.Binary.24970.body
|
|
|
|
{
|
|
|
|
super(offset,variableLength);
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
// ino.attribute.parserlog.24973.decldescription type=javadoc
|
|
|
|
/**
|
|
|
|
* Logger: log4j
|
|
|
|
*/
|
|
|
|
// ino.end
|
|
|
|
// ino.attribute.parserlog.24973.declaration
|
|
|
|
protected static Logger parserlog = Logger.getLogger("parser");
|
|
|
|
// ino.end
|
|
|
|
// ino.attribute.expr1.24976.declaration
|
|
|
|
public Expr expr1;
|
|
|
|
// ino.end
|
|
|
|
// ino.attribute.op.24979.declaration
|
|
|
|
public Operator op;
|
|
|
|
// ino.end
|
|
|
|
// ino.attribute.expr2.24982.declaration
|
|
|
|
public Expr expr2;
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.set_Expr1.24988.definition
|
|
|
|
public void set_Expr1(Expr exp)
|
|
|
|
// ino.end
|
|
|
|
// ino.method.set_Expr1.24988.body
|
|
|
|
{
|
|
|
|
this.expr1=exp;
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.set_Expr2.24991.definition
|
|
|
|
public void set_Expr2(Expr exp)
|
|
|
|
// ino.end
|
|
|
|
// ino.method.set_Expr2.24991.body
|
|
|
|
{
|
|
|
|
this.expr2=exp;
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.set_Operator.24994.definition
|
|
|
|
public void set_Operator(Operator Op)
|
|
|
|
// ino.end
|
|
|
|
// ino.method.set_Operator.24994.body
|
|
|
|
{
|
|
|
|
this.op=Op;
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.get_Name.24997.definition
|
|
|
|
public String get_Name()
|
|
|
|
// ino.end
|
|
|
|
// ino.method.get_Name.24997.body
|
|
|
|
{
|
|
|
|
return null;
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.get_Operator.25000.definition
|
|
|
|
public Operator get_Operator()
|
|
|
|
// ino.end
|
|
|
|
// ino.method.get_Operator.25000.body
|
|
|
|
{
|
|
|
|
return op;
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.get_Expr1.25003.definition
|
|
|
|
public Expr get_Expr1()
|
|
|
|
// ino.end
|
|
|
|
// ino.method.get_Expr1.25003.body
|
|
|
|
{
|
|
|
|
return expr1;
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.get_Expr2.25006.definition
|
|
|
|
public Expr get_Expr2()
|
|
|
|
// ino.end
|
|
|
|
// ino.method.get_Expr2.25006.body
|
|
|
|
{
|
|
|
|
return expr2;
|
|
|
|
}
|
|
|
|
// ino.end
|
2015-05-12 17:49:27 +00:00
|
|
|
|
2013-10-18 11:33:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.method.wandleRefTypeAttributes2GenericAttributes.25027.definition
|
2015-04-22 19:40:22 +00:00
|
|
|
public void wandleRefTypeAttributes2GenericAttributes(Menge<Type> paralist, Menge<GenericTypeVar> genericMethodParameters)
|
2013-10-18 11:33:46 +00:00
|
|
|
// ino.end
|
|
|
|
// ino.method.wandleRefTypeAttributes2GenericAttributes.25027.body
|
|
|
|
{
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public ConstraintsSet TYPEExpr(TypeAssumptions assumptions) {
|
|
|
|
ConstraintsSet ret = new ConstraintsSet();
|
2014-04-23 15:59:39 +00:00
|
|
|
ret.add(this.expr1.TYPEExpr(assumptions));
|
|
|
|
ret.add(this.expr2.TYPEExpr(assumptions));
|
2014-05-07 06:10:55 +00:00
|
|
|
/**
|
2015-05-12 17:49:27 +00:00
|
|
|
* Berechnet die Constraints dieses Operators für die 2 gegebenen Parameter
|
|
|
|
* Die Operatoren sind meistens überladen. Es entstehen mehrere Oder-Verknüpfte Constraints.
|
2014-05-07 06:10:55 +00:00
|
|
|
* @param expr1
|
|
|
|
* @param expr2
|
|
|
|
* @return
|
|
|
|
*/
|
|
|
|
if(this.getType()==null)this.set_Type(TypePlaceholder.fresh(this));
|
|
|
|
OderConstraint oderCons = new OderConstraint();
|
2015-06-16 20:08:17 +00:00
|
|
|
HashMap<Type,Type> rMap = this.op.getReturnTypes(assumptions);
|
|
|
|
for(Type rT : rMap.keySet()){
|
2014-05-07 06:10:55 +00:00
|
|
|
UndConstraint c = new UndConstraint();
|
2014-09-08 13:12:47 +00:00
|
|
|
c.addConstraint(this.getType().TYPE(assumptions, this),rT);
|
|
|
|
c.addConstraint(this.expr1.getType().TYPE(assumptions, this), rMap.get(rT));
|
|
|
|
c.addConstraint(this.expr2.getType().TYPE(assumptions, this), rMap.get(rT));
|
2014-05-07 06:10:55 +00:00
|
|
|
oderCons.addConstraint(c);
|
|
|
|
}
|
|
|
|
ret.add(oderCons);
|
2013-10-18 11:33:46 +00:00
|
|
|
return ret;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public JavaCodeResult printJavaCode(ResultSet resultSet) {
|
2014-04-23 15:59:39 +00:00
|
|
|
JavaCodeResult ret = new JavaCodeResult();
|
|
|
|
ret.attach(this.expr1.printJavaCode(resultSet)).attach(" ");
|
|
|
|
ret.attach(this.op.toString()+" ");
|
|
|
|
ret.attach(this.expr2.printJavaCode(resultSet));
|
|
|
|
return ret;
|
2013-10-18 11:33:46 +00:00
|
|
|
}
|
2014-02-19 22:04:48 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
2015-04-22 19:40:22 +00:00
|
|
|
public Menge<SyntaxTreeNode> getChildren() {
|
|
|
|
Menge<SyntaxTreeNode> ret = new Menge<SyntaxTreeNode>();
|
2014-04-09 13:54:20 +00:00
|
|
|
ret.add(this.expr1);
|
|
|
|
ret.add(this.expr2);
|
|
|
|
return ret;
|
2014-02-19 22:04:48 +00:00
|
|
|
}
|
2015-06-16 12:58:27 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void genByteCode(ClassGen _cg) {
|
|
|
|
// TODO Auto-generated method stub
|
|
|
|
|
|
|
|
}
|
2013-10-18 11:33:46 +00:00
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
// ino.end
|