Examples of BadBytecode


Examples of javassist.bytecode.BadBytecode

            return "(Ljava/lang/Object;I)S";
        case LALOAD:
            return "(Ljava/lang/Object;I)J";
        }

        throw new BadBytecode(opcode);
    }
View Full Code Here

Examples of org.hotswap.agent.javassist.bytecode.BadBytecode

            case SASTORE:
                evalArrayStore(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case POP:
                if (frame.pop() == org.hotswap.agent.javassist.bytecode.analysis.Type.TOP)
                    throw new BadBytecode("POP can not be used with a category 2 value, pos = " + pos);
                break;
            case POP2:
                frame.pop();
                frame.pop();
                break;
            case DUP: {
                org.hotswap.agent.javassist.bytecode.analysis.Type type = frame.peek();
                if (type == org.hotswap.agent.javassist.bytecode.analysis.Type.TOP)
                    throw new BadBytecode("DUP can not be used with a category 2 value, pos = " + pos);

                frame.push(frame.peek());
                break;
            }
            case DUP_X1:
            case DUP_X2: {
                org.hotswap.agent.javassist.bytecode.analysis.Type type = frame.peek();
                if (type == org.hotswap.agent.javassist.bytecode.analysis.Type.TOP)
                    throw new BadBytecode("DUP can not be used with a category 2 value, pos = " + pos);
                int end = frame.getTopIndex();
                int insert = end - (opcode - DUP_X1) - 1;
                frame.push(type);

                while (end > insert) {
                    frame.setStack(end, frame.getStack(end - 1));
                    end--;
                }
                frame.setStack(insert, type);
                break;
            }
            case DUP2:
                frame.push(frame.getStack(frame.getTopIndex() - 1));
                frame.push(frame.getStack(frame.getTopIndex() - 1));
                break;
            case DUP2_X1:
            case DUP2_X2: {
                int end = frame.getTopIndex();
                int insert = end - (opcode - DUP2_X1) - 1;
                org.hotswap.agent.javassist.bytecode.analysis.Type type1 = frame.getStack(frame.getTopIndex() - 1);
                org.hotswap.agent.javassist.bytecode.analysis.Type type2 = frame.peek();
                frame.push(type1);
                frame.push(type2);
                while (end > insert) {
                    frame.setStack(end, frame.getStack(end - 2));
                    end--;
                }
                frame.setStack(insert, type2);
                frame.setStack(insert - 1, type1);
                break;
            }
            case SWAP: {
                org.hotswap.agent.javassist.bytecode.analysis.Type type1 = frame.pop();
                org.hotswap.agent.javassist.bytecode.analysis.Type type2 = frame.pop();
                if (type1.getSize() == 2 || type2.getSize() == 2)
                    throw new BadBytecode("Swap can not be used with category 2 values, pos = " + pos);
                frame.push(type1);
                frame.push(type2);
                break;
            }

            // Math
            case IADD:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LADD:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case FADD:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case DADD:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;
            case ISUB:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LSUB:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case FSUB:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case DSUB:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;
            case IMUL:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LMUL:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case FMUL:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case DMUL:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;
            case IDIV:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LDIV:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case FDIV:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case DDIV:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;
            case IREM:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LREM:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case FREM:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case DREM:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;

            // Unary
            case INEG:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePeek(frame));
                break;
            case LNEG:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, simplePeek(frame));
                break;
            case FNEG:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, simplePeek(frame));
                break;
            case DNEG:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, simplePeek(frame));
                break;

            // Shifts
            case ISHL:
                evalShift(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LSHL:
                evalShift(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case ISHR:
                evalShift(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LSHR:
                evalShift(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case IUSHR:
                evalShift(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LUSHR:
                evalShift(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;

            // Bitwise Math
            case IAND:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LAND:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case IOR:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LOR:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case IXOR:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case LXOR:
                evalBinaryMath(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;

            case IINC: {
                int index = iter.byteAt(pos + 1);
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame.getLocal(index));
                access(index, org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, subroutine);
                break;
            }

            // Conversion
            case I2L:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case I2F:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case I2D:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;
            case L2I:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case L2F:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case L2D:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;
            case F2I:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case F2L:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case F2D:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, frame);
                break;
            case D2I:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame);
                break;
            case D2L:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, frame);
                break;
            case D2F:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, simplePop(frame));
                simplePush(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, frame);
                break;
            case I2B:
            case I2C:
            case I2S:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, frame.peek());
                break;
            case LCMP:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, simplePop(frame));
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, simplePop(frame));
                frame.push(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER);
                break;
            case FCMPL:
            case FCMPG:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, simplePop(frame));
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, simplePop(frame));
                frame.push(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER);
                break;
            case DCMPL:
            case DCMPG:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, simplePop(frame));
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, simplePop(frame));
                frame.push(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER);
                break;

            // Control flow
            case IFEQ:
            case IFNE:
            case IFLT:
            case IFGE:
            case IFGT:
            case IFLE:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePop(frame));
                break;
            case IF_ICMPEQ:
            case IF_ICMPNE:
            case IF_ICMPLT:
            case IF_ICMPGE:
            case IF_ICMPGT:
            case IF_ICMPLE:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePop(frame));
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePop(frame));
                break;
            case IF_ACMPEQ:
            case IF_ACMPNE:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.OBJECT, simplePop(frame));
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.OBJECT, simplePop(frame));
                break;
            case GOTO:
                break;
            case JSR:
                frame.push(org.hotswap.agent.javassist.bytecode.analysis.Type.RETURN_ADDRESS);
                break;
            case RET:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.RETURN_ADDRESS, frame.getLocal(iter.byteAt(pos + 1)));
                break;
            case TABLESWITCH:
            case LOOKUPSWITCH:
            case IRETURN:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER, simplePop(frame));
                break;
            case LRETURN:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.LONG, simplePop(frame));
                break;
            case FRETURN:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.FLOAT, simplePop(frame));
                break;
            case DRETURN:
                verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.DOUBLE, simplePop(frame));
                break;
            case ARETURN:
                try {
                    CtClass returnType = Descriptor.getReturnType(method.getDescriptor(), classPool);
                    verifyAssignable(org.hotswap.agent.javassist.bytecode.analysis.Type.get(returnType), simplePop(frame));
                } catch (NotFoundException e) {
                    throw new RuntimeException(e);
                }
                break;
            case RETURN:
                break;
            case GETSTATIC:
                evalGetField(opcode, iter.u16bitAt(pos + 1), frame);
                break;
            case PUTSTATIC:
                evalPutField(opcode, iter.u16bitAt(pos + 1), frame);
                break;
            case GETFIELD:
                evalGetField(opcode, iter.u16bitAt(pos + 1), frame);
                break;
            case PUTFIELD:
                evalPutField(opcode, iter.u16bitAt(pos + 1), frame);
                break;
            case INVOKEVIRTUAL:
            case INVOKESPECIAL:
            case INVOKESTATIC:
                evalInvokeMethod(opcode, iter.u16bitAt(pos + 1), frame);
                break;
            case INVOKEINTERFACE:
                evalInvokeIntfMethod(opcode, iter.u16bitAt(pos + 1), frame);
                break;
            case INVOKEDYNAMIC:
                evalInvokeDynamic(opcode, iter.u16bitAt(pos + 1), frame);
                break;
            case NEW:
                frame.push(resolveClassInfo(constPool.getClassInfo(iter.u16bitAt(pos + 1))));
                break;
            case NEWARRAY:
                evalNewArray(pos, iter, frame);
                break;
            case ANEWARRAY:
                evalNewObjectArray(pos, iter, frame);
                break;
            case ARRAYLENGTH: {
                org.hotswap.agent.javassist.bytecode.analysis.Type array = simplePop(frame);
                if (!array.isArray() && array != org.hotswap.agent.javassist.bytecode.analysis.Type.UNINIT)
                    throw new BadBytecode("Array length passed a non-array [pos = " + pos + "]: " + array);
                frame.push(org.hotswap.agent.javassist.bytecode.analysis.Type.INTEGER);
                break;
            }
            case ATHROW:
                verifyAssignable(THROWABLE_TYPE, simplePop(frame));
View Full Code Here

Examples of org.jboss.forge.furnace.proxy.javassist.bytecode.BadBytecode

            return "(Ljava/lang/Object;I)S";
        case LALOAD:
            return "(Ljava/lang/Object;I)J";
        }

        throw new BadBytecode(opcode);
    }
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.