@Override
  public void visitPyWhileStatement(final @NotNull PyWhileStatement node) {
    final Instruction instruction = myBuilder.startNode(node);

    final var mainPartResults = visitPyConditionalPart(node.getWhilePart(), node);
    final var branchingPoints = mainPartResults.getSecond();

    // Loop edges
    if (myBuilder.prevInstruction != null) {
      myBuilder.addEdge(myBuilder.prevInstruction, instruction);
    }
    myBuilder.checkPending(instruction);

    final var isStaticallyTrue = mainPartResults.getThird() == Boolean.TRUE;
    final var elsePart = node.getElsePart();

    if (elsePart == null) {
      if (!isStaticallyTrue) {
        for (Pair<PsiElement, Instruction> pair : branchingPoints) {
          myBuilder.addPendingEdge(node, pair.getSecond());
        }
      }
    }
    else {
      final var elsePartInstruction = new ConditionalInstructionImpl(myBuilder, elsePart, mainPartResults.getFirst(), false);
      myBuilder.prevInstruction = null;
      myBuilder.addNode(elsePartInstruction);

      if (!isStaticallyTrue) {
        for (Pair<PsiElement, Instruction> pair : branchingPoints) {
          myBuilder.addEdge(pair.getSecond(), elsePartInstruction);
        }
      }
      elsePart.accept(this);
      myBuilder.addPendingEdge(node, myBuilder.prevInstruction);
    }

    myBuilder.flowAbrupted();
  }
@Override
  public void visitPyWhileStatement(final @NotNull PyWhileStatement node)