Skip to content

GitLab

  • Menu
Projects Groups Snippets
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • asm asm
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 4
    • Issues 4
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 2
    • Merge requests 2
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • asm
  • asmasm
  • Merge requests
  • !180

Closed
Created Jun 11, 2018 by Jason Zaugg@retronymmContributor
  • Report abuse
Report abuse

Call interpreter.copyOperation consistently

  • Overview 3
  • Commits 1
  • Pipelines 1
  • Changes 1

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.

Assignee
Assign to
Reviewer
Request review from
Time tracking
Source branch: unfork/copy-instruction