@@ -217,18 +217,28 @@ void php_v8_template_SetAccessorProperty(v8::Isolate *isolate, v8::Local<T> loca
217
217
template <class T , typename N>
218
218
void php_v8_template_SetNativeDataProperty (v8::Isolate *isolate, v8::Local<T> local_template, N* php_v8_template, INTERNAL_FUNCTION_PARAMETERS) {
219
219
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 ;
223
221
224
222
zend_fcall_info getter_fci = empty_fcall_info;
225
223
zend_fcall_info_cache getter_fci_cache = empty_fcall_info_cache;
226
224
227
225
zend_fcall_info setter_fci = empty_fcall_info;
228
226
zend_fcall_info_cache setter_fci_cache = empty_fcall_info_cache;
229
227
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) {
232
242
return ;
233
243
}
234
244
@@ -240,11 +250,6 @@ void php_v8_template_SetNativeDataProperty(v8::Isolate *isolate, v8::Local<T> lo
240
250
241
251
v8::Local<v8::Name> local_name = php_v8_value_get_local_as<v8::Name>(php_v8_name);
242
252
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
-
248
253
PHP_V8_CONVERT_FROM_V8_STRING_TO_STRING (name, local_name);
249
254
250
255
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
258
263
setter = php_v8_callback_accessor_name_setter;
259
264
}
260
265
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
+
261
273
local_template->SetNativeDataProperty (local_name,
262
274
getter,
263
275
setter,
@@ -290,6 +302,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_php_v8_template_SetNativeDataProperty, ZEND_SEND_
290
302
ZEND_ARG_CALLABLE_INFO(0 , getter, 0 )
291
303
ZEND_ARG_CALLABLE_INFO(0 , setter, 1 )
292
304
ZEND_ARG_TYPE_INFO(0 , attributes, IS_LONG, 0 )
305
+ ZEND_ARG_OBJ_INFO(0 , receiver, V8\\FunctionTemplate, 1 )
293
306
ZEND_ARG_TYPE_INFO(0 , settings, IS_LONG, 0 )
294
307
ZEND_END_ARG_INFO()
295
308
0 commit comments