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

Unified Diff: runtime/vm/parser.cc

Issue 2419013004: Add local variable declaration token position to service protocol (Closed)
Patch Set: ... Created 4 years, 2 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') | runtime/vm/raw_object.h » ('j') | 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 b41e0ef5c0577a0bb89730950c03d8c667f7239f..a4c7558dd8818b1d8334208eb1142bb2bacfc345 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -244,6 +244,7 @@ LocalVariable* ParsedFunction::EnsureExpressionTemp() {
if (!has_expression_temp_var()) {
LocalVariable* temp =
new (Z) LocalVariable(function_.token_pos(),
+ function_.token_pos(),
Symbols::ExprTemp(),
Object::dynamic_type());
ASSERT(temp != NULL);
@@ -258,6 +259,7 @@ void ParsedFunction::EnsureFinallyReturnTemp(bool is_async) {
if (!has_finally_return_temp_var()) {
LocalVariable* temp = new(Z) LocalVariable(
function_.token_pos(),
+ function_.token_pos(),
Symbols::FinallyRetVal(),
Object::dynamic_type());
ASSERT(temp != NULL);
@@ -3138,6 +3140,7 @@ SequenceNode* Parser::MakeImplicitConstructor(const Function& func) {
LocalVariable* receiver = new LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::This(),
*ReceiverType(current_class()));
current_block_->scope->InsertParameterAt(0, receiver);
@@ -3186,6 +3189,7 @@ SequenceNode* Parser::MakeImplicitConstructor(const Function& func) {
for (int i = 1; i < func.NumParameters(); i++) {
LocalVariable* param = new LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
String::ZoneHandle(Z, func.ParameterNameAt(i)),
Object::dynamic_type());
current_block_->scope->InsertParameterAt(i, param);
@@ -7102,11 +7106,13 @@ void Parser::AddContinuationVariables() {
// var :await_ctx_var;
LocalVariable* await_jump_var = new (Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AwaitJumpVar(),
Object::dynamic_type());
current_block_->scope->AddVariable(await_jump_var);
LocalVariable* await_ctx_var = new (Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AwaitContextVar(),
Object::dynamic_type());
current_block_->scope->AddVariable(await_ctx_var);
@@ -7121,21 +7127,25 @@ void Parser::AddAsyncClosureVariables() {
// var :async_completer;
LocalVariable* async_op_var = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AsyncOperation(),
Object::dynamic_type());
current_block_->scope->AddVariable(async_op_var);
LocalVariable* async_then_callback_var = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AsyncThenCallback(),
Object::dynamic_type());
current_block_->scope->AddVariable(async_then_callback_var);
LocalVariable* async_catch_error_callback_var = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AsyncCatchErrorCallback(),
Object::dynamic_type());
current_block_->scope->AddVariable(async_catch_error_callback_var);
LocalVariable* async_completer = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AsyncCompleter(),
Object::dynamic_type());
current_block_->scope->AddVariable(async_completer);
@@ -7155,21 +7165,25 @@ void Parser::AddAsyncGeneratorVariables() {
// the body of the async* function. They are used by the await operator.
LocalVariable* controller_var = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::Controller(),
Object::dynamic_type());
current_block_->scope->AddVariable(controller_var);
LocalVariable* async_op_var = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AsyncOperation(),
Object::dynamic_type());
current_block_->scope->AddVariable(async_op_var);
LocalVariable* async_then_callback_var = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AsyncThenCallback(),
Object::dynamic_type());
current_block_->scope->AddVariable(async_then_callback_var);
LocalVariable* async_catch_error_callback_var = new(Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
Symbols::AsyncCatchErrorCallback(),
Object::dynamic_type());
current_block_->scope->AddVariable(async_catch_error_callback_var);
@@ -7658,7 +7672,10 @@ void Parser::AddFormalParamsToScope(const ParamList* params,
ASSERT(!is_top_level_ || param_desc.type->IsResolved());
const String* name = param_desc.name;
LocalVariable* parameter = new(Z) LocalVariable(
- param_desc.name_pos, *name, *param_desc.type);
+ param_desc.name_pos,
+ param_desc.name_pos,
+ *name,
+ *param_desc.type);
if (!scope->InsertParameterAt(i, parameter)) {
ReportError(param_desc.name_pos,
"name '%s' already exists in scope",
@@ -7770,7 +7787,10 @@ AstNode* Parser::ParseVariableDeclaration(const AbstractType& type,
is_const, kConsumeCascades, await_preamble);
const TokenPosition expr_end_pos = TokenPos();
variable = new(Z) LocalVariable(
- expr_end_pos, ident, type);
+ ident_pos,
+ expr_end_pos,
+ ident,
+ type);
initialization = new(Z) StoreLocalNode(
assign_pos, variable, expr);
if (is_const) {
@@ -7783,7 +7803,10 @@ AstNode* Parser::ParseVariableDeclaration(const AbstractType& type,
} else {
// Initialize variable with null.
variable = new(Z) LocalVariable(
- assign_pos, ident, type);
+ ident_pos,
+ assign_pos,
+ ident,
+ type);
AstNode* null_expr = new(Z) LiteralNode(ident_pos, Object::null_instance());
initialization = new(Z) StoreLocalNode(
ident_pos, variable, null_expr);
@@ -7920,6 +7943,7 @@ AstNode* Parser::ParseFunctionStatement(bool is_literal) {
result_type = Type::DynamicType();
const TokenPosition function_pos = TokenPos();
+ TokenPosition function_name_pos = TokenPosition::kNoSource;
TokenPosition metadata_pos = TokenPosition::kNoSource;
if (is_literal) {
ASSERT(CurrentToken() == Token::kLPAREN || CurrentToken() == Token::kLT);
@@ -7934,7 +7958,7 @@ AstNode* Parser::ParseFunctionStatement(bool is_literal) {
// referring to a not yet declared function type parameter.
result_type = ParseType(ClassFinalizer::kDoNotResolve);
}
- const TokenPosition name_pos = TokenPos();
+ function_name_pos = TokenPos();
variable_name = ExpectIdentifier("function name expected");
function_name = variable_name;
@@ -7947,7 +7971,7 @@ AstNode* Parser::ParseFunctionStatement(bool is_literal) {
ASSERT(!script_.IsNull());
intptr_t line_number;
script_.GetTokenLocation(previous_pos, &line_number, NULL);
- ReportError(name_pos,
+ ReportError(function_name_pos,
"identifier '%s' previously used in line %" Pd "",
function_name->ToCString(),
line_number);
@@ -8026,7 +8050,8 @@ AstNode* Parser::ParseFunctionStatement(bool is_literal) {
// Add the function variable to the scope before parsing the function in
// order to allow self reference from inside the function.
- function_variable = new(Z) LocalVariable(function_pos,
+ function_variable = new(Z) LocalVariable(function_name_pos,
+ function_pos,
*variable_name,
function_type);
function_variable->set_is_final();
@@ -8838,7 +8863,7 @@ AstNode* Parser::ParseSwitchStatement(String* label_name) {
expr_pos));
temp_var_type.SetIsFinalized();
LocalVariable* temp_variable = new(Z) LocalVariable(
- expr_pos, Symbols::SwitchExpr(), temp_var_type);
+ expr_pos, expr_pos, Symbols::SwitchExpr(), temp_var_type);
current_block_->scope->AddVariable(temp_variable);
AstNode* save_switch_expr = new(Z) StoreLocalNode(
expr_pos, temp_variable, switch_expr);
@@ -9128,7 +9153,7 @@ AstNode* Parser::ParseAwaitForStatement(String* label_name) {
ctor_args);
const AbstractType& iterator_type = Object::dynamic_type();
LocalVariable* iterator_var = new(Z) LocalVariable(
- stream_expr_pos, Symbols::ForInIter(), iterator_type);
+ stream_expr_pos, stream_expr_pos, Symbols::ForInIter(), iterator_type);
current_block_->scope->AddVariable(iterator_var);
AstNode* iterator_init =
new(Z) StoreLocalNode(stream_expr_pos, iterator_var, ctor_call);
@@ -9213,6 +9238,7 @@ AstNode* Parser::ParseAwaitForStatement(String* label_name) {
// loop block, so it gets put in the loop context level.
LocalVariable* loop_var =
new(Z) LocalVariable(loop_var_assignment_pos,
+ loop_var_assignment_pos,
*loop_var_name,
loop_var_type);;
if (loop_var_is_final) {
@@ -9388,6 +9414,7 @@ AstNode* Parser::ParseForInStatement(TokenPosition forin_pos,
loop_var_type = ParseConstFinalVarOrType(
I->type_checks() ? ClassFinalizer::kCanonicalize :
ClassFinalizer::kIgnore);
+ loop_var_pos = TokenPos();
loop_var_name = ExpectIdentifier("variable name expected");
}
ExpectToken(Token::kIN);
@@ -9411,6 +9438,7 @@ AstNode* Parser::ParseForInStatement(TokenPosition forin_pos,
// until the loop variable is assigned to.
const AbstractType& iterator_type = Object::dynamic_type();
LocalVariable* iterator_var = new(Z) LocalVariable(
+ collection_pos,
collection_pos, Symbols::ForInIter(), iterator_type);
current_block_->scope->AddVariable(iterator_var);
@@ -9448,7 +9476,8 @@ AstNode* Parser::ParseForInStatement(TokenPosition forin_pos,
// The for loop variable is new for each iteration.
// Create a variable and add it to the loop body scope.
LocalVariable* loop_var =
- new(Z) LocalVariable(loop_var_assignment_pos,
+ new(Z) LocalVariable(loop_var_pos,
+ loop_var_assignment_pos,
*loop_var_name,
loop_var_type);;
if (loop_var_is_final) {
@@ -9615,6 +9644,7 @@ void Parser::AddCatchParamsToScope(CatchParamDesc* exception_param,
if (exception_param->name != NULL) {
LocalVariable* var = new(Z) LocalVariable(
exception_param->token_pos,
+ exception_param->token_pos,
*exception_param->name,
*exception_param->type);
var->set_is_final();
@@ -9625,6 +9655,7 @@ void Parser::AddCatchParamsToScope(CatchParamDesc* exception_param,
if (stack_trace_param->name != NULL) {
LocalVariable* var = new(Z) LocalVariable(
stack_trace_param->token_pos,
+ stack_trace_param->token_pos,
*stack_trace_param->name,
*stack_trace_param->type);
var->set_is_final();
@@ -10034,6 +10065,7 @@ void Parser::SetupSavedTryContext(LocalVariable* saved_try_context) {
last_used_try_index_ - 1));
LocalVariable* async_saved_try_ctx = new (Z) LocalVariable(
TokenPosition::kNoSource,
+ TokenPosition::kNoSource,
async_saved_try_ctx_name,
Object::dynamic_type());
ASSERT(async_temp_scope_ != NULL);
@@ -10075,6 +10107,7 @@ void Parser::SetupExceptionVariables(LocalScope* try_scope,
if (*context_var == NULL) {
*context_var = new(Z) LocalVariable(
TokenPos(),
+ TokenPos(),
Symbols::SavedTryContextVar(),
Object::dynamic_type());
try_scope->AddVariable(*context_var);
@@ -10083,6 +10116,7 @@ void Parser::SetupExceptionVariables(LocalScope* try_scope,
if (*exception_var == NULL) {
*exception_var = new(Z) LocalVariable(
TokenPos(),
+ TokenPos(),
Symbols::ExceptionVar(),
Object::dynamic_type());
try_scope->AddVariable(*exception_var);
@@ -10091,6 +10125,7 @@ void Parser::SetupExceptionVariables(LocalScope* try_scope,
if (*stack_trace_var == NULL) {
*stack_trace_var = new(Z) LocalVariable(
TokenPos(),
+ TokenPos(),
Symbols::StackTraceVar(),
Object::dynamic_type());
try_scope->AddVariable(*stack_trace_var);
@@ -10101,6 +10136,7 @@ void Parser::SetupExceptionVariables(LocalScope* try_scope,
if (*saved_exception_var == NULL) {
*saved_exception_var = new(Z) LocalVariable(
TokenPos(),
+ TokenPos(),
Symbols::SavedExceptionVar(),
Object::dynamic_type());
try_scope->AddVariable(*saved_exception_var);
@@ -10110,6 +10146,7 @@ void Parser::SetupExceptionVariables(LocalScope* try_scope,
if (*saved_stack_trace_var == NULL) {
*saved_stack_trace_var = new(Z) LocalVariable(
TokenPos(),
+ TokenPos(),
Symbols::SavedStackTraceVar(),
Object::dynamic_type());
try_scope->AddVariable(*saved_stack_trace_var);
@@ -11090,6 +11127,7 @@ LocalVariable* Parser::CreateTempConstVariable(TokenPosition token_pos,
OS::SNPrint(name, 64, ":%s%" Pd "", s, token_pos.value());
LocalVariable* temp = new(Z) LocalVariable(
token_pos,
+ token_pos,
String::ZoneHandle(Z, Symbols::New(T, name)),
Object::dynamic_type());
temp->set_is_final();
« no previous file with comments | « runtime/vm/parser.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698