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

Unified Diff: runtime/vm/parser.cc

Issue 2740783007: Fix debugger regression in issue 28980 (Closed)
Patch Set: wip Created 3 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « runtime/vm/parser.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/parser.cc
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 739f604587b9ecd43ed82e7fae50098cd9e8fd2f..a9666a3e64ddef5934720280b23a13c002acb88e 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -3709,7 +3709,7 @@ SequenceNode* Parser::ParseFunc(const Function& func, bool check_semicolon) {
body = CloseAsyncFunction(generated_body_closure, body);
generated_body_closure.set_end_token_pos(end_token_pos);
} else if (func.IsAsyncClosure()) {
- body = CloseAsyncClosure(body);
+ body = CloseAsyncClosure(body, end_token_pos);
} else if (func.IsSyncGenerator()) {
body = CloseSyncGenFunction(generated_body_closure, body);
generated_body_closure.set_end_token_pos(end_token_pos);
@@ -6719,7 +6719,8 @@ SequenceNode* Parser::CloseAsyncGeneratorTryBlock(SequenceNode* body) {
}
-SequenceNode* Parser::CloseAsyncTryBlock(SequenceNode* try_block) {
+SequenceNode* Parser::CloseAsyncTryBlock(SequenceNode* try_block,
+ TokenPosition func_end_pos) {
// This is the outermost try-catch of the function.
ASSERT(try_stack_ != NULL);
ASSERT(try_stack_->outer_try() == NULL);
@@ -6788,7 +6789,7 @@ SequenceNode* Parser::CloseAsyncTryBlock(SequenceNode* try_block) {
completer_args->Add(
new (Z) LoadLocalNode(TokenPosition::kNoSource, stack_trace_param.var));
current_block_->statements->Add(new (Z) InstanceCallNode(
- TokenPos(),
+ func_end_pos,
new (Z) LoadLocalNode(TokenPosition::kNoSource, async_completer),
Symbols::CompleterCompleteError(), completer_args));
ReturnNode* return_node = new (Z) ReturnNode(TokenPosition::kNoSource);
@@ -7568,11 +7569,12 @@ SequenceNode* Parser::CloseAsyncFunction(const Function& closure,
}
-SequenceNode* Parser::CloseAsyncClosure(SequenceNode* body) {
+SequenceNode* Parser::CloseAsyncClosure(SequenceNode* body,
+ TokenPosition func_end_pos) {
// We need a temporary expression to store intermediate return values.
parsed_function()->EnsureExpressionTemp();
- SequenceNode* new_body = CloseAsyncTryBlock(body);
+ SequenceNode* new_body = CloseAsyncTryBlock(body, func_end_pos);
ASSERT(new_body != NULL);
ASSERT(new_body->scope() != NULL);
return new_body;
« no previous file with comments | « runtime/vm/parser.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698