Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index 056c011381994284826075e74d3452731579e293..d6ff745d4ccc9e4ce7df89e2ee11efdd4579db41 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -2247,11 +2247,8 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
// TemplateLiteral |
// do Block |
- int beg_pos = scanner()->peek_location().beg_pos; |
- int end_pos = scanner()->peek_location().end_pos; |
- ExpressionT result = this->EmptyExpression(); |
- Token::Value token = peek(); |
- switch (token) { |
+ int beg_pos = peek_position(); |
+ switch (peek()) { |
case Token::THIS: { |
BindingPatternUnexpectedToken(classifier); |
Consume(Token::THIS); |
@@ -2261,29 +2258,22 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
if (IsClassConstructor(function_state_->kind())) { |
ReportMessage(MessageTemplate::kStrongConstructorThis); |
*ok = false; |
- break; |
+ return this->EmptyExpression(); |
} |
} |
- result = this->ThisExpression(scope_, factory(), beg_pos); |
- break; |
+ return this->ThisExpression(scope_, factory(), beg_pos); |
} |
case Token::NULL_LITERAL: |
case Token::TRUE_LITERAL: |
case Token::FALSE_LITERAL: |
BindingPatternUnexpectedToken(classifier); |
- Next(); |
- result = |
- this->ExpressionFromLiteral(token, beg_pos, scanner(), factory()); |
- break; |
+ return this->ExpressionFromLiteral(Next(), beg_pos, scanner(), factory()); |
case Token::SMI: |
case Token::NUMBER: |
classifier->RecordBindingPatternError( |
scanner()->peek_location(), MessageTemplate::kUnexpectedTokenNumber); |
- Next(); |
- result = |
- this->ExpressionFromLiteral(token, beg_pos, scanner(), factory()); |
- break; |
+ return this->ExpressionFromLiteral(Next(), beg_pos, scanner(), factory()); |
case Token::IDENTIFIER: |
case Token::LET: |
@@ -2292,46 +2282,40 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
case Token::FUTURE_STRICT_RESERVED_WORD: { |
// Using eval or arguments in this context is OK even in strict mode. |
IdentifierT name = ParseAndClassifyIdentifier(classifier, CHECK_OK); |
- result = this->ExpressionFromIdentifier(name, beg_pos, end_pos, scope_, |
- factory()); |
- break; |
+ return this->ExpressionFromIdentifier( |
+ name, beg_pos, scanner()->location().end_pos, scope_, factory()); |
} |
case Token::STRING: { |
classifier->RecordBindingPatternError( |
scanner()->peek_location(), MessageTemplate::kUnexpectedTokenString); |
Consume(Token::STRING); |
- result = this->ExpressionFromString(beg_pos, scanner(), factory()); |
- break; |
+ return this->ExpressionFromString(beg_pos, scanner(), factory()); |
} |
case Token::ASSIGN_DIV: |
classifier->RecordBindingPatternError( |
scanner()->peek_location(), MessageTemplate::kUnexpectedTokenRegExp); |
- result = this->ParseRegExpLiteral(true, classifier, CHECK_OK); |
- break; |
+ return this->ParseRegExpLiteral(true, classifier, ok); |
case Token::DIV: |
classifier->RecordBindingPatternError( |
scanner()->peek_location(), MessageTemplate::kUnexpectedTokenRegExp); |
- result = this->ParseRegExpLiteral(false, classifier, CHECK_OK); |
- break; |
+ return this->ParseRegExpLiteral(false, classifier, ok); |
case Token::LBRACK: |
if (!allow_harmony_destructuring()) { |
BindingPatternUnexpectedToken(classifier); |
} |
- result = this->ParseArrayLiteral(classifier, CHECK_OK); |
- break; |
+ return this->ParseArrayLiteral(classifier, ok); |
case Token::LBRACE: |
if (!allow_harmony_destructuring()) { |
BindingPatternUnexpectedToken(classifier); |
} |
- result = this->ParseObjectLiteral(classifier, CHECK_OK); |
- break; |
+ return this->ParseObjectLiteral(classifier, ok); |
- case Token::LPAREN: |
+ case Token::LPAREN: { |
// Arrow function formal parameters are either a single identifier or a |
// list of BindingPattern productions enclosed in parentheses. |
// Parentheses are not valid on the LHS of a BindingPattern, so we use the |
@@ -2351,28 +2335,27 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
classifier->RecordBindingPatternError(scanner()->location(), |
MessageTemplate::kUnexpectedToken, |
Token::String(Token::RPAREN)); |
- result = factory()->NewEmptyParentheses(beg_pos); |
+ return factory()->NewEmptyParentheses(beg_pos); |
} else if (allow_harmony_rest_parameters() && Check(Token::ELLIPSIS)) { |
// (...x)=>x. The continuation that looks for the => is in |
// ParseAssignmentExpression. |
- int ellipsis_pos = scanner()->location().beg_pos; |
+ int ellipsis_pos = position(); |
classifier->RecordExpressionError(scanner()->location(), |
MessageTemplate::kUnexpectedToken, |
Token::String(Token::ELLIPSIS)); |
classifier->RecordNonSimpleParameter(); |
Scanner::Location expr_loc = scanner()->peek_location(); |
Token::Value tok = peek(); |
- result = this->ParseAssignmentExpression(true, classifier, CHECK_OK); |
+ ExpressionT expr = |
+ this->ParseAssignmentExpression(true, classifier, CHECK_OK); |
// Patterns are not allowed as rest parameters. There is no way we can |
// succeed so go ahead and use the convenient ReportUnexpectedToken |
// interface. |
- if (!Traits::IsIdentifier(result)) { |
+ if (!Traits::IsIdentifier(expr)) { |
ReportUnexpectedTokenAt(expr_loc, tok); |
*ok = false; |
return this->EmptyExpression(); |
} |
- result = factory()->NewSpread(result, ellipsis_pos); |
- |
if (peek() == Token::COMMA) { |
ReportMessageAt(scanner()->peek_location(), |
MessageTemplate::kParamAfterRest); |
@@ -2380,14 +2363,15 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
return this->EmptyExpression(); |
} |
Expect(Token::RPAREN, CHECK_OK); |
- } else { |
- // Heuristically try to detect immediately called functions before |
- // seeing the call parentheses. |
- parenthesized_function_ = (peek() == Token::FUNCTION); |
- result = this->ParseExpression(true, classifier, CHECK_OK); |
- Expect(Token::RPAREN, CHECK_OK); |
+ return factory()->NewSpread(expr, ellipsis_pos); |
} |
- break; |
+ // Heuristically try to detect immediately called functions before |
+ // seeing the call parentheses. |
+ parenthesized_function_ = (peek() == Token::FUNCTION); |
+ ExpressionT expr = this->ParseExpression(true, classifier, CHECK_OK); |
+ Expect(Token::RPAREN, CHECK_OK); |
+ return expr; |
+ } |
case Token::CLASS: { |
BindingPatternUnexpectedToken(classifier); |
@@ -2395,7 +2379,7 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
if (!allow_harmony_sloppy() && is_sloppy(language_mode())) { |
ReportMessage(MessageTemplate::kSloppyLexical); |
*ok = false; |
- break; |
+ return this->EmptyExpression(); |
} |
int class_token_position = position(); |
IdentifierT name = this->EmptyIdentifier(); |
@@ -2406,10 +2390,9 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
CHECK_OK); |
class_name_location = scanner()->location(); |
} |
- result = this->ParseClassLiteral(name, class_name_location, |
- is_strict_reserved_name, |
- class_token_position, CHECK_OK); |
- break; |
+ return this->ParseClassLiteral(name, class_name_location, |
+ is_strict_reserved_name, |
+ class_token_position, ok); |
} |
case Token::TEMPLATE_SPAN: |
@@ -2417,35 +2400,29 @@ ParserBase<Traits>::ParsePrimaryExpression(ExpressionClassifier* classifier, |
classifier->RecordBindingPatternError( |
scanner()->peek_location(), |
MessageTemplate::kUnexpectedTemplateString); |
- result = this->ParseTemplateLiteral(Traits::NoTemplateTag(), beg_pos, |
- classifier, CHECK_OK); |
- break; |
+ return this->ParseTemplateLiteral(Traits::NoTemplateTag(), beg_pos, |
+ classifier, ok); |
case Token::MOD: |
if (allow_natives() || extension_ != NULL) { |
- result = this->ParseV8Intrinsic(CHECK_OK); |
- break; |
+ return this->ParseV8Intrinsic(ok); |
} |
+ break; |
case Token::DO: |
- // TODO(caitp): reorganize ParsePrimaryExpression() to not require this |
- // extra `token == Token::DO` test due to potential fall-through |
- if (token == Token::DO && allow_harmony_do_expressions()) { |
+ if (allow_harmony_do_expressions()) { |
BindingPatternUnexpectedToken(classifier); |
- result = Traits::ParseDoExpression(CHECK_OK); |
- break; |
+ return Traits::ParseDoExpression(ok); |
} |
- // If we're not allowing special syntax we fall-through to the |
- // default case. |
+ break; |
- default: { |
- Next(); |
- ReportUnexpectedToken(token); |
- *ok = false; |
- } |
+ default: |
+ break; |
} |
- return result; |
+ ReportUnexpectedToken(Next()); |
+ *ok = false; |
+ return this->EmptyExpression(); |
} |