pushChoiceContext(kind, isForkingAsResult) {
		this.choiceContext = new ChoiceContext(
			this.choiceContext,
			kind,
			isForkingAsResult,
			this.forkContext,
		);
	}
Creates a context for ConditionalExpression, LogicalExpression, AssignmentExpression (logical assignments only),
IfStatement, WhileStatement, DoWhileStatement, or ForStatement.

LogicalExpressions have cases that it goes different paths between the
`true` case and the `false` case.

For Example:

    if (a || b) {
        foo();
    } else {
        bar();
    }

In this case, `b` is evaluated always in the code path of the `else`
block, but it's not so in the code path of the `if` block.
So there are 3 paths.

    a -> foo();
    a -> b -> foo();
    a -> b -> bar();
@param {string} kind A kind string.
  If the new context is LogicalExpression's or AssignmentExpression's, this is `"&&"` or `"||"` or `"??"`.
  If it's IfStatement's or ConditionalExpression's, this is `"test"`.
  Otherwise, this is `"loop"`.
@param {boolean} isForkingAsResult Indicates if the result of the choice
     creates a fork.
@returns {void}