()
| 129256 | |
| 129257 | |
| 129258 | function parseBinaryExpression() { |
| 129259 | var marker, markers, expr, token, prec, stack, right, operator, left, i; |
| 129260 | marker = lookahead; |
| 129261 | left = parseUnaryExpression(); |
| 129262 | token = lookahead; |
| 129263 | prec = binaryPrecedence(token); |
| 129264 | |
| 129265 | if (prec === 0) { |
| 129266 | return left; |
| 129267 | } |
| 129268 | |
| 129269 | token.prec = prec; |
| 129270 | lex(); |
| 129271 | markers = [marker, lookahead]; |
| 129272 | right = parseUnaryExpression(); |
| 129273 | stack = [left, token, right]; |
| 129274 | |
| 129275 | while ((prec = binaryPrecedence(lookahead)) > 0) { |
| 129276 | // Reduce: make a binary expression from the three topmost entries. |
| 129277 | while (stack.length > 2 && prec <= stack[stack.length - 2].prec) { |
| 129278 | right = stack.pop(); |
| 129279 | operator = stack.pop().value; |
| 129280 | left = stack.pop(); |
| 129281 | markers.pop(); |
| 129282 | expr = finishBinaryExpression(operator, left, right); |
| 129283 | stack.push(expr); |
| 129284 | } // Shift. |
| 129285 | |
| 129286 | |
| 129287 | token = lex(); |
| 129288 | token.prec = prec; |
| 129289 | stack.push(token); |
| 129290 | markers.push(lookahead); |
| 129291 | expr = parseUnaryExpression(); |
| 129292 | stack.push(expr); |
| 129293 | } // Final reduce to clean-up the stack. |
| 129294 | |
| 129295 | |
| 129296 | i = stack.length - 1; |
| 129297 | expr = stack[i]; |
| 129298 | markers.pop(); |
| 129299 | |
| 129300 | while (i > 1) { |
| 129301 | markers.pop(); |
| 129302 | expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); |
| 129303 | i -= 2; |
| 129304 | } |
| 129305 | |
| 129306 | return expr; |
| 129307 | } // 11.12 Conditional Operator |
| 129308 | |
| 129309 | |
| 129310 | function parseConditionalExpression() { |
no test coverage detected