()
| 144317 | // 11.10 Binary Bitwise Operators |
| 144318 | // 11.11 Binary Logical Operators |
| 144319 | function parseBinaryExpression() { |
| 144320 | var marker, markers, expr, token, prec, stack, right, operator, left, i; |
| 144321 | marker = lookahead; |
| 144322 | left = parseUnaryExpression(); |
| 144323 | token = lookahead; |
| 144324 | prec = binaryPrecedence(token); |
| 144325 | if (prec === 0) return left; |
| 144326 | token.prec = prec; |
| 144327 | lex(); |
| 144328 | markers = [ |
| 144329 | marker, |
| 144330 | lookahead |
| 144331 | ]; |
| 144332 | right = parseUnaryExpression(); |
| 144333 | stack = [ |
| 144334 | left, |
| 144335 | token, |
| 144336 | right |
| 144337 | ]; |
| 144338 | while((prec = binaryPrecedence(lookahead)) > 0){ |
| 144339 | // Reduce: make a binary expression from the three topmost entries. |
| 144340 | while(stack.length > 2 && prec <= stack[stack.length - 2].prec){ |
| 144341 | right = stack.pop(); |
| 144342 | operator = stack.pop().value; |
| 144343 | left = stack.pop(); |
| 144344 | markers.pop(); |
| 144345 | expr = finishBinaryExpression(operator, left, right); |
| 144346 | stack.push(expr); |
| 144347 | } // Shift. |
| 144348 | token = lex(); |
| 144349 | token.prec = prec; |
| 144350 | stack.push(token); |
| 144351 | markers.push(lookahead); |
| 144352 | expr = parseUnaryExpression(); |
| 144353 | stack.push(expr); |
| 144354 | } // Final reduce to clean-up the stack. |
| 144355 | i = stack.length - 1; |
| 144356 | expr = stack[i]; |
| 144357 | markers.pop(); |
| 144358 | while(i > 1){ |
| 144359 | markers.pop(); |
| 144360 | expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); |
| 144361 | i -= 2; |
| 144362 | } |
| 144363 | return expr; |
| 144364 | } // 11.12 Conditional Operator |
| 144365 | function parseConditionalExpression() { |
| 144366 | var expr, consequent, alternate; |
| 144367 | expr = parseBinaryExpression(); |
no test coverage detected