(final int insn, final StackFrame frame, final Subroutine subroutine)
| 470 | // ------------------------------------------------------------------------- |
| 471 | |
| 472 | private void merge(final int insn, final StackFrame frame, final Subroutine subroutine) throws AnalyzerException { |
| 473 | StackFrame oldFrame = frames[insn]; |
| 474 | Subroutine oldSubroutine = subroutines[insn]; |
| 475 | boolean changes; |
| 476 | |
| 477 | if (oldFrame == null) { |
| 478 | frames[insn] = newFrame(frame, insns.get(insn)); |
| 479 | changes = true; |
| 480 | } else { |
| 481 | changes = false; |
| 482 | interpreter.isMergeCompatible(oldFrame, frame); |
| 483 | } |
| 484 | |
| 485 | if (oldSubroutine == null) { |
| 486 | if (subroutine != null) { |
| 487 | subroutines[insn] = subroutine.copy(); |
| 488 | changes = true; |
| 489 | } |
| 490 | } else { |
| 491 | if (subroutine != null) { |
| 492 | changes |= oldSubroutine.merge(subroutine); |
| 493 | } |
| 494 | } |
| 495 | if (changes && !queued[insn]) { |
| 496 | queued[insn] = true; |
| 497 | queue[top++] = insn; |
| 498 | } |
| 499 | } |
| 500 | |
| 501 | @SuppressWarnings("unchecked") |
| 502 | private void merge(final int insn, final StackFrame beforeJSR, final StackFrame afterRET, final Subroutine subroutineBeforeJSR, final boolean[] access) |
no test coverage detected