private ParseTree parsePostfixExpression() { SourcePosition start = getTreeStartLocation(); ParseTree operand = parseLeftHandSideExpression(); while (peekPostfixOperator()) { Token operator = nextToken(); operand = new PostfixExpressionTree(getTreeLocation(start), operand, operator); } return operand; }
private ParseTree parsePatternAssignmentTargetNoDefault(PatternKind kind) { ParseTree assignmentTarget; if (peekPatternStart()) { assignmentTarget = parsePattern(kind); } else { assignmentTarget = parseLeftHandSideExpression(); if (!assignmentTarget.isValidAssignmentTarget()) { reportError("invalid assignment target"); } if (kind == PatternKind.INITIALIZER && assignmentTarget.type != ParseTreeType.IDENTIFIER_EXPRESSION) { // We're in the context of a formal parameter list or a variable declaration statement reportError("Only an identifier or destructuring pattern is allowed here."); } } return assignmentTarget; }
private ParseTree parsePatternAssignmentTargetNoDefault(PatternKind kind) { ParseTree assignmentTarget; if (peekPatternStart()) { assignmentTarget = parsePattern(kind); } else { assignmentTarget = parseLeftHandSideExpression(); if (!assignmentTarget.isValidAssignmentTarget()) { reportError("invalid assignment target"); } if (kind == PatternKind.INITIALIZER && assignmentTarget.type != ParseTreeType.IDENTIFIER_EXPRESSION) { // We're in the context of a formal parameter list or a variable declaration statement reportError("Only an identifier or destructuring pattern is allowed here."); } } return assignmentTarget; }
private ParseTree parseUpdateExpression() { SourcePosition start = getTreeStartLocation(); if (peekUpdateOperator()) { Token operator = nextToken(); ParseTree operand = parseUnaryExpression(); return UpdateExpressionTree.prefix(getTreeLocation(start), operator, operand); } else { ParseTree lhs = parseLeftHandSideExpression(); if (peekUpdateOperator() && !peekImplicitSemiColon()) { // newline not allowed before an update operator. Token operator = nextToken(); return UpdateExpressionTree.postfix(getTreeLocation(start), operator, lhs); } else { return lhs; } } }