📄 executionvisitor.java
字号:
}
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitDUP2(DUP2 o){
Type t = stack().pop();
if (t.getSize() == 2){
stack().push(t);
stack().push(t);
}
else{ // t.getSize() is 1
Type u = stack().pop();
stack().push(u);
stack().push(t);
stack().push(u);
stack().push(t);
}
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitDUP2_X1(DUP2_X1 o){
Type t = stack().pop();
if (t.getSize() == 2){
Type u = stack().pop();
stack().push(t);
stack().push(u);
stack().push(t);
}
else{ //t.getSize() is1
Type u = stack().pop();
Type v = stack().pop();
stack().push(u);
stack().push(t);
stack().push(v);
stack().push(u);
stack().push(t);
}
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitDUP2_X2(DUP2_X2 o){
Type t = stack().pop();
if (t.getSize() == 2){
Type u = stack().pop();
if (u.getSize() == 2){
stack().push(t);
stack().push(u);
stack().push(t);
}else{
Type v = stack().pop();
stack().push(t);
stack().push(v);
stack().push(u);
stack().push(t);
}
}
else{ //t.getSize() is 1
Type u = stack().pop();
Type v = stack().pop();
if (v.getSize() == 2){
stack().push(u);
stack().push(t);
stack().push(v);
stack().push(u);
stack().push(t);
}else{
Type w = stack().pop();
stack().push(u);
stack().push(t);
stack().push(w);
stack().push(v);
stack().push(u);
stack().push(t);
}
}
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitF2D(F2D o){
stack().pop();
stack().push(Type.DOUBLE);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitF2I(F2I o){
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitF2L(F2L o){
stack().pop();
stack().push(Type.LONG);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFADD(FADD o){
stack().pop();
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFALOAD(FALOAD o){
stack().pop();
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFASTORE(FASTORE o){
stack().pop();
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFCMPG(FCMPG o){
stack().pop();
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFCMPL(FCMPL o){
stack().pop();
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFCONST(FCONST o){
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFDIV(FDIV o){
stack().pop();
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFLOAD(FLOAD o){
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFMUL(FMUL o){
stack().pop();
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFNEG(FNEG o){
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFREM(FREM o){
stack().pop();
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFRETURN(FRETURN o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFSTORE(FSTORE o){
locals().set(o.getIndex(), stack().pop());
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitFSUB(FSUB o){
stack().pop();
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitGETFIELD(GETFIELD o){
stack().pop();
Type t = o.getFieldType(cpg);
if ( t.equals(Type.BOOLEAN) ||
t.equals(Type.CHAR) ||
t.equals(Type.BYTE) ||
t.equals(Type.SHORT) )
t = Type.INT;
stack().push(t);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitGETSTATIC(GETSTATIC o){
Type t = o.getFieldType(cpg);
if ( t.equals(Type.BOOLEAN) ||
t.equals(Type.CHAR) ||
t.equals(Type.BYTE) ||
t.equals(Type.SHORT) )
t = Type.INT;
stack().push(t);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitGOTO(GOTO o){
// no stack changes.
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitGOTO_W(GOTO_W o){
// no stack changes.
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitI2B(I2B o){
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitI2C(I2C o){
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitI2D(I2D o){
stack().pop();
stack().push(Type.DOUBLE);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitI2F(I2F o){
stack().pop();
stack().push(Type.FLOAT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitI2L(I2L o){
stack().pop();
stack().push(Type.LONG);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitI2S(I2S o){
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIADD(IADD o){
stack().pop();
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIALOAD(IALOAD o){
stack().pop();
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIAND(IAND o){
stack().pop();
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIASTORE(IASTORE o){
stack().pop();
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitICONST(ICONST o){
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIDIV(IDIV o){
stack().pop();
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ACMPEQ(IF_ACMPEQ o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ACMPNE(IF_ACMPNE o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ICMPEQ(IF_ICMPEQ o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ICMPGE(IF_ICMPGE o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ICMPGT(IF_ICMPGT o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ICMPLE(IF_ICMPLE o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ICMPLT(IF_ICMPLT o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIF_ICMPNE(IF_ICMPNE o){
stack().pop();
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFEQ(IFEQ o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFGE(IFGE o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFGT(IFGT o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFLE(IFLE o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFLT(IFLT o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFNE(IFNE o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFNONNULL(IFNONNULL o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIFNULL(IFNULL o){
stack().pop();
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIINC(IINC o){
// stack is not changed.
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitILOAD(ILOAD o){
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitIMUL(IMUL o){
stack().pop();
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitINEG(INEG o){
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitINSTANCEOF(INSTANCEOF o){
stack().pop();
stack().push(Type.INT);
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitINVOKEINTERFACE(INVOKEINTERFACE o){
stack().pop(); //objectref
for (int i=0; i<o.getArgumentTypes(cpg).length; i++){
stack().pop();
}
// We are sure the invoked method will xRETURN eventually
// We simulate xRETURNs functionality here because we
// don't really "jump into" and simulate the invoked
// method.
if (o.getReturnType(cpg) != Type.VOID){
Type t = o.getReturnType(cpg);
if ( t.equals(Type.BOOLEAN) ||
t.equals(Type.CHAR) ||
t.equals(Type.BYTE) ||
t.equals(Type.SHORT) )
t = Type.INT;
stack().push(t);
}
}
/** Symbolically executes the corresponding Java Virtual Machine instruction. */
public void visitINVOKESPECIAL(INVOKESPECIAL o){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -