| OLD | NEW | 
|---|
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include <cmath> | 5 #include <cmath> | 
| 6 | 6 | 
| 7 #include "src/allocation.h" | 7 #include "src/allocation.h" | 
| 8 #include "src/base/logging.h" | 8 #include "src/base/logging.h" | 
| 9 #include "src/conversions-inl.h" | 9 #include "src/conversions-inl.h" | 
| 10 #include "src/conversions.h" | 10 #include "src/conversions.h" | 
| (...skipping 23 matching lines...) Expand all  Loading... | 
| 34 #define DUMMY )  // to make indentation work | 34 #define DUMMY )  // to make indentation work | 
| 35 #undef DUMMY | 35 #undef DUMMY | 
| 36 | 36 | 
| 37 // Used in functions where the return type is not ExpressionT. | 37 // Used in functions where the return type is not ExpressionT. | 
| 38 #define CHECK_OK_CUSTOM(x) ok); \ | 38 #define CHECK_OK_CUSTOM(x) ok); \ | 
| 39   if (!*ok) return this->x();   \ | 39   if (!*ok) return this->x();   \ | 
| 40   ((void)0 | 40   ((void)0 | 
| 41 #define DUMMY )  // to make indentation work | 41 #define DUMMY )  // to make indentation work | 
| 42 #undef DUMMY | 42 #undef DUMMY | 
| 43 | 43 | 
| 44 void PreParserTraits::ReportMessageAt(Scanner::Location source_location, | 44 void ParserBaseTraits<PreParser>::ReportMessageAt( | 
| 45                                       MessageTemplate::Template message, | 45     Scanner::Location source_location, MessageTemplate::Template message, | 
| 46                                       const char* arg, | 46     const char* arg, ParseErrorType error_type) { | 
| 47                                       ParseErrorType error_type) { | 47   delegate()->log_->LogMessage(source_location.beg_pos, source_location.end_pos, | 
| 48   pre_parser_->log_->LogMessage(source_location.beg_pos, | 48                                message, arg, error_type); | 
| 49                                 source_location.end_pos, message, arg, |  | 
| 50                                 error_type); |  | 
| 51 } | 49 } | 
| 52 | 50 | 
| 53 void PreParserTraits::ReportMessageAt(Scanner::Location source_location, | 51 void ParserBaseTraits<PreParser>::ReportMessageAt( | 
| 54                                       MessageTemplate::Template message, | 52     Scanner::Location source_location, MessageTemplate::Template message, | 
| 55                                       const AstRawString* arg, | 53     const AstRawString* arg, ParseErrorType error_type) { | 
| 56                                       ParseErrorType error_type) { |  | 
| 57   UNREACHABLE(); | 54   UNREACHABLE(); | 
| 58 } | 55 } | 
| 59 | 56 | 
| 60 | 57 PreParserIdentifier ParserBaseTraits<PreParser>::GetSymbol( | 
| 61 PreParserIdentifier PreParserTraits::GetSymbol(Scanner* scanner) const { | 58     Scanner* scanner) const { | 
| 62   switch (scanner->current_token()) { | 59   switch (scanner->current_token()) { | 
| 63     case Token::ENUM: | 60     case Token::ENUM: | 
| 64       return PreParserIdentifier::Enum(); | 61       return PreParserIdentifier::Enum(); | 
| 65     case Token::AWAIT: | 62     case Token::AWAIT: | 
| 66       return PreParserIdentifier::Await(); | 63       return PreParserIdentifier::Await(); | 
| 67     case Token::FUTURE_STRICT_RESERVED_WORD: | 64     case Token::FUTURE_STRICT_RESERVED_WORD: | 
| 68       return PreParserIdentifier::FutureStrictReserved(); | 65       return PreParserIdentifier::FutureStrictReserved(); | 
| 69     case Token::LET: | 66     case Token::LET: | 
| 70       return PreParserIdentifier::Let(); | 67       return PreParserIdentifier::Let(); | 
| 71     case Token::STATIC: | 68     case Token::STATIC: | 
| (...skipping 11 matching lines...) Expand all  Loading... | 
| 83         return PreParserIdentifier::Undefined(); | 80         return PreParserIdentifier::Undefined(); | 
| 84       if (scanner->LiteralMatches("prototype", 9)) | 81       if (scanner->LiteralMatches("prototype", 9)) | 
| 85         return PreParserIdentifier::Prototype(); | 82         return PreParserIdentifier::Prototype(); | 
| 86       if (scanner->LiteralMatches("constructor", 11)) | 83       if (scanner->LiteralMatches("constructor", 11)) | 
| 87         return PreParserIdentifier::Constructor(); | 84         return PreParserIdentifier::Constructor(); | 
| 88       return PreParserIdentifier::Default(); | 85       return PreParserIdentifier::Default(); | 
| 89   } | 86   } | 
| 90 } | 87 } | 
| 91 | 88 | 
| 92 | 89 | 
| 93 PreParserExpression PreParserTraits::ExpressionFromString( | 90 PreParserExpression ParserBaseTraits<PreParser>::ExpressionFromString( | 
| 94     int pos, Scanner* scanner, PreParserFactory* factory) const { | 91     int pos, Scanner* scanner, PreParserFactory* factory) const { | 
| 95   if (scanner->UnescapedLiteralMatches("use strict", 10)) { | 92   if (scanner->UnescapedLiteralMatches("use strict", 10)) { | 
| 96     return PreParserExpression::UseStrictStringLiteral(); | 93     return PreParserExpression::UseStrictStringLiteral(); | 
| 97   } | 94   } | 
| 98   return PreParserExpression::StringLiteral(); | 95   return PreParserExpression::StringLiteral(); | 
| 99 } | 96 } | 
| 100 | 97 | 
| 101 | 98 | 
| 102 PreParserExpression PreParserTraits::ParseV8Intrinsic(bool* ok) { | 99 PreParserExpression ParserBaseTraits<PreParser>::ParseV8Intrinsic(bool* ok) { | 
| 103   return pre_parser_->ParseV8Intrinsic(ok); | 100   return delegate()->ParseV8Intrinsic(ok); | 
| 104 } | 101 } | 
| 105 | 102 | 
| 106 | 103 | 
| 107 PreParserExpression PreParserTraits::ParseFunctionLiteral( | 104 PreParserExpression ParserBaseTraits<PreParser>::ParseFunctionLiteral( | 
| 108     PreParserIdentifier name, Scanner::Location function_name_location, | 105     PreParserIdentifier name, Scanner::Location function_name_location, | 
| 109     FunctionNameValidity function_name_validity, FunctionKind kind, | 106     FunctionNameValidity function_name_validity, FunctionKind kind, | 
| 110     int function_token_position, FunctionLiteral::FunctionType type, | 107     int function_token_position, FunctionLiteral::FunctionType type, | 
| 111     LanguageMode language_mode, bool* ok) { | 108     LanguageMode language_mode, bool* ok) { | 
| 112   return pre_parser_->ParseFunctionLiteral( | 109   return delegate()->ParseFunctionLiteral( | 
| 113       name, function_name_location, function_name_validity, kind, | 110       name, function_name_location, function_name_validity, kind, | 
| 114       function_token_position, type, language_mode, ok); | 111       function_token_position, type, language_mode, ok); | 
| 115 } | 112 } | 
| 116 | 113 | 
| 117 PreParser::PreParseResult PreParser::PreParseLazyFunction( | 114 PreParser::PreParseResult PreParser::PreParseLazyFunction( | 
| 118     LanguageMode language_mode, FunctionKind kind, bool has_simple_parameters, | 115     LanguageMode language_mode, FunctionKind kind, bool has_simple_parameters, | 
| 119     bool parsing_module, ParserRecorder* log, Scanner::BookmarkScope* bookmark, | 116     bool parsing_module, ParserRecorder* log, Scanner::BookmarkScope* bookmark, | 
| 120     int* use_counts) { | 117     int* use_counts) { | 
| 121   parsing_module_ = parsing_module; | 118   parsing_module_ = parsing_module; | 
| 122   log_ = log; | 119   log_ = log; | 
| (...skipping 24 matching lines...) Expand all  Loading... | 
| 147     if (is_strict(scope()->language_mode())) { | 144     if (is_strict(scope()->language_mode())) { | 
| 148       int end_pos = scanner()->location().end_pos; | 145       int end_pos = scanner()->location().end_pos; | 
| 149       CheckStrictOctalLiteral(start_position, end_pos, &ok); | 146       CheckStrictOctalLiteral(start_position, end_pos, &ok); | 
| 150       CheckDecimalLiteralWithLeadingZero(use_counts, start_position, end_pos); | 147       CheckDecimalLiteralWithLeadingZero(use_counts, start_position, end_pos); | 
| 151       if (!ok) return kPreParseSuccess; | 148       if (!ok) return kPreParseSuccess; | 
| 152     } | 149     } | 
| 153   } | 150   } | 
| 154   return kPreParseSuccess; | 151   return kPreParseSuccess; | 
| 155 } | 152 } | 
| 156 | 153 | 
| 157 PreParserExpression PreParserTraits::ParseClassLiteral( | 154 PreParserExpression ParserBaseTraits<PreParser>::ParseClassLiteral( | 
| 158     Type::ExpressionClassifier* classifier, PreParserIdentifier name, | 155     Type::ExpressionClassifier* classifier, PreParserIdentifier name, | 
| 159     Scanner::Location class_name_location, bool name_is_strict_reserved, | 156     Scanner::Location class_name_location, bool name_is_strict_reserved, | 
| 160     int pos, bool* ok) { | 157     int pos, bool* ok) { | 
| 161   return pre_parser_->ParseClassLiteral(classifier, name, class_name_location, | 158   return delegate()->ParseClassLiteral(classifier, name, class_name_location, | 
| 162                                         name_is_strict_reserved, pos, ok); | 159                                        name_is_strict_reserved, pos, ok); | 
| 163 } | 160 } | 
| 164 | 161 | 
| 165 | 162 | 
| 166 // Preparsing checks a JavaScript program and emits preparse-data that helps | 163 // Preparsing checks a JavaScript program and emits preparse-data that helps | 
| 167 // a later parsing to be faster. | 164 // a later parsing to be faster. | 
| 168 // See preparser-data.h for the data. | 165 // See preparser-data.h for the data. | 
| 169 | 166 | 
| 170 // The PreParser checks that the syntax follows the grammar for JavaScript, | 167 // The PreParser checks that the syntax follows the grammar for JavaScript, | 
| 171 // and collects some information about the program along the way. | 168 // and collects some information about the program along the way. | 
| 172 // The grammar check is only performed in order to understand the program | 169 // The grammar check is only performed in order to understand the program | 
| (...skipping 1112 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1285   //     do '{' StatementList '}' | 1282   //     do '{' StatementList '}' | 
| 1286   Expect(Token::DO, CHECK_OK); | 1283   Expect(Token::DO, CHECK_OK); | 
| 1287   Expect(Token::LBRACE, CHECK_OK); | 1284   Expect(Token::LBRACE, CHECK_OK); | 
| 1288   while (peek() != Token::RBRACE) { | 1285   while (peek() != Token::RBRACE) { | 
| 1289     ParseStatementListItem(CHECK_OK); | 1286     ParseStatementListItem(CHECK_OK); | 
| 1290   } | 1287   } | 
| 1291   Expect(Token::RBRACE, CHECK_OK); | 1288   Expect(Token::RBRACE, CHECK_OK); | 
| 1292   return PreParserExpression::Default(); | 1289   return PreParserExpression::Default(); | 
| 1293 } | 1290 } | 
| 1294 | 1291 | 
| 1295 void PreParserTraits::ParseAsyncArrowSingleExpressionBody( | 1292 void ParserBaseTraits<PreParser>::ParseAsyncArrowSingleExpressionBody( | 
| 1296     PreParserStatementList body, bool accept_IN, | 1293     PreParserStatementList body, bool accept_IN, | 
| 1297     Type::ExpressionClassifier* classifier, int pos, bool* ok) { | 1294     Type::ExpressionClassifier* classifier, int pos, bool* ok) { | 
| 1298   Scope* scope = pre_parser_->scope(); | 1295   Scope* scope = delegate()->scope(); | 
| 1299   scope->ForceContextAllocation(); | 1296   scope->ForceContextAllocation(); | 
| 1300 | 1297 | 
| 1301   PreParserExpression return_value = pre_parser_->ParseAssignmentExpression( | 1298   PreParserExpression return_value = delegate()->ParseAssignmentExpression( | 
| 1302       accept_IN, classifier, CHECK_OK_CUSTOM(Void)); | 1299       accept_IN, classifier, CHECK_OK_CUSTOM(Void)); | 
| 1303 | 1300 | 
| 1304   body->Add(PreParserStatement::ExpressionStatement(return_value), zone()); | 1301   body->Add(PreParserStatement::ExpressionStatement(return_value), zone()); | 
| 1305 } | 1302 } | 
| 1306 | 1303 | 
| 1307 #undef CHECK_OK | 1304 #undef CHECK_OK | 
| 1308 #undef CHECK_OK_CUSTOM | 1305 #undef CHECK_OK_CUSTOM | 
| 1309 | 1306 | 
| 1310 | 1307 | 
| 1311 }  // namespace internal | 1308 }  // namespace internal | 
| 1312 }  // namespace v8 | 1309 }  // namespace v8 | 
| OLD | NEW | 
|---|