@@ -212,7 +212,11 @@ static void v8js_call_php_func(zend_object *object, zend_function *method_ptr, c
212212 return_value = v8js_propagate_exception (ctx);
213213 } else if (Z_TYPE (retval) == IS_OBJECT && Z_OBJ (retval) == object) {
214214 // special case: "return $this"
215+ #if PHP_V8_API_VERSION >= 13000000
216+ return_value = info.This ();
217+ #else
215218 return_value = info.Holder ();
219+ #endif
216220 } else {
217221 return_value = zval_to_v8js (&retval, isolate);
218222 }
@@ -227,7 +231,12 @@ static void v8js_call_php_func(zend_object *object, zend_function *method_ptr, c
227231/* Callback for PHP methods and functions */
228232void v8js_php_callback (const v8::FunctionCallbackInfo<v8::Value>& info) /* {{{ */
229233{
230- v8::Local<v8::Object> self = info.Holder ();
234+ v8::Local<v8::Object> self;
235+ #if PHP_V8_API_VERSION >= 13000000
236+ self = info.This ();
237+ #else
238+ self = info.Holder ();
239+ #endif
231240
232241 zend_object *object = reinterpret_cast <zend_object *>(self->GetAlignedPointerFromInternalField (1 ));
233242 zend_function *method_ptr;
@@ -364,7 +373,12 @@ static void v8js_named_property_enumerator(const v8::PropertyCallbackInfo<v8::Ar
364373 v8::Isolate *isolate = info.GetIsolate ();
365374 v8::Local<v8::Context> v8_context = isolate->GetEnteredOrMicrotaskContext ();
366375
367- v8::Local<v8::Object> self = info.Holder ();
376+ v8::Local<v8::Object> self;
377+ #if PHP_V8_API_VERSION >= 13000000
378+ self = info.This ();
379+ #else
380+ self = info.Holder ();
381+ #endif
368382 v8::Local<v8::Array> result = v8::Array::New (isolate, 0 );
369383 uint32_t result_len = 0 ;
370384
@@ -466,7 +480,12 @@ static void v8js_invoke_callback(const v8::FunctionCallbackInfo<v8::Value>& info
466480 v8::Isolate *isolate = info.GetIsolate ();
467481 v8::Local<v8::Context> v8_context = isolate->GetEnteredOrMicrotaskContext ();
468482
469- v8::Local<v8::Object> self = info.Holder ();
483+ v8::Local<v8::Object> self;
484+ #if PHP_V8_API_VERSION >= 13000000
485+ self = info.This ();
486+ #else
487+ self = info.Holder ();
488+ #endif
470489 v8::Local<v8::Function> cb = v8::Local<v8::Function>::Cast (info.Data ());
471490 int argc = info.Length (), i;
472491 v8::Local<v8::Value> *argv = static_cast <v8::Local<v8::Value> *>(alloca (sizeof (v8::Local<v8::Value>) * argc));
@@ -511,7 +530,12 @@ static void v8js_fake_call_impl(const v8::FunctionCallbackInfo<v8::Value>& info)
511530 v8::Isolate *isolate = info.GetIsolate ();
512531 v8::Local<v8::Context> v8_context = isolate->GetEnteredOrMicrotaskContext ();
513532
514- v8::Local<v8::Object> self = info.Holder ();
533+ v8::Local<v8::Object> self;
534+ #if PHP_V8_API_VERSION >= 13000000
535+ self = info.This ();
536+ #else
537+ self = info.Holder ();
538+ #endif
515539 v8::Local<v8::Value> return_value = V8JS_NULL;
516540
517541 char *error;
@@ -859,7 +883,13 @@ v8::Local<v8::Value> v8js_named_property_callback(v8::Isolate *isolate, v8::Loca
859883
860884static V8JS_INTERCEPTED v8js_named_property_getter (v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Value> &info) /* {{{ */
861885{
862- v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), info.Holder (), property, V8JS_PROP_GETTER);
886+ v8::Local<v8::Object> self;
887+ #if PHP_V8_API_VERSION >= 13000000
888+ self = info.This ();
889+ #else
890+ self = info.Holder ();
891+ #endif
892+ v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), self, property, V8JS_PROP_GETTER);
863893
864894 if (r.IsEmpty ()) {
865895 return V8JS_INTERCEPTED_NO;
@@ -872,7 +902,13 @@ static V8JS_INTERCEPTED v8js_named_property_getter(v8::Local<v8::Name> property,
872902
873903static V8JS_INTERCEPTED v8js_named_property_setter (v8::Local<v8::Name> property, v8::Local<v8::Value> value, const V8JS_SETTER_PROPERTY_CALLBACK_INFO &info) /* {{{ */
874904{
875- v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), info.Holder (), property, V8JS_PROP_SETTER, value);
905+ v8::Local<v8::Object> self;
906+ #if PHP_V8_API_VERSION >= 13000000
907+ self = info.This ();
908+ #else
909+ self = info.Holder ();
910+ #endif
911+ v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), self, property, V8JS_PROP_SETTER, value);
876912#if PHP_V8_HAS_INTERCEPTED
877913 return r.IsEmpty () ? v8::Intercepted::kNo : v8::Intercepted::kYes ;
878914#else
@@ -883,7 +919,13 @@ static V8JS_INTERCEPTED v8js_named_property_setter(v8::Local<v8::Name> property,
883919
884920static V8JS_INTERCEPTED v8js_named_property_query (v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Integer> &info) /* {{{ */
885921{
886- v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), info.Holder (), property, V8JS_PROP_QUERY);
922+ v8::Local<v8::Object> self;
923+ #if PHP_V8_API_VERSION >= 13000000
924+ self = info.This ();
925+ #else
926+ self = info.Holder ();
927+ #endif
928+ v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), self, property, V8JS_PROP_QUERY);
887929 if (r.IsEmpty ()) {
888930 return V8JS_INTERCEPTED_NO;
889931 }
@@ -901,7 +943,13 @@ static V8JS_INTERCEPTED v8js_named_property_query(v8::Local<v8::Name> property,
901943
902944static V8JS_INTERCEPTED v8js_named_property_deleter (v8::Local<v8::Name> property, const v8::PropertyCallbackInfo<v8::Boolean> &info) /* {{{ */
903945{
904- v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), info.Holder (), property, V8JS_PROP_DELETER);
946+ v8::Local<v8::Object> self;
947+ #if PHP_V8_API_VERSION >= 13000000
948+ self = info.This ();
949+ #else
950+ self = info.Holder ();
951+ #endif
952+ v8::Local<v8::Value> r = v8js_named_property_callback (info.GetIsolate (), self, property, V8JS_PROP_DELETER);
905953 if (r.IsEmpty ()) {
906954 return V8JS_INTERCEPTED_NO;
907955 }
0 commit comments