Chromium Code Reviews

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

Issue 2274133002: Add function-var to variables_ so LookupRecursive doesn't need to special-case it (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Update comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « src/ast/scopes.cc ('k') | no next file » | 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 3639 matching lines...)
3650 result->Add(init_block, zone()); 3650 result->Add(init_block, zone());
3651 result->Add(inner_block, zone()); 3651 result->Add(inner_block, zone());
3652 } else { 3652 } else {
3653 DCHECK_EQ(inner_scope, function_scope); 3653 DCHECK_EQ(inner_scope, function_scope);
3654 if (is_sloppy(function_scope->language_mode())) { 3654 if (is_sloppy(function_scope->language_mode())) {
3655 InsertSloppyBlockFunctionVarBindings(function_scope); 3655 InsertSloppyBlockFunctionVarBindings(function_scope);
3656 } 3656 }
3657 } 3657 }
3658 3658
3659 if (function_type == FunctionLiteral::kNamedExpression) { 3659 if (function_type == FunctionLiteral::kNamedExpression) {
3660 // Now that we know the language mode, we can create the const assignment 3660 Statement* statement;
3661 // in the previously reserved spot. 3661 if (function_scope->Lookup(function_name) == nullptr) {
adamk 2016/09/19 18:00:39 Do you mean LookupLocal? Please add a test that wo
3662 DCHECK_EQ(function_scope, scope()); 3662 // Now that we know the language mode, we can create the const assignment
3663 Variable* fvar = function_scope->DeclareFunctionVar(function_name); 3663 // in the previously reserved spot.
3664 VariableProxy* fproxy = factory()->NewVariableProxy(fvar); 3664 DCHECK_EQ(function_scope, scope());
3665 result->Set(kFunctionNameAssignmentIndex, 3665 Variable* fvar = function_scope->DeclareFunctionVar(function_name);
3666 factory()->NewExpressionStatement( 3666 VariableProxy* fproxy = factory()->NewVariableProxy(fvar);
3667 factory()->NewAssignment(Token::INIT, fproxy, 3667 statement = factory()->NewExpressionStatement(
3668 factory()->NewThisFunction(pos), 3668 factory()->NewAssignment(Token::INIT, fproxy,
3669 kNoSourcePosition), 3669 factory()->NewThisFunction(pos),
3670 kNoSourcePosition)); 3670 kNoSourcePosition),
3671 kNoSourcePosition);
3672 } else {
3673 statement = factory()->NewEmptyStatement(0);
adamk 2016/09/19 18:00:39 Why 0 instead of kNoSourcePosition?
3674 }
3675 result->Set(kFunctionNameAssignmentIndex, statement);
3671 } 3676 }
3672 3677
3673 MarkCollectedTailCallExpressions(); 3678 MarkCollectedTailCallExpressions();
3674 return result; 3679 return result;
3675 } 3680 }
3676 3681
3677 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser( 3682 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser(
3678 SingletonLogger* logger, bool may_abort) { 3683 SingletonLogger* logger, bool may_abort) {
3679 // This function may be called on a background thread too; record only the 3684 // This function may be called on a background thread too; record only the
3680 // main thread preparse times. 3685 // main thread preparse times.
(...skipping 2128 matching lines...)
5809 node->Print(Isolate::Current()); 5814 node->Print(Isolate::Current());
5810 } 5815 }
5811 #endif // DEBUG 5816 #endif // DEBUG
5812 5817
5813 #undef CHECK_OK 5818 #undef CHECK_OK
5814 #undef CHECK_OK_VOID 5819 #undef CHECK_OK_VOID
5815 #undef CHECK_FAILED 5820 #undef CHECK_FAILED
5816 5821
5817 } // namespace internal 5822 } // namespace internal
5818 } // namespace v8 5823 } // namespace v8
OLDNEW
« no previous file with comments | « src/ast/scopes.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine