makeLogicalRight() {
    const context = this.choiceContext;
    const forkContext = this.forkContext;

    if (context.processed) {
      /*
       * This got segments already from the child choice context.
       * Creates the next path from own true/false fork context.
       */
      let prevForkContext;

      switch (context.kind) {
        case '&&': // if true then go to the right-hand side.
          prevForkContext = context.trueForkContext;
          break;
        case '||': // if false then go to the right-hand side.
          prevForkContext = context.falseForkContext;
          break;
        case '??': // Both true/false can short-circuit, so needs the third path to go to the right-hand side. That's qqForkContext.
          prevForkContext = context.qqForkContext;
          break;
        default:
          throw new Error('unreachable');
      }

      forkContext.replaceHead(prevForkContext.makeNext(0, -1));
      prevForkContext.clear();
      context.processed = false;
    } else {
      /*
       * This did not get segments from the child choice context.
       * So addresses the head segments.
       * The head segments are the path of the left-hand operand.
       */
      switch (context.kind) {
        case '&&': // the false path can short-circuit.
          context.falseForkContext.add(forkContext.head);
          break;
        case '||': // the true path can short-circuit.
          context.trueForkContext.add(forkContext.head);
          break;
        case '??': // both can short-circuit.
          context.trueForkContext.add(forkContext.head);
          context.falseForkContext.add(forkContext.head);
          break;
        default:
          throw new Error('unreachable');
      }

      forkContext.replaceHead(forkContext.makeNext(-1, -1));
    }
  }
Makes a code path segment of the right-hand operand of a logical
expression.
@throws {Error} (Unreachable.)
@returns {void}