| OLD | NEW | 
|     1 // Copyright 2012 the V8 project authors. All rights reserved. |     1 // Copyright 2012 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 "src/parsing/parser.h" |     5 #include "src/parsing/parser.h" | 
|     6  |     6  | 
|     7 #include <memory> |     7 #include <memory> | 
|     8  |     8  | 
|     9 #include "src/api.h" |     9 #include "src/api.h" | 
|    10 #include "src/ast/ast.h" |    10 #include "src/ast/ast.h" | 
| (...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   394 } |   394 } | 
|   395  |   395  | 
|   396 bool ParserTraits::IsEvalOrArguments(const AstRawString* identifier) const { |   396 bool ParserTraits::IsEvalOrArguments(const AstRawString* identifier) const { | 
|   397   return IsEval(identifier) || IsArguments(identifier); |   397   return IsEval(identifier) || IsArguments(identifier); | 
|   398 } |   398 } | 
|   399  |   399  | 
|   400 bool ParserTraits::IsUndefined(const AstRawString* identifier) const { |   400 bool ParserTraits::IsUndefined(const AstRawString* identifier) const { | 
|   401   return identifier == parser_->ast_value_factory()->undefined_string(); |   401   return identifier == parser_->ast_value_factory()->undefined_string(); | 
|   402 } |   402 } | 
|   403  |   403  | 
|   404 bool ParserTraits::IsAwait(const AstRawString* identifier) const { |  | 
|   405   return identifier == parser_->ast_value_factory()->await_string(); |  | 
|   406 } |  | 
|   407  |  | 
|   408 bool ParserTraits::IsPrototype(const AstRawString* identifier) const { |   404 bool ParserTraits::IsPrototype(const AstRawString* identifier) const { | 
|   409   return identifier == parser_->ast_value_factory()->prototype_string(); |   405   return identifier == parser_->ast_value_factory()->prototype_string(); | 
|   410 } |   406 } | 
|   411  |   407  | 
|   412  |   408  | 
|   413 bool ParserTraits::IsConstructor(const AstRawString* identifier) const { |   409 bool ParserTraits::IsConstructor(const AstRawString* identifier) const { | 
|   414   return identifier == parser_->ast_value_factory()->constructor_string(); |   410   return identifier == parser_->ast_value_factory()->constructor_string(); | 
|   415 } |   411 } | 
|   416  |   412  | 
|   417  |   413  | 
| (...skipping 1754 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2172     name_validity = kSkipFunctionNameCheck; |  2168     name_validity = kSkipFunctionNameCheck; | 
|  2173     variable_name = ast_value_factory()->star_default_star_string(); |  2169     variable_name = ast_value_factory()->star_default_star_string(); | 
|  2174   } else { |  2170   } else { | 
|  2175     bool is_strict_reserved; |  2171     bool is_strict_reserved; | 
|  2176     name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK); |  2172     name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK); | 
|  2177     name_validity = is_strict_reserved ? kFunctionNameIsStrictReserved |  2173     name_validity = is_strict_reserved ? kFunctionNameIsStrictReserved | 
|  2178                                        : kFunctionNameValidityUnknown; |  2174                                        : kFunctionNameValidityUnknown; | 
|  2179     variable_name = name; |  2175     variable_name = name; | 
|  2180   } |  2176   } | 
|  2181  |  2177  | 
|  2182   if (V8_UNLIKELY(is_async_function() && this->IsAwait(name))) { |  | 
|  2183     ReportMessageAt(scanner()->location(), |  | 
|  2184                     MessageTemplate::kAwaitBindingIdentifier); |  | 
|  2185     *ok = false; |  | 
|  2186     return nullptr; |  | 
|  2187   } |  | 
|  2188  |  | 
|  2189   FuncNameInferrer::State fni_state(fni_); |  2178   FuncNameInferrer::State fni_state(fni_); | 
|  2190   if (fni_ != NULL) fni_->PushEnclosingName(name); |  2179   if (fni_ != NULL) fni_->PushEnclosingName(name); | 
|  2191   FunctionLiteral* fun = ParseFunctionLiteral( |  2180   FunctionLiteral* fun = ParseFunctionLiteral( | 
|  2192       name, scanner()->location(), name_validity, |  2181       name, scanner()->location(), name_validity, | 
|  2193       is_generator ? FunctionKind::kGeneratorFunction |  2182       is_generator ? FunctionKind::kGeneratorFunction | 
|  2194                    : is_async ? FunctionKind::kAsyncFunction |  2183                    : is_async ? FunctionKind::kAsyncFunction | 
|  2195                               : FunctionKind::kNormalFunction, |  2184                               : FunctionKind::kNormalFunction, | 
|  2196       pos, FunctionLiteral::kDeclaration, language_mode(), CHECK_OK); |  2185       pos, FunctionLiteral::kDeclaration, language_mode(), CHECK_OK); | 
|  2197  |  2186  | 
|  2198   // In ES6, a function behaves as a lexical binding, except in |  2187   // In ES6, a function behaves as a lexical binding, except in | 
| (...skipping 2284 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4483   //       ( FormalParameters[Await] ) { AsyncFunctionBody } |  4472   //       ( FormalParameters[Await] ) { AsyncFunctionBody } | 
|  4484   DCHECK_EQ(scanner()->current_token(), Token::ASYNC); |  4473   DCHECK_EQ(scanner()->current_token(), Token::ASYNC); | 
|  4485   int pos = position(); |  4474   int pos = position(); | 
|  4486   Expect(Token::FUNCTION, CHECK_OK); |  4475   Expect(Token::FUNCTION, CHECK_OK); | 
|  4487   bool is_strict_reserved = false; |  4476   bool is_strict_reserved = false; | 
|  4488   const AstRawString* name = nullptr; |  4477   const AstRawString* name = nullptr; | 
|  4489   FunctionLiteral::FunctionType type = FunctionLiteral::kAnonymousExpression; |  4478   FunctionLiteral::FunctionType type = FunctionLiteral::kAnonymousExpression; | 
|  4490  |  4479  | 
|  4491   if (peek_any_identifier()) { |  4480   if (peek_any_identifier()) { | 
|  4492     type = FunctionLiteral::kNamedExpression; |  4481     type = FunctionLiteral::kNamedExpression; | 
|  4493     name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK); |  4482     name = ParseIdentifierOrStrictReservedWord(FunctionKind::kAsyncFunction, | 
|  4494     if (this->IsAwait(name)) { |  4483                                                &is_strict_reserved, CHECK_OK); | 
|  4495       ReportMessageAt(scanner()->location(), |  | 
|  4496                       MessageTemplate::kAwaitBindingIdentifier); |  | 
|  4497       *ok = false; |  | 
|  4498       return nullptr; |  | 
|  4499     } |  | 
|  4500   } |  4484   } | 
|  4501   return ParseFunctionLiteral(name, scanner()->location(), |  4485   return ParseFunctionLiteral(name, scanner()->location(), | 
|  4502                               is_strict_reserved ? kFunctionNameIsStrictReserved |  4486                               is_strict_reserved ? kFunctionNameIsStrictReserved | 
|  4503                                                  : kFunctionNameValidityUnknown, |  4487                                                  : kFunctionNameValidityUnknown, | 
|  4504                               FunctionKind::kAsyncFunction, pos, type, |  4488                               FunctionKind::kAsyncFunction, pos, type, | 
|  4505                               language_mode(), CHECK_OK); |  4489                               language_mode(), CHECK_OK); | 
|  4506 } |  4490 } | 
|  4507  |  4491  | 
|  4508 void Parser::SkipLazyFunctionBody(int* materialized_literal_count, |  4492 void Parser::SkipLazyFunctionBody(int* materialized_literal_count, | 
|  4509                                   int* expected_property_count, bool* ok, |  4493                                   int* expected_property_count, bool* ok, | 
| (...skipping 2512 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  7022   node->Print(Isolate::Current()); |  7006   node->Print(Isolate::Current()); | 
|  7023 } |  7007 } | 
|  7024 #endif  // DEBUG |  7008 #endif  // DEBUG | 
|  7025  |  7009  | 
|  7026 #undef CHECK_OK |  7010 #undef CHECK_OK | 
|  7027 #undef CHECK_OK_VOID |  7011 #undef CHECK_OK_VOID | 
|  7028 #undef CHECK_FAILED |  7012 #undef CHECK_FAILED | 
|  7029  |  7013  | 
|  7030 }  // namespace internal |  7014 }  // namespace internal | 
|  7031 }  // namespace v8 |  7015 }  // namespace v8 | 
| OLD | NEW |