-
Jason Zaugg authored
Before this change, `Frame.execute` did not invoke the interpreter's `copyOperation` method for all values that are pushed on the frame's when executing some copying instructions. For example, in the case of `SWAP`, `copyOperation` 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.
f77c2bc1