MCPcopy Index your code
hub / github.com/BloombergGraphics/whatiscode / parseBinaryExpression

Function parseBinaryExpression

scripts/libs/esprima.js:2942–2992  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

2940 // 11.11 Binary Logical Operators
2941
2942 function parseBinaryExpression() {
2943 var marker, markers, expr, token, prec, stack, right, operator, left, i;
2944
2945 marker = lookahead;
2946 left = parseUnaryExpression();
2947
2948 token = lookahead;
2949 prec = binaryPrecedence(token, state.allowIn);
2950 if (prec === 0) {
2951 return left;
2952 }
2953 token.prec = prec;
2954 lex();
2955
2956 markers = [marker, lookahead];
2957 right = parseUnaryExpression();
2958
2959 stack = [left, token, right];
2960
2961 while ((prec = binaryPrecedence(lookahead, state.allowIn)) > 0) {
2962
2963 // Reduce: make a binary expression from the three topmost entries.
2964 while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {
2965 right = stack.pop();
2966 operator = stack.pop().value;
2967 left = stack.pop();
2968 markers.pop();
2969 expr = new WrappingNode(markers[markers.length - 1]).finishBinaryExpression(operator, left, right);
2970 stack.push(expr);
2971 }
2972
2973 // Shift.
2974 token = lex();
2975 token.prec = prec;
2976 stack.push(token);
2977 markers.push(lookahead);
2978 expr = parseUnaryExpression();
2979 stack.push(expr);
2980 }
2981
2982 // Final reduce to clean-up the stack.
2983 i = stack.length - 1;
2984 expr = stack[i];
2985 markers.pop();
2986 while (i > 1) {
2987 expr = new WrappingNode(markers.pop()).finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);
2988 i -= 2;
2989 }
2990
2991 return expr;
2992 }
2993
2994
2995 // 11.12 Conditional Operator

Callers 1

Calls 3

parseUnaryExpressionFunction · 0.85
binaryPrecedenceFunction · 0.85
lexFunction · 0.85

Tested by

no test coverage detected