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 #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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
2679 | 2675 |
2680 checkpoint.Restore(¶meters.materialized_literals_count); | 2676 checkpoint.Restore(¶meters.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 ¶meters, expression, loc, &duplicate_loc, scope_snapshot, CHECK_OK); | 2681 ¶meters, 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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |