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

Unified Diff: runtime/vm/parser.cc

Issue 1589643002: Source positions for constructors and lots of async machinery (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 11 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
Index: runtime/vm/parser.cc
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 47cb001d25d3675f6412a3c1fbe19a843a27422f..f14f0b5a4cb7b826f017a872419309f7cadb684c 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -1311,7 +1311,7 @@ SequenceNode* Parser::ParseInstanceGetter(const Function& func) {
LoadInstanceFieldNode* load_field =
new LoadInstanceFieldNode(ident_pos, load_receiver, field);
- ReturnNode* return_node = new ReturnNode(Scanner::kNoSourcePos, load_field);
+ ReturnNode* return_node = new ReturnNode(ident_pos, load_field);
current_block_->statements->Add(return_node);
return CloseBlock();
}
@@ -1355,7 +1355,7 @@ SequenceNode* Parser::ParseInstanceSetter(const Function& func) {
StoreInstanceFieldNode* store_field =
new StoreInstanceFieldNode(ident_pos, receiver, field, value);
current_block_->statements->Add(store_field);
- current_block_->statements->Add(new ReturnNode(Scanner::kNoSourcePos));
+ current_block_->statements->Add(new ReturnNode(ident_pos));
return CloseBlock();
}
@@ -1483,7 +1483,7 @@ SequenceNode* Parser::ParseMethodExtractor(const Function& func) {
ParamList params;
const intptr_t ident_pos = func.token_pos();
- ASSERT(func.token_pos() == 0);
+ ASSERT(func.token_pos() == ClassifyingTokenPositions::kMethodExtractor);
ASSERT(current_class().raw() == func.Owner());
params.AddReceiver(ReceiverType(current_class()), ident_pos);
ASSERT(func.num_fixed_parameters() == 1); // Receiver.
@@ -1503,7 +1503,7 @@ SequenceNode* Parser::ParseMethodExtractor(const Function& func) {
load_receiver,
NULL);
- ReturnNode* return_node = new ReturnNode(Scanner::kNoSourcePos, closure);
+ ReturnNode* return_node = new ReturnNode(ident_pos, closure);
current_block_->statements->Add(return_node);
return CloseBlock();
}
@@ -2920,20 +2920,20 @@ SequenceNode* Parser::MakeImplicitConstructor(const Function& func) {
// Prepare user-defined arguments to be forwarded to super call.
// The first user-defined argument is at position 1.
- forwarding_args = new ArgumentListNode(Scanner::kNoSourcePos);
+ forwarding_args = new ArgumentListNode(ctor_pos);
for (int i = 1; i < func.NumParameters(); i++) {
LocalVariable* param = new LocalVariable(
Scanner::kNoSourcePos,
String::ZoneHandle(Z, func.ParameterNameAt(i)),
Object::dynamic_type());
current_block_->scope->InsertParameterAt(i, param);
- forwarding_args->Add(new LoadLocalNode(Scanner::kNoSourcePos, param));
+ forwarding_args->Add(new LoadLocalNode(ctor_pos, param));
}
}
AstNode* super_call = GenerateSuperConstructorCall(
current_class(),
- Scanner::kNoSourcePos,
+ ctor_pos,
receiver,
forwarding_args);
if (super_call != NULL) {
@@ -2942,7 +2942,7 @@ SequenceNode* Parser::MakeImplicitConstructor(const Function& func) {
CheckFieldsInitialized(current_class());
// Empty constructor body.
- current_block_->statements->Add(new ReturnNode(Scanner::kNoSourcePos));
+ current_block_->statements->Add(new ReturnNode(ctor_pos));
SequenceNode* statements = CloseBlock();
return statements;
}
@@ -7084,14 +7084,14 @@ SequenceNode* Parser::CloseAsyncFunction(const Function& closure,
// Add to AST:
// :async_completer = new Completer.sync();
ArgumentListNode* empty_args =
- new (Z) ArgumentListNode(Scanner::kNoSourcePos);
+ new (Z) ArgumentListNode(closure_body->token_pos());
ConstructorCallNode* completer_constructor_node = new (Z) ConstructorCallNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
TypeArguments::ZoneHandle(Z),
completer_constructor,
empty_args);
StoreLocalNode* store_completer = new (Z) StoreLocalNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
async_completer,
completer_constructor_node);
current_block_->statements->Add(store_completer);
@@ -7100,18 +7100,19 @@ SequenceNode* Parser::CloseAsyncFunction(const Function& closure,
LocalVariable* jump_var =
current_block_->scope->LookupVariable(Symbols::AwaitJumpVar(), false);
LiteralNode* init_value =
- new(Z) LiteralNode(Scanner::kNoSourcePos, Smi::ZoneHandle(Smi::New(-1)));
+ new(Z) LiteralNode(closure_body->token_pos(),
+ Smi::ZoneHandle(Smi::New(-1)));
current_block_->statements->Add(
- new(Z) StoreLocalNode(Scanner::kNoSourcePos, jump_var, init_value));
+ new(Z) StoreLocalNode(closure_body->token_pos(), jump_var, init_value));
// Add to AST:
// :async_op = <closure>; (containing the original body)
LocalVariable* async_op_var = current_block_->scope->LookupVariable(
Symbols::AsyncOperation(), false);
ClosureNode* cn = new(Z) ClosureNode(
- Scanner::kNoSourcePos, closure, NULL, closure_body->scope());
+ closure_body->token_pos(), closure, NULL, closure_body->scope());
StoreLocalNode* store_async_op = new (Z) StoreLocalNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
async_op_var,
cn);
current_block_->statements->Add(store_async_op);
@@ -7123,18 +7124,18 @@ SequenceNode* Parser::CloseAsyncFunction(const Function& closure,
Symbols::AsyncThenWrapperHelper()));
ASSERT(!async_then_wrapper_helper.IsNull());
ArgumentListNode* async_then_wrapper_helper_args = new (Z) ArgumentListNode(
- Scanner::kNoSourcePos);
+ closure_body->token_pos());
async_then_wrapper_helper_args->Add(
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var));
+ new (Z) LoadLocalNode(closure_body->token_pos(), async_op_var));
StaticCallNode* then_wrapper_call = new (Z) StaticCallNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
async_then_wrapper_helper,
async_then_wrapper_helper_args);
LocalVariable* async_then_callback_var =
current_block_->scope->LookupVariable(
Symbols::AsyncThenCallback(), false);
StoreLocalNode* store_async_then_callback = new (Z) StoreLocalNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
async_then_callback_var,
then_wrapper_call);
@@ -7147,18 +7148,18 @@ SequenceNode* Parser::CloseAsyncFunction(const Function& closure,
Symbols::AsyncErrorWrapperHelper()));
ASSERT(!async_error_wrapper_helper.IsNull());
ArgumentListNode* async_error_wrapper_helper_args = new (Z) ArgumentListNode(
- Scanner::kNoSourcePos);
+ closure_body->token_pos());
async_error_wrapper_helper_args->Add(
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var));
+ new (Z) LoadLocalNode(closure_body->token_pos(), async_op_var));
StaticCallNode* error_wrapper_call = new (Z) StaticCallNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
async_error_wrapper_helper,
async_error_wrapper_helper_args);
LocalVariable* async_catch_error_callback_var =
current_block_->scope->LookupVariable(
Symbols::AsyncCatchErrorCallback(), false);
StoreLocalNode* store_async_catch_error_callback = new (Z) StoreLocalNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
async_catch_error_callback_var,
error_wrapper_call);
@@ -7166,22 +7167,23 @@ SequenceNode* Parser::CloseAsyncFunction(const Function& closure,
// Add to AST:
// new Future.microtask(:async_op);
- ArgumentListNode* arguments = new (Z) ArgumentListNode(Scanner::kNoSourcePos);
+ ArgumentListNode* arguments =
+ new (Z) ArgumentListNode(closure_body->token_pos());
arguments->Add(new (Z) LoadLocalNode(
- Scanner::kNoSourcePos, async_op_var));
+ closure_body->token_pos(), async_op_var));
ConstructorCallNode* future_node = new (Z) ConstructorCallNode(
- Scanner::kNoSourcePos, TypeArguments::ZoneHandle(Z), constructor,
+ closure_body->token_pos(), TypeArguments::ZoneHandle(Z), constructor,
arguments);
current_block_->statements->Add(future_node);
// Add to AST:
// return :async_completer.future;
ReturnNode* return_node = new (Z) ReturnNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
new (Z) InstanceGetterNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
new (Z) LoadLocalNode(
- Scanner::kNoSourcePos,
+ closure_body->token_pos(),
async_completer),
Symbols::CompleterFuture()));
current_block_->statements->Add(return_node);

Powered by Google App Engine
This is Rietveld 408576698