@NotNull
  InstructionKey push(int nextOffset, int returnOffset) {
    if(myCallStack.length > 100) { // normally it's way below 100, as it's the number of levels of nested 'finally' blocks
      throw new OverflowException(myOffset); // most likely the graph traversal is in an endless loop
    }
    int[] nextStack = ArrayUtil.append(myCallStack, returnOffset);
    return new InstructionKey(nextOffset, nextStack);
  }
@NotNull
  InstructionKey push(int nextOffset, int returnOffset)