| 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();
|
| }
|
|
|
|
|