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

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

Issue 1976813002: [esnext] Fix super in async arrow functions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Fix dependencies Created 4 years, 7 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') | test/mjsunit/mjsunit.status » ('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 "src/api.h" 7 #include "src/api.h"
8 #include "src/ast/ast.h" 8 #include "src/ast/ast.h"
9 #include "src/ast/ast-expression-rewriter.h" 9 #include "src/ast/ast-expression-rewriter.h"
10 #include "src/ast/ast-expression-visitor.h" 10 #include "src/ast/ast-expression-visitor.h"
(...skipping 3970 matching lines...) Expand 10 before | Expand all | Expand 10 after
3981 // return Promise.reject(e); 3981 // return Promise.reject(e);
3982 // } 3982 // }
3983 // } 3983 // }
3984 scope->ForceContextAllocation(); 3984 scope->ForceContextAllocation();
3985 Variable* temp = 3985 Variable* temp =
3986 scope_->NewTemporary(ast_value_factory()->dot_generator_object_string()); 3986 scope_->NewTemporary(ast_value_factory()->dot_generator_object_string());
3987 function_state_->set_generator_object_variable(temp); 3987 function_state_->set_generator_object_variable(temp);
3988 3988
3989 Expression* init_generator_variable = factory()->NewAssignment( 3989 Expression* init_generator_variable = factory()->NewAssignment(
3990 Token::INIT, factory()->NewVariableProxy(temp), 3990 Token::INIT, factory()->NewVariableProxy(temp),
3991 BuildCreateJSGeneratorObject(pos), RelocInfo::kNoPosition); 3991 BuildCreateJSGeneratorObject(pos, kind), RelocInfo::kNoPosition);
3992 body->Add(factory()->NewExpressionStatement(init_generator_variable, 3992 body->Add(factory()->NewExpressionStatement(init_generator_variable,
3993 RelocInfo::kNoPosition), 3993 RelocInfo::kNoPosition),
3994 zone()); 3994 zone());
3995 3995
3996 Block* try_block = factory()->NewBlock(NULL, 8, true, RelocInfo::kNoPosition); 3996 Block* try_block = factory()->NewBlock(NULL, 8, true, RelocInfo::kNoPosition);
3997 3997
3998 ZoneList<Statement*>* inner_body = try_block->statements(); 3998 ZoneList<Statement*>* inner_body = try_block->statements();
3999 3999
4000 Expression* return_value = nullptr; 4000 Expression* return_value = nullptr;
4001 if (body_type == FunctionBody::Normal) { 4001 if (body_type == FunctionBody::Normal) {
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
4585 catch_block->statements()->Add(return_promise_reject, zone()); 4585 catch_block->statements()->Add(return_promise_reject, zone());
4586 TryStatement* try_catch_statement = 4586 TryStatement* try_catch_statement =
4587 factory()->NewTryCatchStatement(try_block, catch_scope, catch_variable, 4587 factory()->NewTryCatchStatement(try_block, catch_scope, catch_variable,
4588 catch_block, RelocInfo::kNoPosition); 4588 catch_block, RelocInfo::kNoPosition);
4589 4589
4590 block = factory()->NewBlock(nullptr, 1, true, RelocInfo::kNoPosition); 4590 block = factory()->NewBlock(nullptr, 1, true, RelocInfo::kNoPosition);
4591 block->statements()->Add(try_catch_statement, zone()); 4591 block->statements()->Add(try_catch_statement, zone());
4592 return block; 4592 return block;
4593 } 4593 }
4594 4594
4595 Expression* Parser::BuildCreateJSGeneratorObject(int pos) { 4595 Expression* Parser::BuildCreateJSGeneratorObject(int pos, FunctionKind kind) {
4596 DCHECK_NOT_NULL(function_state_->generator_object_variable()); 4596 DCHECK_NOT_NULL(function_state_->generator_object_variable());
4597 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone()); 4597 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(2, zone());
4598 args->Add(factory()->NewThisFunction(pos), zone()); 4598 args->Add(factory()->NewThisFunction(pos), zone());
4599 args->Add(ThisExpression(scope_, factory(), RelocInfo::kNoPosition), zone()); 4599 args->Add(IsArrowFunction(kind)
4600 ? GetLiteralUndefined(pos)
4601 : ThisExpression(scope_, factory(), RelocInfo::kNoPosition),
4602 zone());
4600 return factory()->NewCallRuntime(Runtime::kCreateJSGeneratorObject, args, 4603 return factory()->NewCallRuntime(Runtime::kCreateJSGeneratorObject, args,
4601 pos); 4604 pos);
4602 } 4605 }
4603 4606
4604 Expression* Parser::BuildPromiseResolve(Expression* value, int pos) { 4607 Expression* Parser::BuildPromiseResolve(Expression* value, int pos) {
4605 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(1, zone()); 4608 ZoneList<Expression*>* args = new (zone()) ZoneList<Expression*>(1, zone());
4606 args->Add(value, zone()); 4609 args->Add(value, zone());
4607 return factory()->NewCallRuntime(Context::PROMISE_CREATE_RESOLVED_INDEX, args, 4610 return factory()->NewCallRuntime(Context::PROMISE_CREATE_RESOLVED_INDEX, args,
4608 pos); 4611 pos);
4609 } 4612 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
4660 // - InitialYield yields the actual generator object. 4663 // - InitialYield yields the actual generator object.
4661 // - Any return statement inside the body will have its argument wrapped 4664 // - Any return statement inside the body will have its argument wrapped
4662 // in a "done" iterator result object. 4665 // in a "done" iterator result object.
4663 // - If the generator terminates for whatever reason, we must close it. 4666 // - If the generator terminates for whatever reason, we must close it.
4664 // Hence the finally clause. 4667 // Hence the finally clause.
4665 4668
4666 Block* try_block = 4669 Block* try_block =
4667 factory()->NewBlock(nullptr, 3, false, RelocInfo::kNoPosition); 4670 factory()->NewBlock(nullptr, 3, false, RelocInfo::kNoPosition);
4668 4671
4669 { 4672 {
4670 Expression* allocation = BuildCreateJSGeneratorObject(pos); 4673 Expression* allocation = BuildCreateJSGeneratorObject(pos, kind);
4671 VariableProxy* init_proxy = factory()->NewVariableProxy( 4674 VariableProxy* init_proxy = factory()->NewVariableProxy(
4672 function_state_->generator_object_variable()); 4675 function_state_->generator_object_variable());
4673 Assignment* assignment = factory()->NewAssignment( 4676 Assignment* assignment = factory()->NewAssignment(
4674 Token::INIT, init_proxy, allocation, RelocInfo::kNoPosition); 4677 Token::INIT, init_proxy, allocation, RelocInfo::kNoPosition);
4675 VariableProxy* get_proxy = factory()->NewVariableProxy( 4678 VariableProxy* get_proxy = factory()->NewVariableProxy(
4676 function_state_->generator_object_variable()); 4679 function_state_->generator_object_variable());
4677 Yield* yield = 4680 Yield* yield =
4678 factory()->NewYield(get_proxy, assignment, RelocInfo::kNoPosition); 4681 factory()->NewYield(get_proxy, assignment, RelocInfo::kNoPosition);
4679 try_block->statements()->Add( 4682 try_block->statements()->Add(
4680 factory()->NewExpressionStatement(yield, RelocInfo::kNoPosition), 4683 factory()->NewExpressionStatement(yield, RelocInfo::kNoPosition),
(...skipping 2363 matching lines...) Expand 10 before | Expand all | Expand 10 after
7044 try_block, target); 7047 try_block, target);
7045 final_loop = target; 7048 final_loop = target;
7046 } 7049 }
7047 7050
7048 return final_loop; 7051 return final_loop;
7049 } 7052 }
7050 7053
7051 7054
7052 } // namespace internal 7055 } // namespace internal
7053 } // namespace v8 7056 } // namespace v8
OLDNEW
« no previous file with comments | « src/parsing/parser.h ('k') | test/mjsunit/mjsunit.status » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698