public Frame makeNewSubroutineStartFrame(int subLabel, int callerLabel) {
    IntList newSubroutines = subroutines.mutableCopy();
    newSubroutines.add(subLabel);
    Frame newFrame = new Frame(locals.getPrimary(), stack, IntList.makeImmutable(subLabel));
    return newFrame.mergeWithSubroutineCaller(this, subLabel, callerLabel);
  }
Makes a frame for a subroutine start block, given that this is the ending frame of one of the
subroutine's calling blocks. Subroutine calls may be nested and thus may have nested locals
state, so we start with an initial state as seen by the subroutine, but keep track of the
individual locals states that will be expected when the individual subroutine calls return.

@param subLabel label of subroutine start block
@param callerLabel {@code >=0;} label of the caller block where this frame came from.
@return a new instance to begin a called subroutine.
android/android_framework/dex-maker/src/main/java/com/android/dx/cf/code/Frame.java