break; case LDC: evalLDC(iter.byteAt(pos + 1), frame); break; case LDC_W : case LDC2_W : evalLDC(iter.u16bitAt(pos + 1), frame); break; case ILOAD: evalLoad(Type.INTEGER, iter.byteAt(pos + 1), frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, iter.byteAt(pos + 1), frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, iter.byteAt(pos + 1), frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, iter.byteAt(pos + 1), frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, iter.byteAt(pos + 1), frame, subroutine); break; case ILOAD_0: case ILOAD_2: case ILOAD_3: evalLoad(Type.INTEGER, opcode - ILOAD_0, frame, subroutine); break;
private void evalStore(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = simplePop(frame); // RETURN_ADDRESS is allowed by ASTORE if (! (expected == Type.OBJECT && type == Type.RETURN_ADDRESS)) verifyAssignable(expected, type); simpleSetLocal(index, type, frame); access(index, type, subroutine); }
private void evalLoad(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = frame.getLocal(index); verifyAssignable(expected, type); simplePush(type, frame); access(index, type, subroutine); }
switch (opcode) { case ILOAD: evalLoad(Type.INTEGER, index, frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, index, frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, index, frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, index, frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, index, frame, subroutine); break; case ISTORE: evalStore(Type.INTEGER, index, frame, subroutine); break; case LSTORE: evalStore(Type.LONG, index, frame, subroutine); break; case FSTORE: evalStore(Type.FLOAT, index, frame, subroutine); break; case DSTORE: evalStore(Type.DOUBLE, index, frame, subroutine); break; case ASTORE:
subroutines = scanner.scan(method); Executor executor = new Executor(clazz.getClassPool(), method.getConstPool()); frames = new Frame[codeLength]; frames[iter.lookAhead()] = firstFrame(method, maxLocals, maxStack);
private void evalStore(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = simplePop(frame); // RETURN_ADDRESS is allowed by ASTORE if (! (expected == Type.OBJECT && type == Type.RETURN_ADDRESS)) verifyAssignable(expected, type); simpleSetLocal(index, type, frame); access(index, type, subroutine); }
private void evalLoad(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = frame.getLocal(index); verifyAssignable(expected, type); simplePush(type, frame); access(index, type, subroutine); }
switch (opcode) { case ILOAD: evalLoad(Type.INTEGER, index, frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, index, frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, index, frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, index, frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, index, frame, subroutine); break; case ISTORE: evalStore(Type.INTEGER, index, frame, subroutine); break; case LSTORE: evalStore(Type.LONG, index, frame, subroutine); break; case FSTORE: evalStore(Type.FLOAT, index, frame, subroutine); break; case DSTORE: evalStore(Type.DOUBLE, index, frame, subroutine); break; case ASTORE:
subroutines = scanner.scan(method); Executor executor = new Executor(clazz.getClassPool(), method.getConstPool()); frames = new Frame[codeLength]; frames[iter.lookAhead()] = firstFrame(method, maxLocals, maxStack);
break; case LDC: evalLDC(iter.byteAt(pos + 1), frame); break; case LDC_W : case LDC2_W : evalLDC(iter.u16bitAt(pos + 1), frame); break; case ILOAD: evalLoad(Type.INTEGER, iter.byteAt(pos + 1), frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, iter.byteAt(pos + 1), frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, iter.byteAt(pos + 1), frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, iter.byteAt(pos + 1), frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, iter.byteAt(pos + 1), frame, subroutine); break; case ILOAD_0: case ILOAD_2: case ILOAD_3: evalLoad(Type.INTEGER, opcode - ILOAD_0, frame, subroutine); break;
private void evalStore(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = simplePop(frame); // RETURN_ADDRESS is allowed by ASTORE if (! (expected == Type.OBJECT && type == Type.RETURN_ADDRESS)) verifyAssignable(expected, type); simpleSetLocal(index, type, frame); access(index, type, subroutine); }
private void evalLoad(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = frame.getLocal(index); verifyAssignable(expected, type); simplePush(type, frame); access(index, type, subroutine); }
switch (opcode) { case ILOAD: evalLoad(Type.INTEGER, index, frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, index, frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, index, frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, index, frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, index, frame, subroutine); break; case ISTORE: evalStore(Type.INTEGER, index, frame, subroutine); break; case LSTORE: evalStore(Type.LONG, index, frame, subroutine); break; case FSTORE: evalStore(Type.FLOAT, index, frame, subroutine); break; case DSTORE: evalStore(Type.DOUBLE, index, frame, subroutine); break; case ASTORE:
subroutines = scanner.scan(method); Executor executor = new Executor(clazz.getClassPool(), method.getConstPool()); frames = new Frame[codeLength]; frames[iter.lookAhead()] = firstFrame(method, maxLocals, maxStack);
break; case LDC: evalLDC(iter.byteAt(pos + 1), frame); break; case LDC_W : case LDC2_W : evalLDC(iter.u16bitAt(pos + 1), frame); break; case ILOAD: evalLoad(Type.INTEGER, iter.byteAt(pos + 1), frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, iter.byteAt(pos + 1), frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, iter.byteAt(pos + 1), frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, iter.byteAt(pos + 1), frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, iter.byteAt(pos + 1), frame, subroutine); break; case ILOAD_0: case ILOAD_2: case ILOAD_3: evalLoad(Type.INTEGER, opcode - ILOAD_0, frame, subroutine); break;
private void evalStore(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = simplePop(frame); // RETURN_ADDRESS is allowed by ASTORE if (! (expected == Type.OBJECT && type == Type.RETURN_ADDRESS)) verifyAssignable(expected, type); simpleSetLocal(index, type, frame); access(index, type, subroutine); }
private void evalLoad(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode { Type type = frame.getLocal(index); verifyAssignable(expected, type); simplePush(type, frame); access(index, type, subroutine); }
switch (opcode) { case ILOAD: evalLoad(Type.INTEGER, index, frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, index, frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, index, frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, index, frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, index, frame, subroutine); break; case ISTORE: evalStore(Type.INTEGER, index, frame, subroutine); break; case LSTORE: evalStore(Type.LONG, index, frame, subroutine); break; case FSTORE: evalStore(Type.FLOAT, index, frame, subroutine); break; case DSTORE: evalStore(Type.DOUBLE, index, frame, subroutine); break; case ASTORE:
subroutines = scanner.scan(method); Executor executor = new Executor(clazz.getClassPool(), method.getConstPool()); frames = new Frame[codeLength]; frames[iter.lookAhead()] = firstFrame(method, maxLocals, maxStack);
break; case LDC: evalLDC(iter.byteAt(pos + 1), frame); break; case LDC_W : case LDC2_W : evalLDC(iter.u16bitAt(pos + 1), frame); break; case ILOAD: evalLoad(Type.INTEGER, iter.byteAt(pos + 1), frame, subroutine); break; case LLOAD: evalLoad(Type.LONG, iter.byteAt(pos + 1), frame, subroutine); break; case FLOAD: evalLoad(Type.FLOAT, iter.byteAt(pos + 1), frame, subroutine); break; case DLOAD: evalLoad(Type.DOUBLE, iter.byteAt(pos + 1), frame, subroutine); break; case ALOAD: evalLoad(Type.OBJECT, iter.byteAt(pos + 1), frame, subroutine); break; case ILOAD_0: case ILOAD_2: case ILOAD_3: evalLoad(Type.INTEGER, opcode - ILOAD_0, frame, subroutine); break;