2013-10-18 11:33:46 +00:00
|
|
|
// ino.module.NotEqualOp.8606.package
|
2014-09-02 08:33:54 +00:00
|
|
|
package de.dhbwstuttgart.syntaxtree.operator;
|
2013-10-18 11:33:46 +00:00
|
|
|
// ino.end
|
|
|
|
// ino.module.NotEqualOp.8606.import
|
|
|
|
import java.util.Iterator;
|
|
|
|
import java.util.Vector;
|
2014-09-02 08:33:54 +00:00
|
|
|
|
|
|
|
import de.dhbwstuttgart.syntaxtree.statement.Binary;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.statement.Expr;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.statement.Null;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.Pair;
|
|
|
|
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
2013-10-18 11:33:46 +00:00
|
|
|
import mycompiler.mybytecode.ClassFile;
|
|
|
|
import mycompiler.mybytecode.CodeAttribute;
|
|
|
|
import mycompiler.mybytecode.JVMCode;
|
|
|
|
import mycompiler.myexception.CTypeReconstructionException;
|
|
|
|
import mycompiler.myexception.JVMCodeException;
|
|
|
|
import mycompiler.mytypereconstruction.CSupportData;
|
|
|
|
import mycompiler.mytypereconstruction.CTriple;
|
|
|
|
import mycompiler.mytypereconstruction.set.CSubstitutionSet;
|
|
|
|
import mycompiler.mytypereconstruction.set.CTripleSet;
|
|
|
|
import mycompiler.mytypereconstruction.set.CTypeAssumptionSet;
|
|
|
|
import mycompiler.mytypereconstruction.unify.Unify;
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ino.class.NotEqualOp.24241.declaration
|
|
|
|
public class NotEqualOp extends RelOp
|
|
|
|
// ino.end
|
|
|
|
// ino.class.NotEqualOp.24241.body
|
|
|
|
{
|
|
|
|
// ino.method.NotEqualOp.24245.definition
|
|
|
|
public NotEqualOp(int offset, int variableLength)
|
|
|
|
// ino.end
|
|
|
|
// ino.method.NotEqualOp.24245.body
|
|
|
|
{
|
|
|
|
super(offset,variableLength);
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
// ino.method.codegen.24248.definition
|
|
|
|
public void codegen(ClassFile classfile, CodeAttribute code, Expr expr, boolean not, Vector paralist)
|
|
|
|
throws JVMCodeException
|
|
|
|
// ino.end
|
|
|
|
// ino.method.codegen.24248.body
|
|
|
|
{
|
|
|
|
Expr expr1 = ((Binary)expr).get_Expr1();
|
|
|
|
Expr expr2 = ((Binary)expr).get_Expr2();
|
|
|
|
int type1 = JVMCode.get_nType(expr1.getTypeName());
|
|
|
|
int type2 = JVMCode.get_nType(expr2.getTypeName());
|
|
|
|
expr1.codegen(classfile, code, paralist);
|
|
|
|
expr2.codegen(classfile, code, paralist);
|
|
|
|
if((expr1 instanceof Null) || (expr2 instanceof Null))
|
|
|
|
if(type1==4 || type2==4)
|
|
|
|
if(!not) code.add_code(JVMCode.ifnull);
|
|
|
|
else code.add_code(JVMCode.ifnonnull);
|
|
|
|
else throw new JVMCodeException("JVMCodeException: NotEqualOp: void codegen(ClassFile classfile, Code_attribute code, Expr expr, boolean not)");
|
|
|
|
else if(!not) code.add_code(JVMCode.if_ncmpeq(expr1.getTypeName()));
|
|
|
|
else code.add_code(JVMCode.if_ncmpne(expr1.getTypeName()));
|
|
|
|
code.add_code_short((short)7);
|
|
|
|
code.add_code(JVMCode.iconst_1);
|
|
|
|
code.add_code(JVMCode.goto_);
|
|
|
|
code.add_code_short((short)4);
|
|
|
|
code.add_code(JVMCode.iconst_0);
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
// ino.method.if_codegen.24251.definition
|
|
|
|
public void if_codegen(ClassFile classfile, CodeAttribute code, String type, boolean not)
|
|
|
|
throws JVMCodeException
|
|
|
|
// ino.end
|
|
|
|
// ino.method.if_codegen.24251.body
|
|
|
|
{
|
|
|
|
if(type.equals("null"))
|
|
|
|
if(!not) code.add_code(JVMCode.ifnull);
|
|
|
|
else code.add_code(JVMCode.ifnonnull);
|
|
|
|
else
|
|
|
|
if(!not) code.add_code(JVMCode.if_ncmpeq(type));
|
|
|
|
else code.add_code(JVMCode.if_ncmpne(type));
|
|
|
|
}
|
|
|
|
// ino.end
|
|
|
|
|
|
|
|
}
|
|
|
|
// ino.end
|