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

Side by Side Diff: src/parsing/parser-base.h

Issue 2367383002: Don't track function-kind through FunctionState, always read from underlying scope (Closed)
Patch Set: rebase Created 4 years, 2 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.cc ('k') | src/parsing/preparser.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 #ifndef V8_PARSING_PARSER_BASE_H 5 #ifndef V8_PARSING_PARSER_BASE_H
6 #define V8_PARSING_PARSER_BASE_H 6 #define V8_PARSING_PARSER_BASE_H
7 7
8 #include "src/ast/ast.h" 8 #include "src/ast/ast.h"
9 #include "src/ast/scopes.h" 9 #include "src/ast/scopes.h"
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 kInsideValidBlock, 374 kInsideValidBlock,
375 375
376 // Tail call expressions are not allowed in the following blocks. 376 // Tail call expressions are not allowed in the following blocks.
377 kInsideTryBlock, 377 kInsideTryBlock,
378 kInsideForInOfBody, 378 kInsideForInOfBody,
379 }; 379 };
380 380
381 class FunctionState final : public ScopeState { 381 class FunctionState final : public ScopeState {
382 public: 382 public:
383 FunctionState(FunctionState** function_state_stack, 383 FunctionState(FunctionState** function_state_stack,
384 ScopeState** scope_stack, DeclarationScope* scope, 384 ScopeState** scope_stack, DeclarationScope* scope);
385 FunctionKind kind);
386 ~FunctionState(); 385 ~FunctionState();
387 386
388 DeclarationScope* scope() const { 387 DeclarationScope* scope() const {
389 return ScopeState::scope()->AsDeclarationScope(); 388 return ScopeState::scope()->AsDeclarationScope();
390 } 389 }
391 390
392 int NextMaterializedLiteralIndex() { 391 int NextMaterializedLiteralIndex() {
393 return next_materialized_literal_index_++; 392 return next_materialized_literal_index_++;
394 } 393 }
395 int materialized_literal_count() { 394 int materialized_literal_count() {
396 return next_materialized_literal_index_; 395 return next_materialized_literal_index_;
397 } 396 }
398 397
399 void SkipMaterializedLiterals(int count) { 398 void SkipMaterializedLiterals(int count) {
400 next_materialized_literal_index_ += count; 399 next_materialized_literal_index_ += count;
401 } 400 }
402 401
403 void AddProperty() { expected_property_count_++; } 402 void AddProperty() { expected_property_count_++; }
404 int expected_property_count() { return expected_property_count_; } 403 int expected_property_count() { return expected_property_count_; }
405 404
406 bool is_generator() const { return IsGeneratorFunction(kind_); } 405 bool is_generator() const { return IsGeneratorFunction(kind()); }
407 bool is_async_function() const { return IsAsyncFunction(kind_); } 406 bool is_async_function() const { return IsAsyncFunction(kind()); }
408 bool is_resumable() const { return is_generator() || is_async_function(); } 407 bool is_resumable() const { return is_generator() || is_async_function(); }
409 408
410 FunctionKind kind() const { return kind_; } 409 FunctionKind kind() const { return scope()->function_kind(); }
411 FunctionState* outer() const { return outer_function_state_; } 410 FunctionState* outer() const { return outer_function_state_; }
412 411
413 void set_generator_object_variable(typename Types::Variable* variable) { 412 void set_generator_object_variable(typename Types::Variable* variable) {
414 DCHECK(variable != NULL); 413 DCHECK(variable != NULL);
415 DCHECK(is_resumable()); 414 DCHECK(is_resumable());
416 generator_object_variable_ = variable; 415 generator_object_variable_ = variable;
417 } 416 }
418 typename Types::Variable* generator_object_variable() const { 417 typename Types::Variable* generator_object_variable() const {
419 return generator_object_variable_; 418 return generator_object_variable_;
420 } 419 }
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
491 } 490 }
492 491
493 // Used to assign an index to each literal that needs materialization in 492 // Used to assign an index to each literal that needs materialization in
494 // the function. Includes regexp literals, and boilerplate for object and 493 // the function. Includes regexp literals, and boilerplate for object and
495 // array literals. 494 // array literals.
496 int next_materialized_literal_index_; 495 int next_materialized_literal_index_;
497 496
498 // Properties count estimation. 497 // Properties count estimation.
499 int expected_property_count_; 498 int expected_property_count_;
500 499
501 FunctionKind kind_;
502 // For generators, this variable may hold the generator object. It variable 500 // For generators, this variable may hold the generator object. It variable
503 // is used by yield expressions and return statements. It is not necessary 501 // is used by yield expressions and return statements. It is not necessary
504 // for generator functions to have this variable set. 502 // for generator functions to have this variable set.
505 Variable* generator_object_variable_; 503 Variable* generator_object_variable_;
506 // For async functions, this variable holds a temporary for the Promise 504 // For async functions, this variable holds a temporary for the Promise
507 // being created as output of the async function. 505 // being created as output of the async function.
508 Variable* promise_variable_; 506 Variable* promise_variable_;
509 507
510 FunctionState** function_state_stack_; 508 FunctionState** function_state_stack_;
511 FunctionState* outer_function_state_; 509 FunctionState* outer_function_state_;
(...skipping 673 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 ExpressionT ParseBinaryExpression(int prec, bool accept_IN, bool* ok); 1183 ExpressionT ParseBinaryExpression(int prec, bool accept_IN, bool* ok);
1186 ExpressionT ParseUnaryExpression(bool* ok); 1184 ExpressionT ParseUnaryExpression(bool* ok);
1187 ExpressionT ParsePostfixExpression(bool* ok); 1185 ExpressionT ParsePostfixExpression(bool* ok);
1188 ExpressionT ParseLeftHandSideExpression(bool* ok); 1186 ExpressionT ParseLeftHandSideExpression(bool* ok);
1189 ExpressionT ParseMemberWithNewPrefixesExpression(bool* is_async, bool* ok); 1187 ExpressionT ParseMemberWithNewPrefixesExpression(bool* is_async, bool* ok);
1190 ExpressionT ParseMemberExpression(bool* is_async, bool* ok); 1188 ExpressionT ParseMemberExpression(bool* is_async, bool* ok);
1191 ExpressionT ParseMemberExpressionContinuation(ExpressionT expression, 1189 ExpressionT ParseMemberExpressionContinuation(ExpressionT expression,
1192 bool* is_async, bool* ok); 1190 bool* is_async, bool* ok);
1193 ExpressionT ParseArrowFunctionLiteral(bool accept_IN, 1191 ExpressionT ParseArrowFunctionLiteral(bool accept_IN,
1194 const FormalParametersT& parameters, 1192 const FormalParametersT& parameters,
1195 bool is_async,
1196 bool* ok); 1193 bool* ok);
1197 ExpressionT ParseTemplateLiteral(ExpressionT tag, int start, bool* ok); 1194 ExpressionT ParseTemplateLiteral(ExpressionT tag, int start, bool* ok);
1198 ExpressionT ParseSuperExpression(bool is_new, bool* ok); 1195 ExpressionT ParseSuperExpression(bool is_new, bool* ok);
1199 ExpressionT ParseNewTargetExpression(bool* ok); 1196 ExpressionT ParseNewTargetExpression(bool* ok);
1200 1197
1201 void ParseFormalParameter(FormalParametersT* parameters, bool* ok); 1198 void ParseFormalParameter(FormalParametersT* parameters, bool* ok);
1202 void ParseFormalParameterList(FormalParametersT* parameters, bool* ok); 1199 void ParseFormalParameterList(FormalParametersT* parameters, bool* ok);
1203 void CheckArityRestrictions(int param_count, FunctionKind function_type, 1200 void CheckArityRestrictions(int param_count, FunctionKind function_type,
1204 bool has_rest, int formals_start_pos, 1201 bool has_rest, int formals_start_pos,
1205 int formals_end_pos, bool* ok); 1202 int formals_end_pos, bool* ok);
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1447 bool allow_harmony_restrictive_generators_; 1444 bool allow_harmony_restrictive_generators_;
1448 bool allow_harmony_trailing_commas_; 1445 bool allow_harmony_trailing_commas_;
1449 bool allow_harmony_class_fields_; 1446 bool allow_harmony_class_fields_;
1450 1447
1451 friend class DiscardableZoneScope; 1448 friend class DiscardableZoneScope;
1452 }; 1449 };
1453 1450
1454 template <typename Impl> 1451 template <typename Impl>
1455 ParserBase<Impl>::FunctionState::FunctionState( 1452 ParserBase<Impl>::FunctionState::FunctionState(
1456 FunctionState** function_state_stack, ScopeState** scope_stack, 1453 FunctionState** function_state_stack, ScopeState** scope_stack,
1457 DeclarationScope* scope, FunctionKind kind) 1454 DeclarationScope* scope)
1458 : ScopeState(scope_stack, scope), 1455 : ScopeState(scope_stack, scope),
1459 next_materialized_literal_index_(0), 1456 next_materialized_literal_index_(0),
1460 expected_property_count_(0), 1457 expected_property_count_(0),
1461 kind_(kind),
1462 generator_object_variable_(nullptr), 1458 generator_object_variable_(nullptr),
1463 promise_variable_(nullptr), 1459 promise_variable_(nullptr),
1464 function_state_stack_(function_state_stack), 1460 function_state_stack_(function_state_stack),
1465 outer_function_state_(*function_state_stack), 1461 outer_function_state_(*function_state_stack),
1466 destructuring_assignments_to_rewrite_(16, scope->zone()), 1462 destructuring_assignments_to_rewrite_(16, scope->zone()),
1467 tail_call_expressions_(scope->zone()), 1463 tail_call_expressions_(scope->zone()),
1468 return_expr_context_(ReturnExprContext::kInsideValidBlock), 1464 return_expr_context_(ReturnExprContext::kInsideValidBlock),
1469 non_patterns_to_rewrite_(0, scope->zone()), 1465 non_patterns_to_rewrite_(0, scope->zone()),
1470 reported_errors_(16, scope->zone()), 1466 reported_errors_(16, scope->zone()),
1471 next_function_is_parenthesized_(false), 1467 next_function_is_parenthesized_(false),
(...skipping 786 matching lines...) Expand 10 before | Expand all | Expand 10 after
2258 template <typename Impl> 2254 template <typename Impl>
2259 typename ParserBase<Impl>::FunctionLiteralT 2255 typename ParserBase<Impl>::FunctionLiteralT
2260 ParserBase<Impl>::ParseClassFieldForInitializer(bool has_initializer, 2256 ParserBase<Impl>::ParseClassFieldForInitializer(bool has_initializer,
2261 bool* ok) { 2257 bool* ok) {
2262 // Makes a concise method which evaluates and returns the initialized value 2258 // Makes a concise method which evaluates and returns the initialized value
2263 // (or undefined if absent). 2259 // (or undefined if absent).
2264 FunctionKind kind = FunctionKind::kConciseMethod; 2260 FunctionKind kind = FunctionKind::kConciseMethod;
2265 DeclarationScope* initializer_scope = NewFunctionScope(kind); 2261 DeclarationScope* initializer_scope = NewFunctionScope(kind);
2266 initializer_scope->set_start_position(scanner()->location().end_pos); 2262 initializer_scope->set_start_position(scanner()->location().end_pos);
2267 FunctionState initializer_state(&function_state_, &scope_state_, 2263 FunctionState initializer_state(&function_state_, &scope_state_,
2268 initializer_scope, kind); 2264 initializer_scope);
2269 DCHECK(scope() == initializer_scope); 2265 DCHECK(scope() == initializer_scope);
2270 scope()->SetLanguageMode(STRICT); 2266 scope()->SetLanguageMode(STRICT);
2271 ExpressionClassifier expression_classifier(this); 2267 ExpressionClassifier expression_classifier(this);
2272 ExpressionT value; 2268 ExpressionT value;
2273 if (has_initializer) { 2269 if (has_initializer) {
2274 value = this->ParseAssignmentExpression( 2270 value = this->ParseAssignmentExpression(
2275 true, CHECK_OK_CUSTOM(EmptyFunctionLiteral)); 2271 true, CHECK_OK_CUSTOM(EmptyFunctionLiteral));
2276 impl()->RewriteNonPattern(CHECK_OK_CUSTOM(EmptyFunctionLiteral)); 2272 impl()->RewriteNonPattern(CHECK_OK_CUSTOM(EmptyFunctionLiteral));
2277 } else { 2273 } else {
2278 value = factory()->NewUndefinedLiteral(kNoSourcePosition); 2274 value = factory()->NewUndefinedLiteral(kNoSourcePosition);
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after
2679 2675
2680 checkpoint.Restore(&parameters.materialized_literals_count); 2676 checkpoint.Restore(&parameters.materialized_literals_count);
2681 2677
2682 scope->set_start_position(lhs_beg_pos); 2678 scope->set_start_position(lhs_beg_pos);
2683 Scanner::Location duplicate_loc = Scanner::Location::invalid(); 2679 Scanner::Location duplicate_loc = Scanner::Location::invalid();
2684 impl()->ParseArrowFunctionFormalParameterList( 2680 impl()->ParseArrowFunctionFormalParameterList(
2685 &parameters, expression, loc, &duplicate_loc, scope_snapshot, CHECK_OK); 2681 &parameters, expression, loc, &duplicate_loc, scope_snapshot, CHECK_OK);
2686 if (duplicate_loc.IsValid()) { 2682 if (duplicate_loc.IsValid()) {
2687 classifier()->RecordDuplicateFormalParameterError(duplicate_loc); 2683 classifier()->RecordDuplicateFormalParameterError(duplicate_loc);
2688 } 2684 }
2689 expression = 2685 expression = ParseArrowFunctionLiteral(accept_IN, parameters, CHECK_OK);
2690 ParseArrowFunctionLiteral(accept_IN, parameters, is_async, CHECK_OK);
2691 impl()->Discard(); 2686 impl()->Discard();
2692 classifier()->RecordPatternError(arrow_loc, 2687 classifier()->RecordPatternError(arrow_loc,
2693 MessageTemplate::kUnexpectedToken, 2688 MessageTemplate::kUnexpectedToken,
2694 Token::String(Token::ARROW)); 2689 Token::String(Token::ARROW));
2695 2690
2696 if (fni_ != nullptr) fni_->Infer(); 2691 if (fni_ != nullptr) fni_->Infer();
2697 2692
2698 return expression; 2693 return expression;
2699 } 2694 }
2700 2695
(...skipping 1177 matching lines...) Expand 10 before | Expand all | Expand 10 after
3878 peek_ahead == Token::SEMICOLON || peek_ahead == Token::RBRACK) { 3873 peek_ahead == Token::SEMICOLON || peek_ahead == Token::RBRACK) {
3879 return true; 3874 return true;
3880 } 3875 }
3881 } 3876 }
3882 return false; 3877 return false;
3883 } 3878 }
3884 3879
3885 template <typename Impl> 3880 template <typename Impl>
3886 typename ParserBase<Impl>::ExpressionT 3881 typename ParserBase<Impl>::ExpressionT
3887 ParserBase<Impl>::ParseArrowFunctionLiteral( 3882 ParserBase<Impl>::ParseArrowFunctionLiteral(
3888 bool accept_IN, const FormalParametersT& formal_parameters, bool is_async, 3883 bool accept_IN, const FormalParametersT& formal_parameters, bool* ok) {
3889 bool* ok) {
3890 if (peek() == Token::ARROW && scanner_->HasAnyLineTerminatorBeforeNext()) { 3884 if (peek() == Token::ARROW && scanner_->HasAnyLineTerminatorBeforeNext()) {
3891 // ASI inserts `;` after arrow parameters if a line terminator is found. 3885 // ASI inserts `;` after arrow parameters if a line terminator is found.
3892 // `=> ...` is never a valid expression, so report as syntax error. 3886 // `=> ...` is never a valid expression, so report as syntax error.
3893 // If next token is not `=>`, it's a syntax error anyways. 3887 // If next token is not `=>`, it's a syntax error anyways.
3894 ReportUnexpectedTokenAt(scanner_->peek_location(), Token::ARROW); 3888 ReportUnexpectedTokenAt(scanner_->peek_location(), Token::ARROW);
3895 *ok = false; 3889 *ok = false;
3896 return impl()->EmptyExpression(); 3890 return impl()->EmptyExpression();
3897 } 3891 }
3898 3892
3899 StatementListT body = impl()->NullStatementList(); 3893 StatementListT body = impl()->NullStatementList();
3900 int num_parameters = formal_parameters.scope->num_parameters(); 3894 int num_parameters = formal_parameters.scope->num_parameters();
3901 int materialized_literal_count = -1; 3895 int materialized_literal_count = -1;
3902 int expected_property_count = -1; 3896 int expected_property_count = -1;
3903 3897
3904 FunctionKind arrow_kind = is_async ? kAsyncArrowFunction : kArrowFunction; 3898 FunctionKind kind = formal_parameters.scope->function_kind();
3905 FunctionLiteral::EagerCompileHint eager_compile_hint = 3899 FunctionLiteral::EagerCompileHint eager_compile_hint =
3906 FunctionLiteral::kShouldLazyCompile; 3900 FunctionLiteral::kShouldLazyCompile;
3907 bool should_be_used_once_hint = false; 3901 bool should_be_used_once_hint = false;
3908 { 3902 {
3909 FunctionState function_state(&function_state_, &scope_state_, 3903 FunctionState function_state(&function_state_, &scope_state_,
3910 formal_parameters.scope, arrow_kind); 3904 formal_parameters.scope);
3911 3905
3912 function_state.SkipMaterializedLiterals( 3906 function_state.SkipMaterializedLiterals(
3913 formal_parameters.materialized_literals_count); 3907 formal_parameters.materialized_literals_count);
3914 3908
3915 impl()->ReindexLiterals(formal_parameters); 3909 impl()->ReindexLiterals(formal_parameters);
3916 3910
3917 Expect(Token::ARROW, CHECK_OK); 3911 Expect(Token::ARROW, CHECK_OK);
3918 3912
3919 if (peek() == Token::LBRACE) { 3913 if (peek() == Token::LBRACE) {
3920 // Multiple statement body 3914 // Multiple statement body
(...skipping 25 matching lines...) Expand all
3946 // This is probably an initialization function. Inform the compiler it 3940 // This is probably an initialization function. Inform the compiler it
3947 // should also eager-compile this function, and that we expect it to 3941 // should also eager-compile this function, and that we expect it to
3948 // be used once. 3942 // be used once.
3949 eager_compile_hint = FunctionLiteral::kShouldEagerCompile; 3943 eager_compile_hint = FunctionLiteral::kShouldEagerCompile;
3950 should_be_used_once_hint = true; 3944 should_be_used_once_hint = true;
3951 } 3945 }
3952 } 3946 }
3953 if (!is_lazily_parsed) { 3947 if (!is_lazily_parsed) {
3954 body = impl()->ParseEagerFunctionBody( 3948 body = impl()->ParseEagerFunctionBody(
3955 impl()->EmptyIdentifier(), kNoSourcePosition, formal_parameters, 3949 impl()->EmptyIdentifier(), kNoSourcePosition, formal_parameters,
3956 arrow_kind, FunctionLiteral::kAnonymousExpression, CHECK_OK); 3950 kind, FunctionLiteral::kAnonymousExpression, CHECK_OK);
3957 materialized_literal_count = 3951 materialized_literal_count =
3958 function_state.materialized_literal_count(); 3952 function_state.materialized_literal_count();
3959 expected_property_count = function_state.expected_property_count(); 3953 expected_property_count = function_state.expected_property_count();
3960 } 3954 }
3961 } else { 3955 } else {
3962 // Single-expression body 3956 // Single-expression body
3963 int pos = position(); 3957 int pos = position();
3964 DCHECK(ReturnExprContext::kInsideValidBlock == 3958 DCHECK(ReturnExprContext::kInsideValidBlock ==
3965 function_state_->return_expr_context()); 3959 function_state_->return_expr_context());
3966 ReturnExprScope allow_tail_calls( 3960 ReturnExprScope allow_tail_calls(
3967 function_state_, ReturnExprContext::kInsideValidReturnStatement); 3961 function_state_, ReturnExprContext::kInsideValidReturnStatement);
3968 body = impl()->NewStatementList(1); 3962 body = impl()->NewStatementList(1);
3969 impl()->AddParameterInitializationBlock(formal_parameters, body, is_async, 3963 impl()->AddParameterInitializationBlock(
3970 CHECK_OK); 3964 formal_parameters, body, kind == kAsyncArrowFunction, CHECK_OK);
3971 ExpressionClassifier classifier(this); 3965 ExpressionClassifier classifier(this);
3972 if (is_async) { 3966 if (kind == kAsyncArrowFunction) {
3973 impl()->ParseAsyncArrowSingleExpressionBody(body, accept_IN, pos, 3967 impl()->ParseAsyncArrowSingleExpressionBody(body, accept_IN, pos,
3974 CHECK_OK); 3968 CHECK_OK);
3975 impl()->RewriteNonPattern(CHECK_OK); 3969 impl()->RewriteNonPattern(CHECK_OK);
3976 } else { 3970 } else {
3977 ExpressionT expression = ParseAssignmentExpression(accept_IN, CHECK_OK); 3971 ExpressionT expression = ParseAssignmentExpression(accept_IN, CHECK_OK);
3978 impl()->RewriteNonPattern(CHECK_OK); 3972 impl()->RewriteNonPattern(CHECK_OK);
3979 body->Add(factory()->NewReturnStatement(expression, pos), zone()); 3973 body->Add(factory()->NewReturnStatement(expression, pos), zone());
3980 if (allow_tailcalls() && !is_sloppy(language_mode())) { 3974 if (allow_tailcalls() && !is_sloppy(language_mode())) {
3981 // ES6 14.6.1 Static Semantics: IsInTailPosition 3975 // ES6 14.6.1 Static Semantics: IsInTailPosition
3982 impl()->MarkTailPosition(expression); 3976 impl()->MarkTailPosition(expression);
(...skipping 21 matching lines...) Expand all
4004 } 3998 }
4005 impl()->CheckConflictingVarDeclarations(formal_parameters.scope, CHECK_OK); 3999 impl()->CheckConflictingVarDeclarations(formal_parameters.scope, CHECK_OK);
4006 4000
4007 impl()->RewriteDestructuringAssignments(); 4001 impl()->RewriteDestructuringAssignments();
4008 } 4002 }
4009 4003
4010 FunctionLiteralT function_literal = factory()->NewFunctionLiteral( 4004 FunctionLiteralT function_literal = factory()->NewFunctionLiteral(
4011 impl()->EmptyIdentifierString(), formal_parameters.scope, body, 4005 impl()->EmptyIdentifierString(), formal_parameters.scope, body,
4012 materialized_literal_count, expected_property_count, num_parameters, 4006 materialized_literal_count, expected_property_count, num_parameters,
4013 FunctionLiteral::kNoDuplicateParameters, 4007 FunctionLiteral::kNoDuplicateParameters,
4014 FunctionLiteral::kAnonymousExpression, eager_compile_hint, arrow_kind, 4008 FunctionLiteral::kAnonymousExpression, eager_compile_hint, kind,
4015 formal_parameters.scope->start_position()); 4009 formal_parameters.scope->start_position());
4016 4010
4017 function_literal->set_function_token_position( 4011 function_literal->set_function_token_position(
4018 formal_parameters.scope->start_position()); 4012 formal_parameters.scope->start_position());
4019 if (should_be_used_once_hint) { 4013 if (should_be_used_once_hint) {
4020 function_literal->set_should_be_used_once_hint(); 4014 function_literal->set_should_be_used_once_hint();
4021 } 4015 }
4022 4016
4023 impl()->InferFunctionName(function_literal); 4017 impl()->InferFunctionName(function_literal);
4024 4018
(...skipping 1305 matching lines...) Expand 10 before | Expand all | Expand 10 after
5330 has_seen_constructor_ = true; 5324 has_seen_constructor_ = true;
5331 return; 5325 return;
5332 } 5326 }
5333 } 5327 }
5334 5328
5335 5329
5336 } // namespace internal 5330 } // namespace internal
5337 } // namespace v8 5331 } // namespace v8
5338 5332
5339 #endif // V8_PARSING_PARSER_BASE_H 5333 #endif // V8_PARSING_PARSER_BASE_H
OLDNEW
« no previous file with comments | « src/parsing/parser.cc ('k') | src/parsing/preparser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698