()
| 2682 | } |
| 2683 | |
| 2684 | private AstNode assignExpr() throws IOException { |
| 2685 | int tt = peekToken(); |
| 2686 | if (tt == Token.YIELD) { |
| 2687 | return returnOrYield(tt, true); |
| 2688 | } |
| 2689 | |
| 2690 | // Intentionally not calling lineNumber/columnNumber here! |
| 2691 | // We have not consumed any token yet, so the position would be invalid |
| 2692 | int startLine = ts.lineno, startColumn = ts.getTokenColumn(); |
| 2693 | |
| 2694 | AstNode pn = condExpr(); |
| 2695 | boolean hasEOL = false; |
| 2696 | tt = peekTokenOrEOL(); |
| 2697 | if (tt == Token.EOL) { |
| 2698 | hasEOL = true; |
| 2699 | tt = peekToken(); |
| 2700 | } |
| 2701 | if (Token.FIRST_ASSIGN <= tt && tt <= Token.LAST_ASSIGN) { |
| 2702 | consumeToken(); |
| 2703 | |
| 2704 | // Pull out JSDoc info and reset it before recursing. |
| 2705 | Comment jsdocNode = getAndResetJsDoc(); |
| 2706 | |
| 2707 | markDestructuring(pn); |
| 2708 | int opPos = ts.tokenBeg; |
| 2709 | if (isNotValidSimpleAssignmentTarget(pn)) |
| 2710 | reportError("msg.syntax.invalid.assignment.lhs"); |
| 2711 | |
| 2712 | pn = new Assignment(tt, pn, assignExpr(), opPos); |
| 2713 | |
| 2714 | if (jsdocNode != null) { |
| 2715 | pn.setJsDocNode(jsdocNode); |
| 2716 | } |
| 2717 | } else if (tt == Token.SEMI) { |
| 2718 | // This may be dead code added intentionally, for JSDoc purposes. |
| 2719 | // For example: /** @type Number */ C.prototype.x; |
| 2720 | if (currentJsDocComment != null) { |
| 2721 | pn.setJsDocNode(getAndResetJsDoc()); |
| 2722 | } |
| 2723 | } else if (!hasEOL && tt == Token.ARROW) { |
| 2724 | consumeToken(); |
| 2725 | pn = arrowFunction(pn, startLine, startColumn); |
| 2726 | } else if (pn.getIntProp(Node.OBJECT_LITERAL_DESTRUCTURING, 0) == 1 |
| 2727 | && !inDestructuringAssignment) { |
| 2728 | reportError("msg.syntax"); |
| 2729 | } |
| 2730 | return pn; |
| 2731 | } |
| 2732 | |
| 2733 | private static boolean isNotValidSimpleAssignmentTarget(AstNode pn) { |
| 2734 | if (pn.getType() == Token.GETPROP) |
no test coverage detected