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

Unified Diff: runtime/vm/object.cc

Issue 3008923002: Improve the performance of closure-converted code. (Closed)
Patch Set: Additional bug fixes. Created 3 years, 4 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/kernel_binary_flowgraph.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.cc
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index c1cec8022088ff8267b686a9239c247baac77a38..0e7eb0dbe9d58394a245a527dea047a5f107bade 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -5486,7 +5486,8 @@ bool Function::HasGenericParent() const {
}
RawFunction* Function::implicit_closure_function() const {
- if (IsClosureFunction() || IsSignatureFunction() || IsFactory()) {
+ if (IsClosureFunction() || IsConvertedClosureFunction() ||
+ IsSignatureFunction() || IsFactory()) {
return Function::null();
}
const Object& obj = Object::Handle(raw_ptr()->data_);
@@ -5504,7 +5505,8 @@ RawFunction* Function::implicit_closure_function() const {
}
void Function::set_implicit_closure_function(const Function& value) const {
- ASSERT(!IsClosureFunction() && !IsSignatureFunction());
+ ASSERT(!IsClosureFunction() && !IsSignatureFunction() &&
+ !IsConvertedClosureFunction());
if (is_native()) {
const Object& obj = Object::Handle(raw_ptr()->data_);
ASSERT(obj.IsArray());
@@ -5625,6 +5627,9 @@ const char* Function::KindToCString(RawFunction::Kind kind) {
case RawFunction::kImplicitClosureFunction:
return "ImplicitClosureFunction";
break;
+ case RawFunction::kConvertedClosureFunction:
+ return "ConvertedClosureFunction";
+ break;
case RawFunction::kSignatureFunction:
return "SignatureFunction";
break;
@@ -6352,7 +6357,7 @@ RawFunction* Function::InstantiateSignatureFrom(
if (IsConvertedClosureFunction()) {
sig = Function::NewConvertedClosureFunction(
String::Handle(zone, name()), parent, TokenPosition::kNoSource);
- // TODO(sjindel): Kernel generic methods undone. Handle type parameters
+ // TODO(30455): Kernel generic methods undone. Handle type parameters
// correctly when generic closures are supported. Until then, all type
// parameters to this target are used for captured type variables, so they
// aren't relevant to the type of the function.
@@ -6987,11 +6992,6 @@ RawFunction* Function::ConvertedClosureFunction() const {
// Set closure function's end token to this end token.
closure_function.set_end_token_pos(end_token_pos());
- // The closurized method stub just calls into the original method and should
- // therefore be skipped by the debugger and in stack traces.
- closure_function.set_is_debuggable(false);
- closure_function.set_is_visible(false);
-
// Set closure function's formal parameters to this formal parameters,
// removing the first parameter over which the currying is done, and adding
// the closure class instance as the first parameter. So, the overall number
@@ -7117,6 +7117,7 @@ void Function::BuildSignatureParameters(
}
RawInstance* Function::ImplicitStaticClosure() const {
+ ASSERT(IsImplicitStaticClosureFunction());
if (implicit_static_closure() == Instance::null()) {
Zone* zone = Thread::Current()->zone();
const Context& context = Object::empty_context();
@@ -7299,7 +7300,7 @@ RawScript* Function::script() const {
return script.raw();
}
}
- if (IsClosureFunction()) {
+ if (IsClosureFunction() || IsConvertedClosureFunction()) {
return Function::Handle(parent_function()).script();
}
const Object& obj = Object::Handle(raw_ptr()->owner_);
« no previous file with comments | « runtime/vm/kernel_binary_flowgraph.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698