Index: src/preparser.h |
diff --git a/src/preparser.h b/src/preparser.h |
index b66053b94697a7d82a59969e1f06a6cd4fd1b3fc..0653ded54a9522bf4a68e146456680ff24b29bf2 100644 |
--- a/src/preparser.h |
+++ b/src/preparser.h |
@@ -503,6 +503,10 @@ class ParserBase : public Traits { |
error_type); |
} |
+ void GetUnexpectedTokenMessage( |
+ Token::Value token, MessageTemplate::Template* message, const char** arg, |
+ MessageTemplate::Template default_ = MessageTemplate::kUnexpectedToken); |
+ |
void ReportUnexpectedToken(Token::Value token); |
void ReportUnexpectedTokenAt( |
Scanner::Location location, Token::Value token, |
@@ -572,21 +576,26 @@ class ParserBase : public Traits { |
} |
void ExpressionUnexpectedToken(ExpressionClassifier* classifier) { |
- classifier->RecordExpressionError(scanner()->peek_location(), |
- MessageTemplate::kUnexpectedToken, |
- Token::String(peek())); |
+ MessageTemplate::Template message = MessageTemplate::kUnexpectedToken; |
+ const char* arg; |
+ GetUnexpectedTokenMessage(peek(), &message, &arg); |
+ classifier->RecordExpressionError(scanner()->peek_location(), message, arg); |
} |
void BindingPatternUnexpectedToken(ExpressionClassifier* classifier) { |
- classifier->RecordBindingPatternError(scanner()->peek_location(), |
- MessageTemplate::kUnexpectedToken, |
- Token::String(peek())); |
+ MessageTemplate::Template message = MessageTemplate::kUnexpectedToken; |
+ const char* arg; |
+ GetUnexpectedTokenMessage(peek(), &message, &arg); |
+ classifier->RecordBindingPatternError(scanner()->peek_location(), message, |
+ arg); |
} |
void ArrowFormalParametersUnexpectedToken(ExpressionClassifier* classifier) { |
- classifier->RecordArrowFormalParametersError( |
- scanner()->peek_location(), MessageTemplate::kUnexpectedToken, |
- Token::String(peek())); |
+ MessageTemplate::Template message = MessageTemplate::kUnexpectedToken; |
+ const char* arg; |
+ GetUnexpectedTokenMessage(peek(), &message, &arg); |
+ classifier->RecordArrowFormalParametersError(scanner()->peek_location(), |
+ message, arg); |
} |
// Recursive descent functions: |
@@ -1830,54 +1839,73 @@ ParserBase<Traits>::FunctionState::~FunctionState() { |
} |
-template<class Traits> |
-void ParserBase<Traits>::ReportUnexpectedToken(Token::Value token) { |
- return ReportUnexpectedTokenAt(scanner_->location(), token); |
-} |
- |
- |
template <class Traits> |
-void ParserBase<Traits>::ReportUnexpectedTokenAt( |
- Scanner::Location source_location, Token::Value token, |
- MessageTemplate::Template message) { |
+void ParserBase<Traits>::GetUnexpectedTokenMessage( |
+ Token::Value token, MessageTemplate::Template* message, const char** arg, |
+ MessageTemplate::Template default_) { |
// Four of the tokens are treated specially |
switch (token) { |
case Token::EOS: |
- return ReportMessageAt(source_location, MessageTemplate::kUnexpectedEOS); |
+ *message = MessageTemplate::kUnexpectedEOS; |
+ *arg = nullptr; |
+ break; |
case Token::SMI: |
case Token::NUMBER: |
- return ReportMessageAt(source_location, |
- MessageTemplate::kUnexpectedTokenNumber); |
+ *message = MessageTemplate::kUnexpectedTokenNumber; |
+ *arg = nullptr; |
+ break; |
case Token::STRING: |
- return ReportMessageAt(source_location, |
- MessageTemplate::kUnexpectedTokenString); |
+ *message = MessageTemplate::kUnexpectedTokenString; |
+ *arg = nullptr; |
+ break; |
case Token::IDENTIFIER: |
- return ReportMessageAt(source_location, |
- MessageTemplate::kUnexpectedTokenIdentifier); |
+ *message = MessageTemplate::kUnexpectedTokenIdentifier; |
+ *arg = nullptr; |
+ break; |
case Token::FUTURE_RESERVED_WORD: |
- return ReportMessageAt(source_location, |
- MessageTemplate::kUnexpectedReserved); |
+ *message = MessageTemplate::kUnexpectedReserved; |
+ *arg = nullptr; |
+ break; |
case Token::LET: |
case Token::STATIC: |
case Token::YIELD: |
case Token::FUTURE_STRICT_RESERVED_WORD: |
- return ReportMessageAt(source_location, |
- is_strict(language_mode()) |
- ? MessageTemplate::kUnexpectedStrictReserved |
- : MessageTemplate::kUnexpectedTokenIdentifier); |
+ *message = is_strict(language_mode()) |
+ ? MessageTemplate::kUnexpectedStrictReserved |
+ : MessageTemplate::kUnexpectedTokenIdentifier; |
+ *arg = nullptr; |
+ break; |
case Token::TEMPLATE_SPAN: |
case Token::TEMPLATE_TAIL: |
- return Traits::ReportMessageAt( |
- source_location, MessageTemplate::kUnexpectedTemplateString); |
+ *message = MessageTemplate::kUnexpectedTemplateString; |
+ *arg = nullptr; |
+ break; |
default: |
const char* name = Token::String(token); |
DCHECK(name != NULL); |
- Traits::ReportMessageAt(source_location, message, name); |
+ *arg = name; |
+ break; |
} |
} |
template <class Traits> |
+void ParserBase<Traits>::ReportUnexpectedToken(Token::Value token) { |
+ return ReportUnexpectedTokenAt(scanner_->location(), token); |
+} |
+ |
+ |
+template <class Traits> |
+void ParserBase<Traits>::ReportUnexpectedTokenAt( |
+ Scanner::Location source_location, Token::Value token, |
+ MessageTemplate::Template message) { |
+ const char* arg; |
+ GetUnexpectedTokenMessage(token, &message, &arg); |
+ Traits::ReportMessageAt(source_location, message, arg); |
+} |
+ |
+ |
+template <class Traits> |
typename ParserBase<Traits>::IdentifierT ParserBase<Traits>::ParseIdentifier( |
AllowRestrictedIdentifiers allow_restricted_identifiers, bool* ok) { |
ExpressionClassifier classifier; |