| Index: src/api.cc
|
| ===================================================================
|
| --- src/api.cc (revision 5530)
|
| +++ src/api.cc (working copy)
|
| @@ -767,6 +767,12 @@
|
| }
|
|
|
|
|
| +#define SET_FIELD_WRAPPED(obj, setter, cdata) do { \
|
| + i::Handle<i::Object> proxy = FromCData(cdata); \
|
| + (obj)->setter(*proxy); \
|
| + } while (false)
|
| +
|
| +
|
| void FunctionTemplate::SetCallHandler(InvocationCallback callback,
|
| v8::Handle<Value> data) {
|
| if (IsDeadCheck("v8::FunctionTemplate::SetCallHandler()")) return;
|
| @@ -776,7 +782,7 @@
|
| i::Factory::NewStruct(i::CALL_HANDLER_INFO_TYPE);
|
| i::Handle<i::CallHandlerInfo> obj =
|
| i::Handle<i::CallHandlerInfo>::cast(struct_obj);
|
| - obj->set_callback(*FromCData(callback));
|
| + SET_FIELD_WRAPPED(obj, set_callback, callback);
|
| if (data.IsEmpty()) data = v8::Undefined();
|
| obj->set_data(*Utils::OpenHandle(*data));
|
| Utils::OpenHandle(this)->set_call_code(*obj);
|
| @@ -792,8 +798,8 @@
|
| v8::PropertyAttribute attributes) {
|
| i::Handle<i::AccessorInfo> obj = i::Factory::NewAccessorInfo();
|
| ASSERT(getter != NULL);
|
| - obj->set_getter(*FromCData(getter));
|
| - obj->set_setter(*FromCData(setter));
|
| + SET_FIELD_WRAPPED(obj, set_getter, getter);
|
| + SET_FIELD_WRAPPED(obj, set_setter, setter);
|
| if (data.IsEmpty()) data = v8::Undefined();
|
| obj->set_data(*Utils::OpenHandle(*data));
|
| obj->set_name(*Utils::OpenHandle(*name));
|
| @@ -877,11 +883,13 @@
|
| i::Factory::NewStruct(i::INTERCEPTOR_INFO_TYPE);
|
| i::Handle<i::InterceptorInfo> obj =
|
| i::Handle<i::InterceptorInfo>::cast(struct_obj);
|
| - if (getter != 0) obj->set_getter(*FromCData(getter));
|
| - if (setter != 0) obj->set_setter(*FromCData(setter));
|
| - if (query != 0) obj->set_query(*FromCData(query));
|
| - if (remover != 0) obj->set_deleter(*FromCData(remover));
|
| - if (enumerator != 0) obj->set_enumerator(*FromCData(enumerator));
|
| +
|
| + if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
|
| + if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
|
| + if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
|
| + if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
|
| + if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
|
| +
|
| if (data.IsEmpty()) data = v8::Undefined();
|
| obj->set_data(*Utils::OpenHandle(*data));
|
| Utils::OpenHandle(this)->set_named_property_handler(*obj);
|
| @@ -905,11 +913,13 @@
|
| i::Factory::NewStruct(i::INTERCEPTOR_INFO_TYPE);
|
| i::Handle<i::InterceptorInfo> obj =
|
| i::Handle<i::InterceptorInfo>::cast(struct_obj);
|
| - if (getter != 0) obj->set_getter(*FromCData(getter));
|
| - if (setter != 0) obj->set_setter(*FromCData(setter));
|
| - if (query != 0) obj->set_query(*FromCData(query));
|
| - if (remover != 0) obj->set_deleter(*FromCData(remover));
|
| - if (enumerator != 0) obj->set_enumerator(*FromCData(enumerator));
|
| +
|
| + if (getter != 0) SET_FIELD_WRAPPED(obj, set_getter, getter);
|
| + if (setter != 0) SET_FIELD_WRAPPED(obj, set_setter, setter);
|
| + if (query != 0) SET_FIELD_WRAPPED(obj, set_query, query);
|
| + if (remover != 0) SET_FIELD_WRAPPED(obj, set_deleter, remover);
|
| + if (enumerator != 0) SET_FIELD_WRAPPED(obj, set_enumerator, enumerator);
|
| +
|
| if (data.IsEmpty()) data = v8::Undefined();
|
| obj->set_data(*Utils::OpenHandle(*data));
|
| Utils::OpenHandle(this)->set_indexed_property_handler(*obj);
|
| @@ -928,7 +938,7 @@
|
| i::Factory::NewStruct(i::CALL_HANDLER_INFO_TYPE);
|
| i::Handle<i::CallHandlerInfo> obj =
|
| i::Handle<i::CallHandlerInfo>::cast(struct_obj);
|
| - obj->set_callback(*FromCData(callback));
|
| + SET_FIELD_WRAPPED(obj, set_callback, callback);
|
| if (data.IsEmpty()) data = v8::Undefined();
|
| obj->set_data(*Utils::OpenHandle(*data));
|
| Utils::OpenHandle(this)->set_instance_call_handler(*obj);
|
| @@ -1043,8 +1053,10 @@
|
| i::Factory::NewStruct(i::ACCESS_CHECK_INFO_TYPE);
|
| i::Handle<i::AccessCheckInfo> info =
|
| i::Handle<i::AccessCheckInfo>::cast(struct_info);
|
| - info->set_named_callback(*FromCData(named_callback));
|
| - info->set_indexed_callback(*FromCData(indexed_callback));
|
| +
|
| + SET_FIELD_WRAPPED(info, set_named_callback, named_callback);
|
| + SET_FIELD_WRAPPED(info, set_indexed_callback, indexed_callback);
|
| +
|
| if (data.IsEmpty()) data = v8::Undefined();
|
| info->set_data(*Utils::OpenHandle(*data));
|
|
|
| @@ -2641,8 +2653,9 @@
|
| return;
|
| }
|
| i::Handle<i::PixelArray> pixels = i::Factory::NewPixelArray(length, data);
|
| - self->set_map(
|
| - *i::Factory::GetSlowElementsMap(i::Handle<i::Map>(self->map())));
|
| + i::Handle<i::Map> slow_map =
|
| + i::Factory::GetSlowElementsMap(i::Handle<i::Map>(self->map()));
|
| + self->set_map(*slow_map);
|
| self->set_elements(*pixels);
|
| }
|
|
|
| @@ -2696,8 +2709,9 @@
|
| }
|
| i::Handle<i::ExternalArray> array =
|
| i::Factory::NewExternalArray(length, array_type, data);
|
| - self->set_map(
|
| - *i::Factory::GetSlowElementsMap(i::Handle<i::Map>(self->map())));
|
| + i::Handle<i::Map> slow_map =
|
| + i::Factory::GetSlowElementsMap(i::Handle<i::Map>(self->map()));
|
| + self->set_map(*slow_map);
|
| self->set_elements(*array);
|
| }
|
|
|
|
|