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

Unified Diff: runtime/lib/function.cc

Issue 2859673002: Pass type argument vector to generic functions (if --reify-generic-functions is (Closed)
Patch Set: address review comments and sync Created 3 years, 7 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 | « pkg/kernel/lib/transformations/mixin_full_resolution.dart ('k') | runtime/lib/invocation_mirror_patch.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/lib/function.cc
diff --git a/runtime/lib/function.cc b/runtime/lib/function.cc
index 8ba93bafaa59c0c14ee02d4321c58a8c94558f7d..c1c141c5c4e73ac444964875fbe7daa617333a32 100644
--- a/runtime/lib/function.cc
+++ b/runtime/lib/function.cc
@@ -14,12 +14,16 @@
namespace dart {
DEFINE_NATIVE_ENTRY(Function_apply, 2) {
- const Array& fun_arguments = Array::CheckedHandle(arguments->NativeArgAt(0));
- const Array& fun_arg_names = Array::CheckedHandle(arguments->NativeArgAt(1));
+ const int kTypeArgsLen = 0; // TODO(regis): Add support for generic function.
+ const Array& fun_arguments =
+ Array::CheckedHandle(zone, arguments->NativeArgAt(0));
+ const Array& fun_arg_names =
+ Array::CheckedHandle(zone, arguments->NativeArgAt(1));
const Array& fun_args_desc = Array::Handle(
- ArgumentsDescriptor::New(fun_arguments.Length(), fun_arg_names));
- const Object& result =
- Object::Handle(DartEntry::InvokeClosure(fun_arguments, fun_args_desc));
+ zone, ArgumentsDescriptor::New(kTypeArgsLen, fun_arguments.Length(),
+ fun_arg_names));
+ const Object& result = Object::Handle(
+ zone, DartEntry::InvokeClosure(fun_arguments, fun_args_desc));
if (result.IsError()) {
Exceptions::PropagateError(Error::Cast(result));
}
@@ -34,26 +38,27 @@ DEFINE_NATIVE_ENTRY(Closure_equals, 2) {
ASSERT(!other.IsNull());
if (receiver.raw() == other.raw()) return Bool::True().raw();
if (other.IsClosure()) {
- const Function& func_a = Function::Handle(receiver.function());
- const Function& func_b = Function::Handle(Closure::Cast(other).function());
+ const Function& func_a = Function::Handle(zone, receiver.function());
+ const Function& func_b =
+ Function::Handle(zone, Closure::Cast(other).function());
if (func_a.raw() == func_b.raw()) {
ASSERT(!func_a.IsImplicitStaticClosureFunction());
if (func_a.IsImplicitInstanceClosureFunction()) {
- const Context& context_a = Context::Handle(receiver.context());
+ const Context& context_a = Context::Handle(zone, receiver.context());
const Context& context_b =
- Context::Handle(Closure::Cast(other).context());
- const Object& receiver_a = Object::Handle(context_a.At(0));
- const Object& receiver_b = Object::Handle(context_b.At(0));
+ Context::Handle(zone, Closure::Cast(other).context());
+ const Object& receiver_a = Object::Handle(zone, context_a.At(0));
+ const Object& receiver_b = Object::Handle(zone, context_b.At(0));
if (receiver_a.raw() == receiver_b.raw()) return Bool::True().raw();
}
} else if (func_a.IsImplicitInstanceClosureFunction() &&
func_b.IsImplicitInstanceClosureFunction()) {
// TODO(rmacnak): Patch existing tears off during reload instead.
- const Context& context_a = Context::Handle(receiver.context());
+ const Context& context_a = Context::Handle(zone, receiver.context());
const Context& context_b =
- Context::Handle(Closure::Cast(other).context());
- const Object& receiver_a = Object::Handle(context_a.At(0));
- const Object& receiver_b = Object::Handle(context_b.At(0));
+ Context::Handle(zone, Closure::Cast(other).context());
+ const Object& receiver_a = Object::Handle(zone, context_a.At(0));
+ const Object& receiver_b = Object::Handle(zone, context_b.At(0));
if ((receiver_a.raw() == receiver_b.raw()) &&
(func_a.name() == func_b.name()) &&
(func_a.Owner() == func_b.Owner())) {
@@ -68,7 +73,7 @@ DEFINE_NATIVE_ENTRY(Closure_equals, 2) {
DEFINE_NATIVE_ENTRY(Closure_hashCode, 1) {
const Closure& receiver =
Closure::CheckedHandle(zone, arguments->NativeArgAt(0));
- const Function& func = Function::Handle(receiver.function());
+ const Function& func = Function::Handle(zone, receiver.function());
return func.GetClosureHashCode();
}
« no previous file with comments | « pkg/kernel/lib/transformations/mixin_full_resolution.dart ('k') | runtime/lib/invocation_mirror_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698