private int doInvokeDynamic(int pos, byte[] code) throws BadBytecode { int i = ByteArray.readU16bit(code, pos + 1); String desc = cpool.getInvokeDynamicType(i); checkParamTypes(desc, 1); // assume CosntPool#REF_invokeStatic /* TypeData target = stackTypes[--stackTop]; if (target instanceof TypeData.UninitTypeVar && target.isUninit()) constructorCalled((TypeData.UninitTypeVar)target); */ pushMemberType(desc); return 5; }
switch (op) { case Opcode.ILOAD : doWIDE_XLOAD(pos, code, INTEGER); break; case Opcode.LLOAD : doWIDE_XLOAD(pos, code, LONG); break; case Opcode.FLOAD : doWIDE_XLOAD(pos, code, FLOAT); break; case Opcode.DLOAD : doWIDE_XLOAD(pos, code, DOUBLE); break; case Opcode.ALOAD : { int index = ByteArray.readU16bit(code, pos + 2); doALOAD(index); break; } case Opcode.ISTORE : doWIDE_STORE(pos, code, INTEGER); break; case Opcode.LSTORE : doWIDE_STORE(pos, code, LONG); break; case Opcode.FSTORE : doWIDE_STORE(pos, code, FLOAT); break; case Opcode.DSTORE : doWIDE_STORE(pos, code, DOUBLE); break;
private int doOpcode54_95(int pos, byte[] code, int op) throws BadBytecode { switch (op) { case Opcode.ISTORE : return doXSTORE(pos, code, INTEGER); case Opcode.LSTORE : return doXSTORE(pos, code, LONG); case Opcode.FSTORE : return doXSTORE(pos, code, FLOAT); case Opcode.DSTORE : return doXSTORE(pos, code, DOUBLE); case Opcode.ASTORE : return doASTORE(code[pos + 1] & 0xff); case Opcode.ISTORE_0 : case Opcode.ISTORE_1 : case Opcode.ASTORE_3 : { int var = op - Opcode.ASTORE_0; doASTORE(var); break; } case Opcode.IASTORE : case Opcode.DUP_X2 : { int len = op - Opcode.DUP_X1 + 2; doDUP_XX(1, len); int sp = stackTop; stackTypes[sp - len] = stackTypes[sp]; break; } case Opcode.DUP2 : doDUP_XX(2, 2);
visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.IF_ICMPEQ : case Opcode.IF_ACMPNE : stackTop -= 2; // branch visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.GOTO : visitGoto(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; // branch case Opcode.JSR : visitJSR(pos, code); return 3; // branch case Opcode.RET : visitRET(pos, code); return 2; case Opcode.TABLESWITCH : { int high = ByteArray.read32bit(code, pos2 + 4); int n = high - low + 1; visitTableSwitch(pos, code, n, pos2 + 8, ByteArray.read32bit(code, pos2 - 4)); return n * 4 + 16 - (pos & 3); } case Opcode.LOOKUPSWITCH : { visitLookupSwitch(pos, code, n, pos2 + 4, ByteArray.read32bit(code, pos2 - 4)); return n * 8 + 12 - (pos & 3); } case Opcode.IRETURN : stackTop--;
return op == Opcode.SIPUSH ? 3 : 2; case Opcode.LDC : doLDC(code[pos + 1] & 0xff); return 2; case Opcode.LDC_W : case Opcode.LDC2_W : doLDC(ByteArray.readU16bit(code, pos + 1)); return 3; case Opcode.ILOAD : return doXLOAD(INTEGER, code, pos); case Opcode.LLOAD : return doXLOAD(LONG, code, pos); case Opcode.FLOAD : return doXLOAD(FLOAT, code, pos); case Opcode.DLOAD : return doXLOAD(DOUBLE, code, pos); case Opcode.ALOAD : return doALOAD(code[pos + 1] & 0xff); case Opcode.ILOAD_0 : case Opcode.ILOAD_1 :
private int doInvokeMethod(int pos, byte[] code, boolean notStatic) throws BadBytecode { int i = ByteArray.readU16bit(code, pos + 1); String desc = cpool.getMethodrefType(i); checkParamTypes(desc, 1); if (notStatic) { String className = cpool.getMethodrefClassName(i); TypeData target = stackTypes[--stackTop]; if (target instanceof TypeData.UninitTypeVar && target.isUninit()) constructorCalled(target, ((TypeData.UninitTypeVar)target).offset()); else if (target instanceof TypeData.UninitData) constructorCalled(target, ((TypeData.UninitData)target).offset()); target.setType(className, classPool); } pushMemberType(desc); return 3; }
k++; checkParamTypes(desc, k); if (!array && (c == 'J' || c == 'D')) stackTop -= 2;
visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.IF_ICMPEQ : case Opcode.IF_ACMPNE : stackTop -= 2; // branch visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.GOTO : visitGoto(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; // branch case Opcode.JSR : visitJSR(pos, code); return 3; // branch case Opcode.RET : visitRET(pos, code); return 2; case Opcode.TABLESWITCH : { int high = ByteArray.read32bit(code, pos2 + 4); int n = high - low + 1; visitTableSwitch(pos, code, n, pos2 + 8, ByteArray.read32bit(code, pos2 - 4)); return n * 4 + 16 - (pos & 3); } case Opcode.LOOKUPSWITCH : { visitLookupSwitch(pos, code, n, pos2 + 4, ByteArray.read32bit(code, pos2 - 4)); return n * 8 + 12 - (pos & 3); } case Opcode.IRETURN : stackTop--;
return op == Opcode.SIPUSH ? 3 : 2; case Opcode.LDC : doLDC(code[pos + 1] & 0xff); return 2; case Opcode.LDC_W : case Opcode.LDC2_W : doLDC(ByteArray.readU16bit(code, pos + 1)); return 3; case Opcode.ILOAD : return doXLOAD(INTEGER, code, pos); case Opcode.LLOAD : return doXLOAD(LONG, code, pos); case Opcode.FLOAD : return doXLOAD(FLOAT, code, pos); case Opcode.DLOAD : return doXLOAD(DOUBLE, code, pos); case Opcode.ALOAD : return doALOAD(code[pos + 1] & 0xff); case Opcode.ILOAD_0 : case Opcode.ILOAD_1 :
private int doInvokeMethod(int pos, byte[] code, boolean notStatic) throws BadBytecode { int i = ByteArray.readU16bit(code, pos + 1); String desc = cpool.getMethodrefType(i); checkParamTypes(desc, 1); if (notStatic) { String className = cpool.getMethodrefClassName(i); TypeData target = stackTypes[--stackTop]; if (target instanceof TypeData.UninitTypeVar && target.isUninit()) constructorCalled(target, ((TypeData.UninitTypeVar)target).offset()); else if (target instanceof TypeData.UninitData) constructorCalled(target, ((TypeData.UninitData)target).offset()); target.setType(className, classPool); } pushMemberType(desc); return 3; }
k++; checkParamTypes(desc, k); if (!array && (c == 'J' || c == 'D')) stackTop -= 2;
visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.IF_ICMPEQ : case Opcode.IF_ACMPNE : stackTop -= 2; // branch visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.GOTO : visitGoto(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; // branch case Opcode.JSR : visitJSR(pos, code); return 3; // branch case Opcode.RET : visitRET(pos, code); return 2; case Opcode.TABLESWITCH : { int high = ByteArray.read32bit(code, pos2 + 4); int n = high - low + 1; visitTableSwitch(pos, code, n, pos2 + 8, ByteArray.read32bit(code, pos2 - 4)); return n * 4 + 16 - (pos & 3); } case Opcode.LOOKUPSWITCH : { visitLookupSwitch(pos, code, n, pos2 + 4, ByteArray.read32bit(code, pos2 - 4)); return n * 8 + 12 - (pos & 3); } case Opcode.IRETURN : stackTop--;
switch (op) { case Opcode.ILOAD : doWIDE_XLOAD(pos, code, INTEGER); break; case Opcode.LLOAD : doWIDE_XLOAD(pos, code, LONG); break; case Opcode.FLOAD : doWIDE_XLOAD(pos, code, FLOAT); break; case Opcode.DLOAD : doWIDE_XLOAD(pos, code, DOUBLE); break; case Opcode.ALOAD : { int index = ByteArray.readU16bit(code, pos + 2); doALOAD(index); break; } case Opcode.ISTORE : doWIDE_STORE(pos, code, INTEGER); break; case Opcode.LSTORE : doWIDE_STORE(pos, code, LONG); break; case Opcode.FSTORE : doWIDE_STORE(pos, code, FLOAT); break; case Opcode.DSTORE : doWIDE_STORE(pos, code, DOUBLE); break;
private int doOpcode54_95(int pos, byte[] code, int op) throws BadBytecode { switch (op) { case Opcode.ISTORE : return doXSTORE(pos, code, INTEGER); case Opcode.LSTORE : return doXSTORE(pos, code, LONG); case Opcode.FSTORE : return doXSTORE(pos, code, FLOAT); case Opcode.DSTORE : return doXSTORE(pos, code, DOUBLE); case Opcode.ASTORE : return doASTORE(code[pos + 1] & 0xff); case Opcode.ISTORE_0 : case Opcode.ISTORE_1 : case Opcode.ASTORE_3 : { int var = op - Opcode.ASTORE_0; doASTORE(var); break; } case Opcode.IASTORE : case Opcode.DUP_X2 : { int len = op - Opcode.DUP_X1 + 2; doDUP_XX(1, len); int sp = stackTop; stackTypes[sp - len] = stackTypes[sp]; break; } case Opcode.DUP2 : doDUP_XX(2, 2);
return op == Opcode.SIPUSH ? 3 : 2; case Opcode.LDC : doLDC(code[pos + 1] & 0xff); return 2; case Opcode.LDC_W : case Opcode.LDC2_W : doLDC(ByteArray.readU16bit(code, pos + 1)); return 3; case Opcode.ILOAD : return doXLOAD(INTEGER, code, pos); case Opcode.LLOAD : return doXLOAD(LONG, code, pos); case Opcode.FLOAD : return doXLOAD(FLOAT, code, pos); case Opcode.DLOAD : return doXLOAD(DOUBLE, code, pos); case Opcode.ALOAD : return doALOAD(code[pos + 1] & 0xff); case Opcode.ILOAD_0 : case Opcode.ILOAD_1 :
private int doInvokeDynamic(int pos, byte[] code) throws BadBytecode { int i = ByteArray.readU16bit(code, pos + 1); String desc = cpool.getInvokeDynamicType(i); checkParamTypes(desc, 1); // assume CosntPool#REF_invokeStatic /* TypeData target = stackTypes[--stackTop]; if (target instanceof TypeData.UninitTypeVar && target.isUninit()) constructorCalled((TypeData.UninitTypeVar)target); */ pushMemberType(desc); return 5; }
private int doInvokeMethod(int pos, byte[] code, boolean notStatic) throws BadBytecode { int i = ByteArray.readU16bit(code, pos + 1); String desc = cpool.getMethodrefType(i); checkParamTypes(desc, 1); if (notStatic) { String className = cpool.getMethodrefClassName(i); TypeData target = stackTypes[--stackTop]; if (target instanceof TypeData.UninitTypeVar && target.isUninit()) constructorCalled(target, ((TypeData.UninitTypeVar)target).offset()); else if (target instanceof TypeData.UninitData) constructorCalled(target, ((TypeData.UninitData)target).offset()); target.setType(className, classPool); } pushMemberType(desc); return 3; }
k++; checkParamTypes(desc, k); if (!array && (c == 'J' || c == 'D')) stackTop -= 2;
visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.IF_ICMPEQ : case Opcode.IF_ACMPNE : stackTop -= 2; // branch visitBranch(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; case Opcode.GOTO : visitGoto(pos, code, ByteArray.readS16bit(code, pos + 1)); return 3; // branch case Opcode.JSR : visitJSR(pos, code); return 3; // branch case Opcode.RET : visitRET(pos, code); return 2; case Opcode.TABLESWITCH : { int high = ByteArray.read32bit(code, pos2 + 4); int n = high - low + 1; visitTableSwitch(pos, code, n, pos2 + 8, ByteArray.read32bit(code, pos2 - 4)); return n * 4 + 16 - (pos & 3); } case Opcode.LOOKUPSWITCH : { visitLookupSwitch(pos, code, n, pos2 + 4, ByteArray.read32bit(code, pos2 - 4)); return n * 8 + 12 - (pos & 3); } case Opcode.IRETURN : stackTop--;
switch (op) { case Opcode.ILOAD : doWIDE_XLOAD(pos, code, INTEGER); break; case Opcode.LLOAD : doWIDE_XLOAD(pos, code, LONG); break; case Opcode.FLOAD : doWIDE_XLOAD(pos, code, FLOAT); break; case Opcode.DLOAD : doWIDE_XLOAD(pos, code, DOUBLE); break; case Opcode.ALOAD : { int index = ByteArray.readU16bit(code, pos + 2); doALOAD(index); break; } case Opcode.ISTORE : return doWIDE_STORE(pos, code, INTEGER); case Opcode.LSTORE : return doWIDE_STORE(pos, code, LONG); case Opcode.FSTORE : return doWIDE_STORE(pos, code, FLOAT); case Opcode.DSTORE : return doWIDE_STORE(pos, code, DOUBLE); case Opcode.ASTORE : { int index = ByteArray.readU16bit(code, pos + 2); return doASTORE(index); } case Opcode.IINC :