function parseConditionalExpression() {
        var expr, previousAllowIn, consequent, alternate, startToken;

        startToken = lookahead;

        expr = parseBinaryExpression();

        if (match('?')) {
            lex();
            previousAllowIn = state.allowIn;
            state.allowIn = true;
            consequent = parseAssignmentExpression();
            state.allowIn = previousAllowIn;
            expect(':');
            alternate = parseAssignmentExpression();

            expr = delegate.createConditionalExpression(expr, consequent, alternate);
            delegate.markEnd(expr, startToken);
        }

        return expr;
    }
function parseConditionalExpression() {
        var expr, previousAllowIn, consequent, alternate, startToken;

        startToken = lookahead;

        expr = parseBinaryExpression();

        if (match('?')) {
            lex();
            previousAllowIn = state.allowIn;
            state.allowIn = true;
            consequent = parseAssignmentExpression();
            state.allowIn = previousAllowIn;
            expect(':');
            alternate = parseAssignmentExpression();

            expr = delegate.createConditionalExpression(expr, consequent, alternate);
            delegate.markEnd(expr, startToken);
        }

        return expr;
    }
function parseConditionalExpression ( ) { var expr , previousAllowIn , consequent , alternate , startToken ; startToken = lookahead ; expr = parseBinaryExpression ( ) ; if ( match ( '?' ) ) { lex ( ) ; previousAllowIn = state . allowIn ; state . allowIn = true ; consequent = parseAssignmentExpression ( ) ; state . allowIn = previousAllowIn ; expect ( ':' ) ; alternate = parseAssignmentExpression ( ) ; expr = delegate . createConditionalExpression ( expr , consequent , alternate ) ; delegate . markEnd ( expr , startToken ) ; } return expr ; }
11.12 Conditional Operator
11 . 12 Conditional Operator
ECMA - 262 12. 2 Conditional Operator