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

Unified Diff: runtime/vm/kernel_to_il.cc

Issue 2512653002: Merge of source position information from kernel-sdk. (Closed)
Patch Set: Changed how GetTokenLocation was called back to original to fix failing failing tests. Created 4 years, 1 month 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/kernel_to_il.h ('k') | runtime/vm/object.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/kernel_to_il.cc
diff --git a/runtime/vm/kernel_to_il.cc b/runtime/vm/kernel_to_il.cc
index c344d6d0b8605e07aad12593718c900f77580b17..9ebcfc1a87cdb923dba3c9319005cbcce3edbd55 100644
--- a/runtime/vm/kernel_to_il.cc
+++ b/runtime/vm/kernel_to_il.cc
@@ -2287,24 +2287,26 @@ Fragment FlowGraphBuilder::IntConstant(int64_t value) {
}
-Fragment FlowGraphBuilder::InstanceCall(const dart::String& name,
+Fragment FlowGraphBuilder::InstanceCall(TokenPosition position,
+ const dart::String& name,
Token::Kind kind,
intptr_t argument_count,
intptr_t num_args_checked) {
- return InstanceCall(name, kind, argument_count, Array::null_array(),
+ return InstanceCall(position, name, kind, argument_count, Array::null_array(),
num_args_checked);
}
-Fragment FlowGraphBuilder::InstanceCall(const dart::String& name,
+Fragment FlowGraphBuilder::InstanceCall(TokenPosition position,
+ const dart::String& name,
Token::Kind kind,
intptr_t argument_count,
const Array& argument_names,
intptr_t num_args_checked) {
ArgumentArray arguments = GetArguments(argument_count);
- InstanceCallInstr* call = new (Z)
- InstanceCallInstr(TokenPosition::kNoSource, name, kind, arguments,
- argument_names, num_args_checked, ic_data_array_);
+ InstanceCallInstr* call =
+ new (Z) InstanceCallInstr(position, name, kind, arguments, argument_names,
+ num_args_checked, ic_data_array_);
Push(call);
return Fragment(call);
}
@@ -2321,11 +2323,10 @@ Fragment FlowGraphBuilder::ClosureCall(int argument_count,
}
-Fragment FlowGraphBuilder::ThrowException() {
+Fragment FlowGraphBuilder::ThrowException(TokenPosition position) {
Fragment instructions;
instructions += Drop();
- instructions +=
- Fragment(new (Z) ThrowInstr(TokenPosition::kNoSource)).closed();
+ instructions += Fragment(new (Z) ThrowInstr(position)).closed();
// Use it's side effect of leaving a constant on the stack (does not change
// the graph).
NullConstant();
@@ -2471,9 +2472,10 @@ Fragment FlowGraphBuilder::Return() {
}
-Fragment FlowGraphBuilder::StaticCall(const Function& target,
+Fragment FlowGraphBuilder::StaticCall(TokenPosition position,
+ const Function& target,
intptr_t argument_count) {
- return StaticCall(target, argument_count, Array::null_array());
+ return StaticCall(position, target, argument_count, Array::null_array());
}
@@ -2499,13 +2501,13 @@ static intptr_t GetResultCidOfListFactory(Zone* zone,
}
-Fragment FlowGraphBuilder::StaticCall(const Function& target,
+Fragment FlowGraphBuilder::StaticCall(TokenPosition position,
+ const Function& target,
intptr_t argument_count,
const Array& argument_names) {
ArgumentArray arguments = GetArguments(argument_count);
- StaticCallInstr* call =
- new (Z) StaticCallInstr(TokenPosition::kNoSource, target, argument_names,
- arguments, ic_data_array_);
+ StaticCallInstr* call = new (Z) StaticCallInstr(
+ position, target, argument_names, arguments, ic_data_array_);
const intptr_t list_cid =
GetResultCidOfListFactory(Z, target, argument_count);
if (list_cid != kDynamicCid) {
@@ -2645,12 +2647,12 @@ Fragment FlowGraphBuilder::ThrowTypeError() {
instructions += Constant(H.DartSymbol("Malformed type."));
instructions += PushArgument(); // message
- instructions += StaticCall(constructor, 5);
+ instructions += StaticCall(TokenPosition::kNoSource, constructor, 5);
instructions += Drop();
// Throw the exception
instructions += PushArgument();
- instructions += ThrowException();
+ instructions += ThrowException(TokenPosition::kNoSource);
return instructions;
}
@@ -2685,7 +2687,7 @@ Fragment FlowGraphBuilder::ThrowNoSuchMethodError() {
instructions += NullConstant();
instructions += PushArgument(); // existingArgumentNames
- instructions += StaticCall(throw_function, 6);
+ instructions += StaticCall(TokenPosition::kNoSource, throw_function, 6);
// Leave "result" on the stack since callers expect it to be there (even
// though the function will result in an exception).
@@ -3447,7 +3449,8 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfImplicitClosureFunction(
// Forward them to the target.
intptr_t argument_count = positional_argument_count + named_argument_count;
if (!target.is_static()) ++argument_count;
- body += StaticCall(target, argument_count, argument_names);
+ body += StaticCall(TokenPosition::kNoSource, target, argument_count,
+ argument_names);
// Return the result.
body += Return();
@@ -3534,7 +3537,7 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfNoSuchMethodDispatcher(
Z, mirror_class.LookupStaticFunction(dart::Library::PrivateCoreLibName(
Symbols::AllocateInvocationMirror())));
ASSERT(!allocation_function.IsNull());
- body += StaticCall(allocation_function, 4);
+ body += StaticCall(TokenPosition::kMinSource, allocation_function, 4);
body += PushArgument(); // For the call to noSuchMethod.
ArgumentsDescriptor two_arguments(
@@ -3550,7 +3553,7 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfNoSuchMethodDispatcher(
dart::Class::Handle(Z, I->object_store()->object_class()),
Symbols::NoSuchMethod(), two_arguments);
}
- body += StaticCall(no_such_method, 2);
+ body += StaticCall(TokenPosition::kMinSource, no_such_method, 2);
body += Return();
return new (Z) FlowGraph(*parsed_function_, graph_entry_, next_block_id_ - 1);
@@ -3614,7 +3617,8 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfInvokeFieldDispatcher(
// Invoke the getter to get the field value.
body += LoadLocal(scope->VariableAt(0));
body += PushArgument();
- body += InstanceCall(getter_name, Token::kGET, 1);
+ body +=
+ InstanceCall(TokenPosition::kMinSource, getter_name, Token::kGET, 1);
}
body += PushArgument();
@@ -3633,8 +3637,8 @@ FlowGraph* FlowGraphBuilder::BuildGraphOfInvokeFieldDispatcher(
body += ClosureCall(descriptor.Count(), argument_names);
} else {
- body += InstanceCall(Symbols::Call(), Token::kILLEGAL, descriptor.Count(),
- argument_names);
+ body += InstanceCall(TokenPosition::kMinSource, Symbols::Call(),
+ Token::kILLEGAL, descriptor.Count(), argument_names);
}
body += Return();
@@ -3747,7 +3751,8 @@ Fragment FlowGraphBuilder::TranslateInitializers(
const Function& target = Function::ZoneHandle(
Z, H.LookupConstructorByKernelConstructor(init->target()));
intptr_t argument_count = init->arguments()->count() + 1;
- instructions += StaticCall(target, argument_count, argument_names);
+ instructions += StaticCall(TokenPosition::kNoSource, target,
+ argument_count, argument_names);
instructions += Drop();
} else if (initializer->IsRedirectingInitializer()) {
RedirectingInitializer* init = RedirectingInitializer::Cast(initializer);
@@ -3762,7 +3767,8 @@ Fragment FlowGraphBuilder::TranslateInitializers(
const Function& target = Function::ZoneHandle(
Z, H.LookupConstructorByKernelConstructor(init->target()));
intptr_t argument_count = init->arguments()->count() + 1;
- instructions += StaticCall(target, argument_count, argument_names);
+ instructions += StaticCall(TokenPosition::kNoSource, target,
+ argument_count, argument_names);
instructions += Drop();
} else if (initializer->IsLocalInitializer()) {
// The other initializers following this one might read the variable. This
@@ -4189,7 +4195,7 @@ void FlowGraphBuilder::VisitStaticGet(StaticGet* node) {
Fragment instructions = Constant(field);
fragment_ = instructions + LoadStaticField();
} else {
- fragment_ = StaticCall(getter, 0);
+ fragment_ = StaticCall(node->position(), getter, 0);
}
}
} else {
@@ -4198,7 +4204,7 @@ void FlowGraphBuilder::VisitStaticGet(StaticGet* node) {
Z, H.LookupStaticMethodByKernelProcedure(procedure));
if (procedure->kind() == Procedure::kGetter) {
- fragment_ = StaticCall(target, 0);
+ fragment_ = StaticCall(node->position(), target, 0);
} else if (procedure->kind() == Procedure::kMethod) {
ASSERT(procedure->IsStatic());
Function& closure_function =
@@ -4239,7 +4245,7 @@ void FlowGraphBuilder::VisitStaticSet(StaticSet* node) {
Procedure* procedure = Procedure::Cast(target);
const Function& target = Function::ZoneHandle(
Z, H.LookupStaticMethodByKernelProcedure(procedure));
- instructions += StaticCall(target, 1);
+ instructions += StaticCall(node->position(), target, 1);
// Drop the unused result & leave the stored value on the stack.
fragment_ = instructions + Drop();
@@ -4251,7 +4257,8 @@ void FlowGraphBuilder::VisitPropertyGet(PropertyGet* node) {
Fragment instructions = TranslateExpression(node->receiver());
instructions += PushArgument();
const dart::String& getter_name = H.DartGetterName(node->name());
- fragment_ = instructions + InstanceCall(getter_name, Token::kGET, 1);
+ fragment_ = instructions +
+ InstanceCall(node->position(), getter_name, Token::kGET, 1);
}
@@ -4265,7 +4272,7 @@ void FlowGraphBuilder::VisitPropertySet(PropertySet* node) {
instructions += PushArgument();
const dart::String& setter_name = H.DartSetterName(node->name());
- instructions += InstanceCall(setter_name, Token::kSET, 2);
+ instructions += InstanceCall(node->position(), setter_name, Token::kSET, 2);
fragment_ = instructions + Drop();
}
@@ -4295,7 +4302,7 @@ void FlowGraphBuilder::VisitDirectPropertyGet(DirectPropertyGet* node) {
Fragment instructions = TranslateExpression(node->receiver());
instructions += PushArgument();
- fragment_ = instructions + StaticCall(target, 1);
+ fragment_ = instructions + StaticCall(node->position(), target, 1);
}
@@ -4312,7 +4319,7 @@ void FlowGraphBuilder::VisitDirectPropertySet(DirectPropertySet* node) {
instructions += TranslateExpression(node->value());
instructions += StoreLocal(value);
instructions += PushArgument();
- instructions += StaticCall(target, 2);
+ instructions += StaticCall(node->position(), target, 2);
fragment_ = instructions + Drop();
}
@@ -4397,7 +4404,8 @@ void FlowGraphBuilder::VisitStaticInvocation(StaticInvocation* node) {
instructions += StrictCompare(Token::kEQ_STRICT, /*number_check=*/true);
} else {
instructions += TranslateArguments(node->arguments(), NULL);
- instructions += StaticCall(target, argument_count, argument_names);
+ instructions +=
+ StaticCall(node->position(), target, argument_count, argument_names);
if (target.IsGenerativeConstructor()) {
// Drop the result of the constructor call and leave [instance_variable]
@@ -4454,8 +4462,9 @@ void FlowGraphBuilder::VisitMethodInvocation(MethodInvocation* node) {
num_args_checked = argument_count;
}
- fragment_ = instructions + InstanceCall(name, token_kind, argument_count,
- argument_names, num_args_checked);
+ fragment_ = instructions + InstanceCall(node->position(), name, token_kind,
+ argument_count, argument_names,
+ num_args_checked);
}
@@ -4472,7 +4481,8 @@ void FlowGraphBuilder::VisitDirectMethodInvocation(
Fragment instructions = TranslateExpression(node->receiver());
instructions += PushArgument();
instructions += TranslateArguments(node->arguments(), &argument_names);
- fragment_ = instructions + StaticCall(target, argument_count, argument_names);
+ fragment_ = instructions + StaticCall(node->position(), target,
+ argument_count, argument_names);
}
@@ -4532,7 +4542,8 @@ void FlowGraphBuilder::VisitConstructorInvocation(ConstructorInvocation* node) {
const Function& target = Function::ZoneHandle(
Z, H.LookupConstructorByKernelConstructor(klass, node->target()));
intptr_t argument_count = node->arguments()->count() + 1;
- instructions += StaticCall(target, argument_count, argument_names);
+ instructions +=
+ StaticCall(node->position(), target, argument_count, argument_names);
fragment_ = instructions + Drop();
}
@@ -4575,7 +4586,8 @@ void FlowGraphBuilder::VisitIsExpression(IsExpression* node) {
instructions += PushArgument(); // Negate?.
instructions +=
- InstanceCall(dart::Library::PrivateCoreLibName(Symbols::_instanceOf()),
+ InstanceCall(TokenPosition::kNoSource,
+ dart::Library::PrivateCoreLibName(Symbols::_instanceOf()),
Token::kIS, 4);
}
@@ -4615,6 +4627,7 @@ void FlowGraphBuilder::VisitAsExpression(AsExpression* node) {
instructions += PushArgument(); // Type.
instructions += InstanceCall(
+ TokenPosition::kNoSource,
dart::Library::PrivateCoreLibName(Symbols::_as()), Token::kAS, 3);
}
@@ -4761,7 +4774,7 @@ void FlowGraphBuilder::VisitListLiteral(ListLiteral* node) {
const Function& factory_method = Function::ZoneHandle(
Z, factory_class.LookupFactory(
dart::Library::PrivateCoreLibName(Symbols::ListLiteralFactory())));
- fragment_ = instructions + StaticCall(factory_method, 2);
+ fragment_ = instructions + StaticCall(node->position(), factory_method, 2);
}
@@ -4812,7 +4825,7 @@ void FlowGraphBuilder::VisitMapLiteral(MapLiteral* node) {
}
instructions += PushArgument(); // The array.
- fragment_ = instructions + StaticCall(factory_method, 2);
+ fragment_ = instructions + StaticCall(node->position(), factory_method, 2);
}
@@ -4833,7 +4846,7 @@ void FlowGraphBuilder::VisitThrow(Throw* node) {
instructions += TranslateExpression(node->expression());
instructions += PushArgument();
- instructions += ThrowException();
+ instructions += ThrowException(node->position());
ASSERT(instructions.is_closed());
fragment_ = instructions;
@@ -5117,7 +5130,8 @@ void FlowGraphBuilder::VisitForInStatement(ForInStatement* node) {
const dart::String& iterator_getter = dart::String::ZoneHandle(
Z, dart::Field::GetterSymbol(Symbols::Iterator()));
- instructions += InstanceCall(iterator_getter, Token::kGET, 1);
+ instructions +=
+ InstanceCall(TokenPosition::kNoSource, iterator_getter, Token::kGET, 1);
LocalVariable* iterator = scopes_->iterator_variables[for_in_depth_];
instructions += StoreLocal(iterator);
instructions += Drop();
@@ -5126,7 +5140,8 @@ void FlowGraphBuilder::VisitForInStatement(ForInStatement* node) {
++loop_depth_;
Fragment condition = LoadLocal(iterator);
condition += PushArgument();
- condition += InstanceCall(Symbols::MoveNext(), Token::kILLEGAL, 1);
+ condition += InstanceCall(TokenPosition::kNoSource, Symbols::MoveNext(),
+ Token::kILLEGAL, 1);
TargetEntryInstr* body_entry;
TargetEntryInstr* loop_exit;
condition += BranchIfTrue(&body_entry, &loop_exit);
@@ -5137,7 +5152,8 @@ void FlowGraphBuilder::VisitForInStatement(ForInStatement* node) {
body += PushArgument();
const dart::String& current_getter = dart::String::ZoneHandle(
Z, dart::Field::GetterSymbol(Symbols::Current()));
- body += InstanceCall(current_getter, Token::kGET, 1);
+ body +=
+ InstanceCall(TokenPosition::kNoSource, current_getter, Token::kGET, 1);
body += StoreLocal(LookupVariable(node->variable()));
body += Drop();
body += TranslateStatement(node->body());
@@ -5258,12 +5274,12 @@ void FlowGraphBuilder::VisitSwitchStatement(SwitchStatement* node) {
body_fragment += NullConstant();
body_fragment += PushArgument(); // line
- body_fragment += StaticCall(constructor, 3);
+ body_fragment += StaticCall(TokenPosition::kNoSource, constructor, 3);
body_fragment += Drop();
// Throw the exception
body_fragment += PushArgument();
- body_fragment += ThrowException();
+ body_fragment += ThrowException(TokenPosition::kNoSource);
body_fragment += Drop();
}
@@ -5327,10 +5343,10 @@ void FlowGraphBuilder::VisitSwitchStatement(SwitchStatement* node) {
current_instructions += PushArgument();
current_instructions += LoadLocal(scopes_->switch_variable);
current_instructions += PushArgument();
- current_instructions +=
- InstanceCall(Symbols::EqualOperator(), Token::kEQ,
- /*argument_count=*/2,
- /*num_args_checked=*/2);
+ current_instructions += InstanceCall(
+ TokenPosition::kNoSource, Symbols::EqualOperator(), Token::kEQ,
+ /*argument_count=*/2,
+ /*num_args_checked=*/2);
current_instructions += BranchIfTrue(&then, &otherwise);
Fragment then_fragment(then);
@@ -5450,12 +5466,12 @@ void FlowGraphBuilder::VisitAssertStatement(AssertStatement* node) {
otherwise_fragment += IntConstant(0);
otherwise_fragment += PushArgument(); // column
- otherwise_fragment += StaticCall(constructor, 5);
+ otherwise_fragment += StaticCall(TokenPosition::kNoSource, constructor, 5);
otherwise_fragment += Drop();
// Throw _AssertionError exception.
otherwise_fragment += PushArgument();
- otherwise_fragment += ThrowException();
+ otherwise_fragment += ThrowException(TokenPosition::kNoSource);
otherwise_fragment += Drop();
fragment_ = Fragment(instructions.entry, then);
@@ -5610,6 +5626,7 @@ void FlowGraphBuilder::VisitTryCatch(class TryCatch* node) {
catch_body += Constant(Object::bool_false());
catch_body += PushArgument(); // negate
catch_body += InstanceCall(
+ TokenPosition::kNoSource,
dart::Library::PrivateCoreLibName(Symbols::_instanceOf()),
Token::kIS, 4);
@@ -5727,6 +5744,7 @@ Fragment FlowGraphBuilder::TranslateFunctionNode(FunctionNode* node,
for (intptr_t i = 0; i < scopes_->function_scopes.length(); ++i) {
if (scopes_->function_scopes[i].function != node) continue;
+ // NOTE: This is not TokenPosition in the general sense!
function = I->LookupClosureFunction(parsed_function_->function(),
TokenPosition(i));
if (function.IsNull()) {
@@ -5738,6 +5756,7 @@ Fragment FlowGraphBuilder::TranslateFunctionNode(FunctionNode* node,
name = &H.DartSymbol(
FunctionDeclaration::Cast(parent)->variable()->name());
}
+ // NOTE: This is not TokenPosition in the general sense!
function = Function::NewClosureFunction(
*name, parsed_function_->function(), TokenPosition(i));
function.set_is_debuggable(false);
« no previous file with comments | « runtime/vm/kernel_to_il.h ('k') | runtime/vm/object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698