📄 frame.java
字号:
case Opcodes.ISTORE :
case Opcodes.LSTORE :
case Opcodes.FSTORE :
case Opcodes.DSTORE :
case Opcodes.ASTORE :
value1 = interpreter.copyOperation( insn,
pop() );
var = ((VarInsnNode) insn).var;
setLocal( var,
value1 );
if ( value1.getSize() == 2 ) {
setLocal( var + 1,
interpreter.newValue( null ) );
}
if ( var > 0 ) {
final Value local = getLocal( var - 1 );
if ( local != null && local.getSize() == 2 ) {
setLocal( var + 1,
interpreter.newValue( null ) );
}
}
break;
case Opcodes.IASTORE :
case Opcodes.LASTORE :
case Opcodes.FASTORE :
case Opcodes.DASTORE :
case Opcodes.AASTORE :
case Opcodes.BASTORE :
case Opcodes.CASTORE :
case Opcodes.SASTORE :
value3 = pop();
value2 = pop();
value1 = pop();
interpreter.ternaryOperation( insn,
value1,
value2,
value3 );
break;
case Opcodes.POP :
if ( pop().getSize() == 2 ) {
throw new AnalyzerException( "Illegal use of POP" );
}
break;
case Opcodes.POP2 :
if ( pop().getSize() == 1 ) {
if ( pop().getSize() != 1 ) {
throw new AnalyzerException( "Illegal use of POP2" );
}
}
break;
case Opcodes.DUP :
value1 = pop();
if ( value1.getSize() != 1 ) {
throw new AnalyzerException( "Illegal use of DUP" );
}
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
case Opcodes.DUP_X1 :
value1 = pop();
value2 = pop();
if ( value1.getSize() != 1 || value2.getSize() != 1 ) {
throw new AnalyzerException( "Illegal use of DUP_X1" );
}
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
case Opcodes.DUP_X2 :
value1 = pop();
if ( value1.getSize() == 1 ) {
value2 = pop();
if ( value2.getSize() == 1 ) {
value3 = pop();
if ( value3.getSize() == 1 ) {
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value3 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
} else {
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
}
throw new AnalyzerException( "Illegal use of DUP_X2" );
case Opcodes.DUP2 :
value1 = pop();
if ( value1.getSize() == 1 ) {
value2 = pop();
if ( value2.getSize() == 1 ) {
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
} else {
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
throw new AnalyzerException( "Illegal use of DUP2" );
case Opcodes.DUP2_X1 :
value1 = pop();
if ( value1.getSize() == 1 ) {
value2 = pop();
if ( value2.getSize() == 1 ) {
value3 = pop();
if ( value3.getSize() == 1 ) {
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value3 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
}
} else {
value2 = pop();
if ( value2.getSize() == 1 ) {
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
}
throw new AnalyzerException( "Illegal use of DUP2_X1" );
case Opcodes.DUP2_X2 :
value1 = pop();
if ( value1.getSize() == 1 ) {
value2 = pop();
if ( value2.getSize() == 1 ) {
value3 = pop();
if ( value3.getSize() == 1 ) {
value4 = pop();
if ( value4.getSize() == 1 ) {
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value4 ) );
push( interpreter.copyOperation( insn,
value3 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
} else {
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value3 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
}
} else {
value2 = pop();
if ( value2.getSize() == 1 ) {
value3 = pop();
if ( value3.getSize() == 1 ) {
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value3 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
} else {
push( interpreter.copyOperation( insn,
value1 ) );
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
}
}
throw new AnalyzerException( "Illegal use of DUP2_X2" );
case Opcodes.SWAP :
value2 = pop();
value1 = pop();
if ( value1.getSize() != 1 || value2.getSize() != 1 ) {
throw new AnalyzerException( "Illegal use of SWAP" );
}
push( interpreter.copyOperation( insn,
value2 ) );
push( interpreter.copyOperation( insn,
value1 ) );
break;
case Opcodes.IADD :
case Opcodes.LADD :
case Opcodes.FADD :
case Opcodes.DADD :
case Opcodes.ISUB :
case Opcodes.LSUB :
case Opcodes.FSUB :
case Opcodes.DSUB :
case Opcodes.IMUL :
case Opcodes.LMUL :
case Opcodes.FMUL :
case Opcodes.DMUL :
case Opcodes.IDIV :
case Opcodes.LDIV :
case Opcodes.FDIV :
case Opcodes.DDIV :
case Opcodes.IREM :
case Opcodes.LREM :
case Opcodes.FREM :
case Opcodes.DREM :
value2 = pop();
value1 = pop();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -