@@ -217,18 +217,28 @@ void php_v8_template_SetAccessorProperty(v8::Isolate *isolate, v8::Local<T> loca
217217template <class T , typename N>
218218void php_v8_template_SetNativeDataProperty (v8::Isolate *isolate, v8::Local<T> local_template, N* php_v8_template, INTERNAL_FUNCTION_PARAMETERS) {
219219 zval *php_v8_name_zv;
220-
221- zend_long attributes = v8::PropertyAttribute::None;
222- zend_long settings = v8::AccessControl::DEFAULT;
220+ zval *php_v8_receiver_zv = NULL ;
223221
224222 zend_fcall_info getter_fci = empty_fcall_info;
225223 zend_fcall_info_cache getter_fci_cache = empty_fcall_info_cache;
226224
227225 zend_fcall_info setter_fci = empty_fcall_info;
228226 zend_fcall_info_cache setter_fci_cache = empty_fcall_info_cache;
229227
230- if (zend_parse_parameters (ZEND_NUM_ARGS (), " of|f!ll" , &php_v8_name_zv, &getter_fci, &getter_fci_cache, &setter_fci, &setter_fci_cache, &attributes, &settings) ==
231- FAILURE) {
228+ v8::AccessorNameGetterCallback getter;
229+ v8::AccessorNameSetterCallback setter = 0 ;
230+
231+ zend_long attributes = v8::PropertyAttribute::None;
232+ v8::Local<v8::AccessorSignature> signature;
233+ zend_long settings = v8::AccessControl::DEFAULT;
234+
235+ v8::Local<v8::External> data;
236+
237+ if (zend_parse_parameters (ZEND_NUM_ARGS (),
238+ " of|f!lo!l" ,
239+ &php_v8_name_zv, &getter_fci, &getter_fci_cache, &setter_fci, &setter_fci_cache,
240+ &attributes, &php_v8_receiver_zv, &settings
241+ ) == FAILURE) {
232242 return ;
233243 }
234244
@@ -240,11 +250,6 @@ void php_v8_template_SetNativeDataProperty(v8::Isolate *isolate, v8::Local<T> lo
240250
241251 v8::Local<v8::Name> local_name = php_v8_value_get_local_as<v8::Name>(php_v8_name);
242252
243- v8::AccessorNameGetterCallback getter;
244- v8::AccessorNameSetterCallback setter = 0 ;
245- v8::Local<v8::External> data;
246- v8::Local<v8::AccessorSignature> signature; // TODO: add AccessorSignature support
247-
248253 PHP_V8_CONVERT_FROM_V8_STRING_TO_STRING (name, local_name);
249254
250255 phpv8::CallbacksBucket *bucket = php_v8_template->persistent_data ->bucket (" native_data_property_" , local_name->IsSymbol (), name);
@@ -258,6 +263,13 @@ void php_v8_template_SetNativeDataProperty(v8::Isolate *isolate, v8::Local<T> lo
258263 setter = php_v8_callback_accessor_name_setter;
259264 }
260265
266+ if (php_v8_receiver_zv) {
267+ PHP_V8_FETCH_FUNCTION_TEMPLATE_WITH_CHECK (php_v8_receiver_zv, php_v8_receiver);
268+ PHP_V8_DATA_ISOLATES_CHECK (php_v8_template, php_v8_receiver);
269+
270+ signature = v8::AccessorSignature::New (isolate, php_v8_function_template_get_local (php_v8_receiver));
271+ }
272+
261273 local_template->SetNativeDataProperty (local_name,
262274 getter,
263275 setter,
@@ -290,6 +302,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_php_v8_template_SetNativeDataProperty, ZEND_SEND_
290302 ZEND_ARG_CALLABLE_INFO(0 , getter, 0 )
291303 ZEND_ARG_CALLABLE_INFO(0 , setter, 1 )
292304 ZEND_ARG_TYPE_INFO(0 , attributes, IS_LONG, 0 )
305+ ZEND_ARG_OBJ_INFO(0 , receiver, V8\\FunctionTemplate, 1 )
293306 ZEND_ARG_TYPE_INFO(0 , settings, IS_LONG, 0 )
294307ZEND_END_ARG_INFO()
295308
0 commit comments