Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Side by Side Diff: src/parsing/parser.cc

Issue 2301923002: ParserBase: Simplify FuncNameInferrer handling. (Closed)
Patch Set: code review (nikolaos@) Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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-expression-rewriter.h" 10 #include "src/ast/ast-expression-rewriter.h"
(...skipping 1761 matching lines...) Expand 10 before | Expand all | Expand 10 after
1772 variable_name = ast_value_factory()->star_default_star_string(); 1772 variable_name = ast_value_factory()->star_default_star_string();
1773 } else { 1773 } else {
1774 bool is_strict_reserved; 1774 bool is_strict_reserved;
1775 name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK); 1775 name = ParseIdentifierOrStrictReservedWord(&is_strict_reserved, CHECK_OK);
1776 name_validity = is_strict_reserved ? kFunctionNameIsStrictReserved 1776 name_validity = is_strict_reserved ? kFunctionNameIsStrictReserved
1777 : kFunctionNameValidityUnknown; 1777 : kFunctionNameValidityUnknown;
1778 variable_name = name; 1778 variable_name = name;
1779 } 1779 }
1780 1780
1781 FuncNameInferrer::State fni_state(fni_); 1781 FuncNameInferrer::State fni_state(fni_);
1782 if (fni_ != NULL) fni_->PushEnclosingName(name); 1782 DCHECK_NOT_NULL(fni_);
1783 fni_->PushEnclosingName(name);
1783 FunctionLiteral* fun = ParseFunctionLiteral( 1784 FunctionLiteral* fun = ParseFunctionLiteral(
1784 name, scanner()->location(), name_validity, 1785 name, scanner()->location(), name_validity,
1785 is_generator ? FunctionKind::kGeneratorFunction 1786 is_generator ? FunctionKind::kGeneratorFunction
1786 : is_async ? FunctionKind::kAsyncFunction 1787 : is_async ? FunctionKind::kAsyncFunction
1787 : FunctionKind::kNormalFunction, 1788 : FunctionKind::kNormalFunction,
1788 pos, FunctionLiteral::kDeclaration, language_mode(), CHECK_OK); 1789 pos, FunctionLiteral::kDeclaration, language_mode(), CHECK_OK);
1789 1790
1790 // In ES6, a function behaves as a lexical binding, except in 1791 // In ES6, a function behaves as a lexical binding, except in
1791 // a script scope, or the initial scope of eval or another function. 1792 // a script scope, or the initial scope of eval or another function.
1792 VariableMode mode = 1793 VariableMode mode =
(...skipping 2105 matching lines...) Expand 10 before | Expand all | Expand 10 after
3898 3899
3899 // Note that the FunctionLiteral needs to be created in the main Zone again. 3900 // Note that the FunctionLiteral needs to be created in the main Zone again.
3900 FunctionLiteral* function_literal = factory()->NewFunctionLiteral( 3901 FunctionLiteral* function_literal = factory()->NewFunctionLiteral(
3901 function_name, main_scope, body, materialized_literal_count, 3902 function_name, main_scope, body, materialized_literal_count,
3902 expected_property_count, arity, duplicate_parameters, function_type, 3903 expected_property_count, arity, duplicate_parameters, function_type,
3903 eager_compile_hint, kind, pos); 3904 eager_compile_hint, kind, pos);
3904 function_literal->set_function_token_position(function_token_pos); 3905 function_literal->set_function_token_position(function_token_pos);
3905 if (should_be_used_once_hint) 3906 if (should_be_used_once_hint)
3906 function_literal->set_should_be_used_once_hint(); 3907 function_literal->set_should_be_used_once_hint();
3907 3908
3908 if (fni_ != NULL && should_infer_name) fni_->AddFunction(function_literal); 3909 if (should_infer_name) {
3910 DCHECK_NOT_NULL(fni_);
3911 fni_->AddFunction(function_literal);
3912 }
3909 return function_literal; 3913 return function_literal;
3910 } 3914 }
3911 3915
3912 Expression* Parser::ParseAsyncFunctionExpression(bool* ok) { 3916 Expression* Parser::ParseAsyncFunctionExpression(bool* ok) {
3913 // AsyncFunctionDeclaration :: 3917 // AsyncFunctionDeclaration ::
3914 // async [no LineTerminator here] function ( FormalParameters[Await] ) 3918 // async [no LineTerminator here] function ( FormalParameters[Await] )
3915 // { AsyncFunctionBody } 3919 // { AsyncFunctionBody }
3916 // 3920 //
3917 // async [no LineTerminator here] function BindingIdentifier[Await] 3921 // async [no LineTerminator here] function BindingIdentifier[Await]
3918 // ( FormalParameters[Await] ) { AsyncFunctionBody } 3922 // ( FormalParameters[Await] ) { AsyncFunctionBody }
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
4561 4565
4562 if (has_seen_constructor && constructor == nullptr) { 4566 if (has_seen_constructor && constructor == nullptr) {
4563 constructor = GetPropertyValue(property)->AsFunctionLiteral(); 4567 constructor = GetPropertyValue(property)->AsFunctionLiteral();
4564 DCHECK_NOT_NULL(constructor); 4568 DCHECK_NOT_NULL(constructor);
4565 constructor->set_raw_name( 4569 constructor->set_raw_name(
4566 name != nullptr ? name : ast_value_factory()->empty_string()); 4570 name != nullptr ? name : ast_value_factory()->empty_string());
4567 } else { 4571 } else {
4568 properties->Add(property, zone()); 4572 properties->Add(property, zone());
4569 } 4573 }
4570 4574
4571 if (fni_ != nullptr) fni_->Infer(); 4575 DCHECK_NOT_NULL(fni_);
4576 fni_->Infer();
4572 4577
4573 if (property_name != ast_value_factory()->constructor_string()) { 4578 if (property_name != ast_value_factory()->constructor_string()) {
4574 SetFunctionNameFromPropertyName(property, property_name); 4579 SetFunctionNameFromPropertyName(property, property_name);
4575 } 4580 }
4576 } 4581 }
4577 4582
4578 Expect(Token::RBRACE, CHECK_OK); 4583 Expect(Token::RBRACE, CHECK_OK);
4579 int end_pos = scanner()->location().end_pos; 4584 int end_pos = scanner()->location().end_pos;
4580 4585
4581 if (constructor == nullptr) { 4586 if (constructor == nullptr) {
(...skipping 1908 matching lines...) Expand 10 before | Expand all | Expand 10 after
6490 node->Print(Isolate::Current()); 6495 node->Print(Isolate::Current());
6491 } 6496 }
6492 #endif // DEBUG 6497 #endif // DEBUG
6493 6498
6494 #undef CHECK_OK 6499 #undef CHECK_OK
6495 #undef CHECK_OK_VOID 6500 #undef CHECK_OK_VOID
6496 #undef CHECK_FAILED 6501 #undef CHECK_FAILED
6497 6502
6498 } // namespace internal 6503 } // namespace internal
6499 } // namespace v8 6504 } // namespace v8
OLDNEW
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698