code: final void accept(final MethodWriter methodWriter) {
      // Compute the number of locals, ignoring TOP types that are just after a LONG or a DOUBLE, and
      // all trailing TOP types.
      int[] localTypes = inputLocals;
      int nLocal = 0;
      int nTrailingTop = 0;
      int i = 0;
      while (i < localTypes.length) {
        int localType = localTypes[i];
        i += (localType == LONG || localType == DOUBLE) ? 2 : 1;
        if (localType == TOP) {
          nTrailingTop++;
        } else {
          nLocal += nTrailingTop + 1;
          nTrailingTop = 0;
        }
      }
      // Compute the stack size, ignoring TOP types that are just after a LONG or a DOUBLE.
      int[] stackTypes = inputStack;
      int nStack = 0;
      i = 0;
      while (i < stackTypes.length) {
        int stackType = stackTypes[i];
        i += (stackType == LONG || stackType == DOUBLE) ? 2 : 1;
        nStack++;
      }
      // Visit the frame and its content.
      int frameIndex = methodWriter.visitFrameStart(owner.bytecodeOffset, nLocal, nStack);
      i = 0;
      while (nLocal-- > 0) {
        int localType = localTypes[i];
        i += (localType == LONG || localType == DOUBLE) ? 2 : 1;
        methodWriter.visitAbstractType(frameIndex++, localType);
      }
      i = 0;
      while (nStack-- > 0) {
        int stackType = stackTypes[i];
        i += (stackType == LONG || stackType == DOUBLE) ? 2 : 1;
        methodWriter.visitAbstractType(frameIndex++, stackType);
      }
      methodWriter.visitFrameEnd();
    }
docs: Makes the given {@link MethodWriter} visit the input frame of this {@link Frame}. The visit is
  done with the {@link MethodWriter#visitFrameStart}, {@link MethodWriter#visitAbstractType} and
  {@link MethodWriter#visitFrameEnd} methods.
  
  @param methodWriter the {@link MethodWriter} that should visit the input frame of this {@link
  Frame}.