Lines Matching refs:frame

28  * Executor is responsible for modeling the effects of a JVM instruction on a frame.
55 * Execute the instruction, modeling the effects on the specified frame and subroutine.
62 * @param frame the frame to modify to represent the result of the instruction
66 public void execute(MethodInfo method, int pos, CodeIterator iter, Frame frame, Subroutine subroutine) throws BadBytecode {
76 frame.push(Type.UNINIT);
85 frame.push(Type.INTEGER);
89 frame.push(Type.LONG);
90 frame.push(Type.TOP);
95 frame.push(Type.FLOAT);
99 frame.push(Type.DOUBLE);
100 frame.push(Type.TOP);
104 frame.push(Type.INTEGER);
107 evalLDC(iter.byteAt(pos + 1), frame);
111 evalLDC(iter.u16bitAt(pos + 1), frame);
114 evalLoad(Type.INTEGER, iter.byteAt(pos + 1), frame, subroutine);
117 evalLoad(Type.LONG, iter.byteAt(pos + 1), frame, subroutine);
120 evalLoad(Type.FLOAT, iter.byteAt(pos + 1), frame, subroutine);
123 evalLoad(Type.DOUBLE, iter.byteAt(pos + 1), frame, subroutine);
126 evalLoad(Type.OBJECT, iter.byteAt(pos + 1), frame, subroutine);
132 evalLoad(Type.INTEGER, opcode - ILOAD_0, frame, subroutine);
138 evalLoad(Type.LONG, opcode - LLOAD_0, frame, subroutine);
144 evalLoad(Type.FLOAT, opcode - FLOAD_0, frame, subroutine);
150 evalLoad(Type.DOUBLE, opcode - DLOAD_0, frame, subroutine);
156 evalLoad(Type.OBJECT, opcode - ALOAD_0, frame, subroutine);
159 evalArrayLoad(Type.INTEGER, frame);
162 evalArrayLoad(Type.LONG, frame);
165 evalArrayLoad(Type.FLOAT, frame);
168 evalArrayLoad(Type.DOUBLE, frame);
171 evalArrayLoad(Type.OBJECT, frame);
176 evalArrayLoad(Type.INTEGER, frame);
179 evalStore(Type.INTEGER, iter.byteAt(pos + 1), frame, subroutine);
182 evalStore(Type.LONG, iter.byteAt(pos + 1), frame, subroutine);
185 evalStore(Type.FLOAT, iter.byteAt(pos + 1), frame, subroutine);
188 evalStore(Type.DOUBLE, iter.byteAt(pos + 1), frame, subroutine);
191 evalStore(Type.OBJECT, iter.byteAt(pos + 1), frame, subroutine);
197 evalStore(Type.INTEGER, opcode - ISTORE_0, frame, subroutine);
203 evalStore(Type.LONG, opcode - LSTORE_0, frame, subroutine);
209 evalStore(Type.FLOAT, opcode - FSTORE_0, frame, subroutine);
215 evalStore(Type.DOUBLE, opcode - DSTORE_0, frame, subroutine);
221 evalStore(Type.OBJECT, opcode - ASTORE_0, frame, subroutine);
224 evalArrayStore(Type.INTEGER, frame);
227 evalArrayStore(Type.LONG, frame);
230 evalArrayStore(Type.FLOAT, frame);
233 evalArrayStore(Type.DOUBLE, frame);
236 evalArrayStore(Type.OBJECT, frame);
241 evalArrayStore(Type.INTEGER, frame);
244 if (frame.pop() == Type.TOP)
248 frame.pop();
249 frame.pop();
252 Type type = frame.peek();
256 frame.push(frame.peek());
261 Type type = frame.peek();
264 int end = frame.getTopIndex();
266 frame.push(type);
269 frame.setStack(end, frame.getStack(end - 1));
272 frame.setStack(insert, type);
276 frame.push(frame.getStack(frame.getTopIndex() - 1));
277 frame.push(frame.getStack(frame.getTopIndex() - 1));
281 int end = frame.getTopIndex();
283 Type type1 = frame.getStack(frame.getTopIndex() - 1);
284 Type type2 = frame.peek();
285 frame.push(type1);
286 frame.push(type2);
288 frame.setStack(end, frame.getStack(end - 2));
291 frame.setStack(insert, type2);
292 frame.setStack(insert - 1, type1);
296 Type type1 = frame.pop();
297 Type type2 = frame.pop();
300 frame.push(type1);
301 frame.push(type2);
307 evalBinaryMath(Type.INTEGER, frame);
310 evalBinaryMath(Type.LONG, frame);
313 evalBinaryMath(Type.FLOAT, frame);
316 evalBinaryMath(Type.DOUBLE, frame);
319 evalBinaryMath(Type.INTEGER, frame);
322 evalBinaryMath(Type.LONG, frame);
325 evalBinaryMath(Type.FLOAT, frame);
328 evalBinaryMath(Type.DOUBLE, frame);
331 evalBinaryMath(Type.INTEGER, frame);
334 evalBinaryMath(Type.LONG, frame);
337 evalBinaryMath(Type.FLOAT, frame);
340 evalBinaryMath(Type.DOUBLE, frame);
343 evalBinaryMath(Type.INTEGER, frame);
346 evalBinaryMath(Type.LONG, frame);
349 evalBinaryMath(Type.FLOAT, frame);
352 evalBinaryMath(Type.DOUBLE, frame);
355 evalBinaryMath(Type.INTEGER, frame);
358 evalBinaryMath(Type.LONG, frame);
361 evalBinaryMath(Type.FLOAT, frame);
364 evalBinaryMath(Type.DOUBLE, frame);
369 verifyAssignable(Type.INTEGER, simplePeek(frame));
372 verifyAssignable(Type.LONG, simplePeek(frame));
375 verifyAssignable(Type.FLOAT, simplePeek(frame));
378 verifyAssignable(Type.DOUBLE, simplePeek(frame));
383 evalShift(Type.INTEGER, frame);
386 evalShift(Type.LONG, frame);
389 evalShift(Type.INTEGER, frame);
392 evalShift(Type.LONG, frame);
395 evalShift(Type.INTEGER,frame);
398 evalShift(Type.LONG, frame);
403 evalBinaryMath(Type.INTEGER, frame);
406 evalBinaryMath(Type.LONG, frame);
409 evalBinaryMath(Type.INTEGER, frame);
412 evalBinaryMath(Type.LONG, frame);
415 evalBinaryMath(Type.INTEGER, frame);
418 evalBinaryMath(Type.LONG, frame);
423 verifyAssignable(Type.INTEGER, frame.getLocal(index));
430 verifyAssignable(Type.INTEGER, simplePop(frame));
431 simplePush(Type.LONG, frame);
434 verifyAssignable(Type.INTEGER, simplePop(frame));
435 simplePush(Type.FLOAT, frame);
438 verifyAssignable(Type.INTEGER, simplePop(frame));
439 simplePush(Type.DOUBLE, frame);
442 verifyAssignable(Type.LONG, simplePop(frame));
443 simplePush(Type.INTEGER, frame);
446 verifyAssignable(Type.LONG, simplePop(frame));
447 simplePush(Type.FLOAT, frame);
450 verifyAssignable(Type.LONG, simplePop(frame));
451 simplePush(Type.DOUBLE, frame);
454 verifyAssignable(Type.FLOAT, simplePop(frame));
455 simplePush(Type.INTEGER, frame);
458 verifyAssignable(Type.FLOAT, simplePop(frame));
459 simplePush(Type.LONG, frame);
462 verifyAssignable(Type.FLOAT, simplePop(frame));
463 simplePush(Type.DOUBLE, frame);
466 verifyAssignable(Type.DOUBLE, simplePop(frame));
467 simplePush(Type.INTEGER, frame);
470 verifyAssignable(Type.DOUBLE, simplePop(frame));
471 simplePush(Type.LONG, frame);
474 verifyAssignable(Type.DOUBLE, simplePop(frame));
475 simplePush(Type.FLOAT, frame);
480 verifyAssignable(Type.INTEGER, frame.peek());
483 verifyAssignable(Type.LONG, simplePop(frame));
484 verifyAssignable(Type.LONG, simplePop(frame));
485 frame.push(Type.INTEGER);
489 verifyAssignable(Type.FLOAT, simplePop(frame));
490 verifyAssignable(Type.FLOAT, simplePop(frame));
491 frame.push(Type.INTEGER);
495 verifyAssignable(Type.DOUBLE, simplePop(frame));
496 verifyAssignable(Type.DOUBLE, simplePop(frame));
497 frame.push(Type.INTEGER);
507 verifyAssignable(Type.INTEGER, simplePop(frame));
515 verifyAssignable(Type.INTEGER, simplePop(frame));
516 verifyAssignable(Type.INTEGER, simplePop(frame));
520 verifyAssignable(Type.OBJECT, simplePop(frame));
521 verifyAssignable(Type.OBJECT, simplePop(frame));
526 frame.push(Type.RETURN_ADDRESS);
529 verifyAssignable(Type.RETURN_ADDRESS, frame.getLocal(iter.byteAt(pos + 1)));
534 verifyAssignable(Type.INTEGER, simplePop(frame));
537 verifyAssignable(Type.LONG, simplePop(frame));
540 verifyAssignable(Type.FLOAT, simplePop(frame));
543 verifyAssignable(Type.DOUBLE, simplePop(frame));
548 verifyAssignable(Type.get(returnType), simplePop(frame));
556 evalGetField(opcode, iter.u16bitAt(pos + 1), frame);
559 evalPutField(opcode, iter.u16bitAt(pos + 1), frame);
562 evalGetField(opcode, iter.u16bitAt(pos + 1), frame);
565 evalPutField(opcode, iter.u16bitAt(pos + 1), frame);
570 evalInvokeMethod(opcode, iter.u16bitAt(pos + 1), frame);
573 evalInvokeIntfMethod(opcode, iter.u16bitAt(pos + 1), frame);
578 frame.push(resolveClassInfo(constPool.getClassInfo(iter.u16bitAt(pos + 1))));
581 evalNewArray(pos, iter, frame);
584 evalNewObjectArray(pos, iter, frame);
587 Type array = simplePop(frame);
590 frame.push(Type.INTEGER);
594 verifyAssignable(THROWABLE_TYPE, simplePop(frame));
597 verifyAssignable(Type.OBJECT, simplePop(frame));
598 frame.push(typeFromDesc(constPool.getClassInfo(iter.u16bitAt(pos + 1))));
601 verifyAssignable(Type.OBJECT, simplePop(frame));
602 frame.push(Type.INTEGER);
606 verifyAssignable(Type.OBJECT, simplePop(frame));
609 evalWide(pos, iter, frame, subroutine);
612 evalNewObjectArray(pos, iter, frame);
616 verifyAssignable(Type.OBJECT, simplePop(frame));
621 frame.push(Type.RETURN_ADDRESS);
633 private void evalArrayLoad(Type expectedComponent, Frame frame) throws BadBytecode {
634 Type index = frame.pop();
635 Type array = frame.pop();
642 simplePush(Type.UNINIT, frame);
644 simplePush(expectedComponent, frame);
658 simplePush(component, frame);
661 private void evalArrayStore(Type expectedComponent, Frame frame) throws BadBytecode {
662 Type value = simplePop(frame);
663 Type index = frame.pop();
664 Type array = frame.pop();
694 private void evalBinaryMath(Type expected, Frame frame) throws BadBytecode {
695 Type value2 = simplePop(frame);
696 Type value1 = simplePop(frame);
700 simplePush(value1, frame);
703 private void evalGetField(int opcode, int index, Frame frame) throws BadBytecode {
709 verifyAssignable(objectType, simplePop(frame));
712 simplePush(type, frame);
715 private void evalInvokeIntfMethod(int opcode, int index, Frame frame) throws BadBytecode {
721 verifyAssignable(zeroExtend(types[--i]), simplePop(frame));
725 verifyAssignable(objectType, simplePop(frame));
729 simplePush(zeroExtend(returnType), frame);
732 private void evalInvokeMethod(int opcode, int index, Frame frame) throws BadBytecode {
738 verifyAssignable(zeroExtend(types[--i]), simplePop(frame));
742 verifyAssignable(objectType, simplePop(frame));
747 simplePush(zeroExtend(returnType), frame);
751 private void evalLDC(int index, Frame frame) throws BadBytecode {
777 simplePush(type, frame);
780 private void evalLoad(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode {
781 Type type = frame.getLocal(index);
785 simplePush(type, frame);
789 private void evalNewArray(int pos, CodeIterator iter, Frame frame) throws BadBytecode {
790 verifyAssignable(Type.INTEGER, simplePop(frame));
823 frame.push(type);
826 private void evalNewObjectArray(int pos, CodeIterator iter, Frame frame) throws BadBytecode {
841 verifyAssignable(Type.INTEGER, simplePop(frame));
844 simplePush(getType(name), frame);
847 private void evalPutField(int opcode, int index, Frame frame) throws BadBytecode {
851 verifyAssignable(type, simplePop(frame));
855 verifyAssignable(objectType, simplePop(frame));
859 private void evalShift(Type expected, Frame frame) throws BadBytecode {
860 Type value2 = simplePop(frame);
861 Type value1 = simplePop(frame);
865 simplePush(value1, frame);
868 private void evalStore(Type expected, int index, Frame frame, Subroutine subroutine) throws BadBytecode {
869 Type type = simplePop(frame);
874 simpleSetLocal(index, type, frame);
878 private void evalWide(int pos, CodeIterator iter, Frame frame, Subroutine subroutine) throws BadBytecode {
883 evalLoad(Type.INTEGER, index, frame, subroutine);
886 evalLoad(Type.LONG, index, frame, subroutine);
889 evalLoad(Type.FLOAT, index, frame, subroutine);
892 evalLoad(Type.DOUBLE, index, frame, subroutine);
895 evalLoad(Type.OBJECT, index, frame, subroutine);
898 evalStore(Type.INTEGER, index, frame, subroutine);
901 evalStore(Type.LONG, index, frame, subroutine);
904 evalStore(Type.FLOAT, index, frame, subroutine);
907 evalStore(Type.DOUBLE, index, frame, subroutine);
910 evalStore(Type.OBJECT, index, frame, subroutine);
913 verifyAssignable(Type.INTEGER, frame.getLocal(index));
916 verifyAssignable(Type.RETURN_ADDRESS, frame.getLocal(index));
964 private Type simplePeek(Frame frame) {
965 Type type = frame.peek();
966 return (type == Type.TOP) ? frame.getStack(frame.getTopIndex() - 1) : type;
969 private Type simplePop(Frame frame) {
970 Type type = frame.pop();
971 return (type == Type.TOP) ? frame.pop() : type;
974 private void simplePush(Type type, Frame frame) {
975 frame.push(type);
977 frame.push(Type.TOP);
988 private void simpleSetLocal(int index, Type type, Frame frame) {
989 frame.setLocal(index, type);
991 frame.setLocal(index + 1, Type.TOP);