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

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

Issue 2664083002: [ignition] desugar async functions/generators/modules in BytecodeGenerator
Patch Set: get rid of lambdas, for better or worse.. Created 3 years, 10 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
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 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
420 void SkipMaterializedLiterals(int count) { 420 void SkipMaterializedLiterals(int count) {
421 next_materialized_literal_index_ += count; 421 next_materialized_literal_index_ += count;
422 } 422 }
423 423
424 void AddProperty() { expected_property_count_++; } 424 void AddProperty() { expected_property_count_++; }
425 int expected_property_count() { return expected_property_count_; } 425 int expected_property_count() { return expected_property_count_; }
426 426
427 FunctionKind kind() const { return scope()->function_kind(); } 427 FunctionKind kind() const { return scope()->function_kind(); }
428 FunctionState* outer() const { return outer_function_state_; } 428 FunctionState* outer() const { return outer_function_state_; }
429 429
430 void set_generator_object_variable(typename Types::Variable* variable) {
431 DCHECK_NOT_NULL(variable);
432 DCHECK(IsResumableFunction(kind()));
433 DCHECK(scope()->has_forced_context_allocation());
434 generator_object_variable_ = variable;
435 }
436 typename Types::Variable* generator_object_variable() const { 430 typename Types::Variable* generator_object_variable() const {
437 return generator_object_variable_; 431 return scope()->generator_object_var();
438 } 432 }
439 433
440 void set_promise_variable(typename Types::Variable* variable) {
441 DCHECK(variable != NULL);
442 DCHECK(IsAsyncFunction(kind()));
443 promise_variable_ = variable;
444 }
445 typename Types::Variable* promise_variable() const { 434 typename Types::Variable* promise_variable() const {
446 return promise_variable_; 435 return scope()->promise_var();
447 } 436 }
448 437
449 const ZoneList<DestructuringAssignment>& 438 const ZoneList<DestructuringAssignment>&
450 destructuring_assignments_to_rewrite() const { 439 destructuring_assignments_to_rewrite() const {
451 return destructuring_assignments_to_rewrite_; 440 return destructuring_assignments_to_rewrite_;
452 } 441 }
453 442
454 TailCallExpressionList& tail_call_expressions() { 443 TailCallExpressionList& tail_call_expressions() {
455 return tail_call_expressions_; 444 return tail_call_expressions_;
456 } 445 }
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after
1226 StatementT ParseHoistableDeclaration(ZoneList<const AstRawString*>* names, 1215 StatementT ParseHoistableDeclaration(ZoneList<const AstRawString*>* names,
1227 bool default_export, bool* ok); 1216 bool default_export, bool* ok);
1228 StatementT ParseHoistableDeclaration(int pos, ParseFunctionFlags flags, 1217 StatementT ParseHoistableDeclaration(int pos, ParseFunctionFlags flags,
1229 ZoneList<const AstRawString*>* names, 1218 ZoneList<const AstRawString*>* names,
1230 bool default_export, bool* ok); 1219 bool default_export, bool* ok);
1231 StatementT ParseClassDeclaration(ZoneList<const AstRawString*>* names, 1220 StatementT ParseClassDeclaration(ZoneList<const AstRawString*>* names,
1232 bool default_export, bool* ok); 1221 bool default_export, bool* ok);
1233 StatementT ParseNativeDeclaration(bool* ok); 1222 StatementT ParseNativeDeclaration(bool* ok);
1234 1223
1235 // Consumes the ending }. 1224 // Consumes the ending }.
1236 void ParseFunctionBody(StatementListT result, IdentifierT function_name, 1225 void ParseFunctionBody(StatementListT result, BlockT* init_block,
1237 int pos, const FormalParametersT& parameters, 1226 IdentifierT function_name, int pos,
1238 FunctionKind kind, 1227 const FormalParametersT& parameters, FunctionKind kind,
1239 FunctionLiteral::FunctionType function_type, bool* ok); 1228 FunctionLiteral::FunctionType function_type, bool* ok);
1240 1229
1241 // Under some circumstances, we allow preparsing to abort if the preparsed 1230 // Under some circumstances, we allow preparsing to abort if the preparsed
1242 // function is "long and trivial", and fully parse instead. Our current 1231 // function is "long and trivial", and fully parse instead. Our current
1243 // definition of "long and trivial" is: 1232 // definition of "long and trivial" is:
1244 // - over kLazyParseTrialLimit statements 1233 // - over kLazyParseTrialLimit statements
1245 // - all starting with an identifier (i.e., no if, for, while, etc.) 1234 // - all starting with an identifier (i.e., no if, for, while, etc.)
1246 static const int kLazyParseTrialLimit = 200; 1235 static const int kLazyParseTrialLimit = 200;
1247 1236
1248 // TODO(nikolaos, marja): The first argument should not really be passed 1237 // TODO(nikolaos, marja): The first argument should not really be passed
(...skipping 2716 matching lines...) Expand 10 before | Expand all | Expand 10 after
3965 impl()->ReportUnexpectedToken(scanner()->current_token()); 3954 impl()->ReportUnexpectedToken(scanner()->current_token());
3966 return impl()->NullStatement(); 3955 return impl()->NullStatement();
3967 } 3956 }
3968 Expect(Token::FUNCTION, CHECK_OK_CUSTOM(NullStatement)); 3957 Expect(Token::FUNCTION, CHECK_OK_CUSTOM(NullStatement));
3969 ParseFunctionFlags flags = ParseFunctionFlags::kIsAsync; 3958 ParseFunctionFlags flags = ParseFunctionFlags::kIsAsync;
3970 return ParseHoistableDeclaration(pos, flags, names, default_export, ok); 3959 return ParseHoistableDeclaration(pos, flags, names, default_export, ok);
3971 } 3960 }
3972 3961
3973 template <typename Impl> 3962 template <typename Impl>
3974 void ParserBase<Impl>::ParseFunctionBody( 3963 void ParserBase<Impl>::ParseFunctionBody(
3975 typename ParserBase<Impl>::StatementListT result, IdentifierT function_name, 3964 typename ParserBase<Impl>::StatementListT result,
3965 typename ParserBase<Impl>::BlockT* init_block, IdentifierT function_name,
3976 int pos, const FormalParametersT& parameters, FunctionKind kind, 3966 int pos, const FormalParametersT& parameters, FunctionKind kind,
3977 FunctionLiteral::FunctionType function_type, bool* ok) { 3967 FunctionLiteral::FunctionType function_type, bool* ok) {
3978 static const int kFunctionNameAssignmentIndex = 0;
3979 if (function_type == FunctionLiteral::kNamedExpression) {
3980 DCHECK(!impl()->IsEmptyIdentifier(function_name));
3981 // If we have a named function expression, we add a local variable
3982 // declaration to the body of the function with the name of the
3983 // function and let it refer to the function itself (closure).
3984 // Not having parsed the function body, the language mode may still change,
3985 // so we reserve a spot and create the actual const assignment later.
3986 DCHECK_EQ(kFunctionNameAssignmentIndex, result->length());
3987 result->Add(impl()->NullStatement(), zone());
3988 }
3989
3990 DeclarationScope* function_scope = scope()->AsDeclarationScope(); 3968 DeclarationScope* function_scope = scope()->AsDeclarationScope();
3991 DeclarationScope* inner_scope = function_scope; 3969 DeclarationScope* inner_scope = function_scope;
3992 BlockT inner_block = impl()->NullBlock(); 3970 BlockT inner_block = impl()->NullBlock();
3993 3971
3994 StatementListT body = result; 3972 StatementListT body = result;
3995 if (!parameters.is_simple) { 3973 if (!parameters.is_simple) {
3996 inner_scope = NewVarblockScope(); 3974 inner_scope = NewVarblockScope();
3997 inner_scope->set_start_position(scanner()->location().beg_pos); 3975 inner_scope->set_start_position(scanner()->location().beg_pos);
3998 inner_block = factory()->NewBlock(NULL, 8, true, kNoSourcePosition); 3976 inner_block = factory()->NewBlock(NULL, 8, true, kNoSourcePosition);
3999 inner_block->set_scope(inner_scope); 3977 inner_block->set_scope(inner_scope);
(...skipping 21 matching lines...) Expand all
4021 } 3999 }
4022 4000
4023 Expect(Token::RBRACE, CHECK_OK_VOID); 4001 Expect(Token::RBRACE, CHECK_OK_VOID);
4024 scope()->set_end_position(scanner()->location().end_pos); 4002 scope()->set_end_position(scanner()->location().end_pos);
4025 4003
4026 if (!parameters.is_simple) { 4004 if (!parameters.is_simple) {
4027 DCHECK_NOT_NULL(inner_scope); 4005 DCHECK_NOT_NULL(inner_scope);
4028 DCHECK_EQ(function_scope, scope()); 4006 DCHECK_EQ(function_scope, scope());
4029 DCHECK_EQ(function_scope, inner_scope->outer_scope()); 4007 DCHECK_EQ(function_scope, inner_scope->outer_scope());
4030 impl()->SetLanguageMode(function_scope, inner_scope->language_mode()); 4008 impl()->SetLanguageMode(function_scope, inner_scope->language_mode());
4031 BlockT init_block = 4009 *init_block =
4032 impl()->BuildParameterInitializationBlock(parameters, CHECK_OK_VOID); 4010 impl()->BuildParameterInitializationBlock(parameters, CHECK_OK_VOID);
4033 4011
4034 if (is_sloppy(inner_scope->language_mode())) { 4012 if (is_sloppy(inner_scope->language_mode())) {
4035 impl()->InsertSloppyBlockFunctionVarBindings(inner_scope); 4013 impl()->InsertSloppyBlockFunctionVarBindings(inner_scope);
4036 } 4014 }
4037 4015
4038 // TODO(littledan): Merge the two rejection blocks into one
4039 if (IsAsyncFunction(kind)) {
4040 init_block = impl()->BuildRejectPromiseOnException(init_block);
4041 }
4042
4043 inner_scope->set_end_position(scanner()->location().end_pos); 4016 inner_scope->set_end_position(scanner()->location().end_pos);
4044 if (inner_scope->FinalizeBlockScope() != nullptr) { 4017 if (inner_scope->FinalizeBlockScope() != nullptr) {
4045 impl()->CheckConflictingVarDeclarations(inner_scope, CHECK_OK_VOID); 4018 impl()->CheckConflictingVarDeclarations(inner_scope, CHECK_OK_VOID);
4046 impl()->InsertShadowingVarBindingInitializers(inner_block); 4019 impl()->InsertShadowingVarBindingInitializers(inner_block);
4047 } 4020 }
4048 inner_scope = nullptr; 4021 inner_scope = nullptr;
4049 4022
4050 result->Add(init_block, zone());
4051 result->Add(inner_block, zone()); 4023 result->Add(inner_block, zone());
4052 } else { 4024 } else {
4053 DCHECK_EQ(inner_scope, function_scope); 4025 DCHECK_EQ(inner_scope, function_scope);
4054 if (is_sloppy(function_scope->language_mode())) { 4026 if (is_sloppy(function_scope->language_mode())) {
4055 impl()->InsertSloppyBlockFunctionVarBindings(function_scope); 4027 impl()->InsertSloppyBlockFunctionVarBindings(function_scope);
4056 } 4028 }
4057 } 4029 }
4058 4030
4059 if (!IsArrowFunction(kind)) { 4031 if (!IsArrowFunction(kind)) {
4060 // Declare arguments after parsing the function since lexical 'arguments' 4032 // Declare arguments after parsing the function since lexical 'arguments'
4061 // masks the arguments object. Declare arguments before declaring the 4033 // masks the arguments object. Declare arguments before declaring the
4062 // function var since the arguments object masks 'function arguments'. 4034 // function var since the arguments object masks 'function arguments'.
4063 function_scope->DeclareArguments(ast_value_factory()); 4035 function_scope->DeclareArguments(ast_value_factory());
4064 } 4036 }
4065 4037
4066 impl()->CreateFunctionNameAssignment(function_name, pos, function_type, 4038 impl()->CreateFunctionNameVariable(function_name, function_type,
4067 function_scope, result, 4039 function_scope);
4068 kFunctionNameAssignmentIndex);
4069 impl()->MarkCollectedTailCallExpressions(); 4040 impl()->MarkCollectedTailCallExpressions();
4070 } 4041 }
4071 4042
4072 template <typename Impl> 4043 template <typename Impl>
4073 void ParserBase<Impl>::CheckArityRestrictions(int param_count, 4044 void ParserBase<Impl>::CheckArityRestrictions(int param_count,
4074 FunctionKind function_kind, 4045 FunctionKind function_kind,
4075 bool has_rest, 4046 bool has_rest,
4076 int formals_start_pos, 4047 int formals_start_pos,
4077 int formals_end_pos, bool* ok) { 4048 int formals_end_pos, bool* ok) {
4078 if (IsGetterFunction(function_kind)) { 4049 if (IsGetterFunction(function_kind)) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
4156 4127
4157 if (peek() == Token::ARROW && scanner_->HasAnyLineTerminatorBeforeNext()) { 4128 if (peek() == Token::ARROW && scanner_->HasAnyLineTerminatorBeforeNext()) {
4158 // ASI inserts `;` after arrow parameters if a line terminator is found. 4129 // ASI inserts `;` after arrow parameters if a line terminator is found.
4159 // `=> ...` is never a valid expression, so report as syntax error. 4130 // `=> ...` is never a valid expression, so report as syntax error.
4160 // If next token is not `=>`, it's a syntax error anyways. 4131 // If next token is not `=>`, it's a syntax error anyways.
4161 ReportUnexpectedTokenAt(scanner_->peek_location(), Token::ARROW); 4132 ReportUnexpectedTokenAt(scanner_->peek_location(), Token::ARROW);
4162 *ok = false; 4133 *ok = false;
4163 return impl()->EmptyExpression(); 4134 return impl()->EmptyExpression();
4164 } 4135 }
4165 4136
4137 BlockT parameter_init_block = impl()->NullBlock();
4166 StatementListT body = impl()->NullStatementList(); 4138 StatementListT body = impl()->NullStatementList();
4167 int materialized_literal_count = -1; 4139 int materialized_literal_count = -1;
4168 int expected_property_count = -1; 4140 int expected_property_count = -1;
4169 int function_literal_id = GetNextFunctionLiteralId(); 4141 int function_literal_id = GetNextFunctionLiteralId();
4170 4142
4171 FunctionKind kind = formal_parameters.scope->function_kind(); 4143 FunctionKind kind = formal_parameters.scope->function_kind();
4172 FunctionLiteral::EagerCompileHint eager_compile_hint = 4144 FunctionLiteral::EagerCompileHint eager_compile_hint =
4173 default_eager_compile_hint_; 4145 default_eager_compile_hint_;
4174 bool can_preparse = impl()->parse_lazily() && 4146 bool can_preparse = impl()->parse_lazily() &&
4175 eager_compile_hint == FunctionLiteral::kShouldLazyCompile; 4147 eager_compile_hint == FunctionLiteral::kShouldLazyCompile;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
4224 // This is probably an initialization function. Inform the compiler it 4196 // This is probably an initialization function. Inform the compiler it
4225 // should also eager-compile this function, and that we expect it to 4197 // should also eager-compile this function, and that we expect it to
4226 // be used once. 4198 // be used once.
4227 eager_compile_hint = FunctionLiteral::kShouldEagerCompile; 4199 eager_compile_hint = FunctionLiteral::kShouldEagerCompile;
4228 should_be_used_once_hint = true; 4200 should_be_used_once_hint = true;
4229 } 4201 }
4230 } 4202 }
4231 if (!is_lazy_top_level_function) { 4203 if (!is_lazy_top_level_function) {
4232 Consume(Token::LBRACE); 4204 Consume(Token::LBRACE);
4233 body = impl()->NewStatementList(8); 4205 body = impl()->NewStatementList(8);
4234 impl()->ParseFunctionBody(body, impl()->EmptyIdentifier(), 4206 impl()->ParseFunctionBody(
4235 kNoSourcePosition, formal_parameters, kind, 4207 body, &parameter_init_block, impl()->EmptyIdentifier(),
4236 FunctionLiteral::kAnonymousExpression, 4208 kNoSourcePosition, formal_parameters, kind,
4237 CHECK_OK); 4209 FunctionLiteral::kAnonymousExpression, CHECK_OK);
4238 materialized_literal_count = 4210 materialized_literal_count =
4239 function_state.materialized_literal_count(); 4211 function_state.materialized_literal_count();
4240 expected_property_count = function_state.expected_property_count(); 4212 expected_property_count = function_state.expected_property_count();
4241 } 4213 }
4242 } else { 4214 } else {
4243 // Single-expression body 4215 // Single-expression body
4244 has_braces = false; 4216 has_braces = false;
4245 int pos = position(); 4217 int pos = position();
4246 DCHECK(ReturnExprContext::kInsideValidBlock == 4218 DCHECK(ReturnExprContext::kInsideValidBlock ==
4247 function_state_->return_expr_context()); 4219 function_state_->return_expr_context());
4248 ReturnExprScope allow_tail_calls( 4220 ReturnExprScope allow_tail_calls(
4249 function_state_, ReturnExprContext::kInsideValidReturnStatement); 4221 function_state_, ReturnExprContext::kInsideValidReturnStatement);
4250 body = impl()->NewStatementList(1); 4222 body = impl()->NewStatementList(1);
4251 impl()->AddParameterInitializationBlock( 4223 if (!formal_parameters.is_simple) {
4252 formal_parameters, body, kind == kAsyncArrowFunction, CHECK_OK); 4224 parameter_init_block = impl()->BuildParameterInitializationBlock(
4225 formal_parameters, CHECK_OK);
4226 }
4253 ExpressionClassifier classifier(this); 4227 ExpressionClassifier classifier(this);
4254 if (kind == kAsyncArrowFunction) { 4228 if (kind == kAsyncArrowFunction) {
4255 ParseAsyncFunctionBody(scope(), body, kAsyncArrowFunction, 4229 ParseAsyncFunctionBody(scope(), body, kAsyncArrowFunction,
4256 FunctionBodyType::kSingleExpression, accept_IN, 4230 FunctionBodyType::kSingleExpression, accept_IN,
4257 pos, CHECK_OK); 4231 pos, CHECK_OK);
4258 impl()->RewriteNonPattern(CHECK_OK); 4232 impl()->RewriteNonPattern(CHECK_OK);
4259 } else { 4233 } else {
4260 ExpressionT expression = ParseAssignmentExpression(accept_IN, CHECK_OK); 4234 ExpressionT expression = ParseAssignmentExpression(accept_IN, CHECK_OK);
4261 impl()->RewriteNonPattern(CHECK_OK); 4235 impl()->RewriteNonPattern(CHECK_OK);
4262 body->Add( 4236 body->Add(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
4299 scope->start_position(), scope->end_position()); 4273 scope->start_position(), scope->end_position());
4300 } 4274 }
4301 FunctionLiteralT function_literal = factory()->NewFunctionLiteral( 4275 FunctionLiteralT function_literal = factory()->NewFunctionLiteral(
4302 impl()->EmptyIdentifierString(), formal_parameters.scope, body, 4276 impl()->EmptyIdentifierString(), formal_parameters.scope, body,
4303 materialized_literal_count, expected_property_count, 4277 materialized_literal_count, expected_property_count,
4304 formal_parameters.num_parameters(), formal_parameters.function_length, 4278 formal_parameters.num_parameters(), formal_parameters.function_length,
4305 FunctionLiteral::kNoDuplicateParameters, 4279 FunctionLiteral::kNoDuplicateParameters,
4306 FunctionLiteral::kAnonymousExpression, eager_compile_hint, 4280 FunctionLiteral::kAnonymousExpression, eager_compile_hint,
4307 formal_parameters.scope->start_position(), has_braces, 4281 formal_parameters.scope->start_position(), has_braces,
4308 function_literal_id); 4282 function_literal_id);
4283 function_literal->set_parameter_init_block(parameter_init_block);
4309 4284
4310 function_literal->set_function_token_position( 4285 function_literal->set_function_token_position(
4311 formal_parameters.scope->start_position()); 4286 formal_parameters.scope->start_position());
4312 if (should_be_used_once_hint) { 4287 if (should_be_used_once_hint) {
4313 function_literal->set_should_be_used_once_hint(); 4288 function_literal->set_should_be_used_once_hint();
4314 } 4289 }
4315 4290
4316 impl()->AddFunctionForNameInference(function_literal); 4291 impl()->AddFunctionForNameInference(function_literal);
4317 4292
4318 return function_literal; 4293 return function_literal;
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
4391 } 4366 }
4392 4367
4393 template <typename Impl> 4368 template <typename Impl>
4394 void ParserBase<Impl>::ParseAsyncFunctionBody(Scope* scope, StatementListT body, 4369 void ParserBase<Impl>::ParseAsyncFunctionBody(Scope* scope, StatementListT body,
4395 FunctionKind kind, 4370 FunctionKind kind,
4396 FunctionBodyType body_type, 4371 FunctionBodyType body_type,
4397 bool accept_IN, int pos, 4372 bool accept_IN, int pos,
4398 bool* ok) { 4373 bool* ok) {
4399 impl()->PrepareAsyncFunctionBody(body, kind, pos); 4374 impl()->PrepareAsyncFunctionBody(body, kind, pos);
4400 4375
4401 BlockT block = factory()->NewBlock(nullptr, 8, true, kNoSourcePosition);
4402
4403 ExpressionT return_value = impl()->EmptyExpression(); 4376 ExpressionT return_value = impl()->EmptyExpression();
4404 if (body_type == FunctionBodyType::kNormal) { 4377 if (body_type == FunctionBodyType::kNormal) {
4405 ParseStatementList(block->statements(), Token::RBRACE, 4378 ParseStatementList(body, Token::RBRACE, CHECK_OK_CUSTOM(Void));
4406 CHECK_OK_CUSTOM(Void));
4407 return_value = factory()->NewUndefinedLiteral(kNoSourcePosition); 4379 return_value = factory()->NewUndefinedLiteral(kNoSourcePosition);
4408 } else { 4380 } else {
4409 return_value = ParseAssignmentExpression(accept_IN, CHECK_OK_CUSTOM(Void)); 4381 return_value = ParseAssignmentExpression(accept_IN, CHECK_OK_CUSTOM(Void));
4410 impl()->RewriteNonPattern(CHECK_OK_CUSTOM(Void)); 4382 impl()->RewriteNonPattern(CHECK_OK_CUSTOM(Void));
4411 } 4383 }
4412 4384
4413 impl()->RewriteAsyncFunctionBody(body, block, return_value, 4385 impl()->RewriteAsyncFunctionBody(body, return_value, CHECK_OK_CUSTOM(Void));
4414 CHECK_OK_CUSTOM(Void));
4415 scope->set_end_position(scanner()->location().end_pos); 4386 scope->set_end_position(scanner()->location().end_pos);
4416 } 4387 }
4417 4388
4418 template <typename Impl> 4389 template <typename Impl>
4419 typename ParserBase<Impl>::ExpressionT 4390 typename ParserBase<Impl>::ExpressionT
4420 ParserBase<Impl>::ParseAsyncFunctionLiteral(bool* ok) { 4391 ParserBase<Impl>::ParseAsyncFunctionLiteral(bool* ok) {
4421 // AsyncFunctionLiteral :: 4392 // AsyncFunctionLiteral ::
4422 // async [no LineTerminator here] function ( FormalParameters[Await] ) 4393 // async [no LineTerminator here] function ( FormalParameters[Await] )
4423 // { AsyncFunctionBody } 4394 // { AsyncFunctionBody }
4424 // 4395 //
(...skipping 1326 matching lines...) Expand 10 before | Expand all | Expand 10 after
5751 return; 5722 return;
5752 } 5723 }
5753 } 5724 }
5754 5725
5755 #undef CHECK_OK_VOID 5726 #undef CHECK_OK_VOID
5756 5727
5757 } // namespace internal 5728 } // namespace internal
5758 } // namespace v8 5729 } // namespace v8
5759 5730
5760 #endif // V8_PARSING_PARSER_BASE_H 5731 #endif // V8_PARSING_PARSER_BASE_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698