You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Before this change, `Frame.execute` did not invoke the interpreter's
`copyInstruction` method for all values that are pushed on the frame's
when executing some copying instructions.
For example, in the case of SWAP, copyInstruction is invoked:
value2 = pop();
value1 = pop();
push(interpreter.copyOperation(insn, value2));
push(interpreter.copyOperation(insn, value1));
For DUP on the other hand, the original value is pushed onto the
stack without notifying the interpreter:
value1 = pop();
push(value1);
push(interpreter.copyOperation(insn, value1));
This leads to a problem for the `SourceInterpreter`, which collects
for every value a set of potential producer instructions. Given the
bytecode sequence
NEW java/lang/Object
DUP
INVOKESPECIAL java/lang/Object.<init> ()V
In the frame of the INVOKESPECIAL instruction, the value on the stack
lists as its producer the `NEW` operation instead of the `DUP`, which
not expected.
0 commit comments