From 3d64f085366b810eb4e1aafc94c6b154a3eeddd9 Mon Sep 17 00:00:00 2001 From: Albert Date: Fri, 20 Aug 2021 20:08:45 +0800 Subject: [PATCH] optimize redundancy code and fix some unit test --- tests/checkstring.phpt | 4 +- tests/exception_clearing.phpt | 12 +- tests/exception_propagation_2.phpt | 2 +- tests/extensions_basic.phpt | 6 +- tests/extensions_circular_dependency.phpt | 6 +- tests/extensions_error.phpt | 2 +- tests/fatal_error_ignore_non_fatals.phpt | 2 +- tests/fatal_error_v8function.phpt | 2 +- v8js_class.cc | 35 +--- v8js_convert.cc | 6 +- v8js_exceptions.cc | 23 +-- v8js_object_export.cc | 18 +- v8js_v8object_class.cc | 196 ++++------------------ 13 files changed, 65 insertions(+), 249 deletions(-) diff --git a/tests/checkstring.phpt b/tests/checkstring.phpt index 9d6ce0e..dc2ff5b 100644 --- a/tests/checkstring.phpt +++ b/tests/checkstring.phpt @@ -16,9 +16,9 @@ try { ?> ===EOF=== --EXPECTF-- -Deprecated: Function V8Js::checkString() is deprecated in %s on line %d +Deprecated: %s V8Js::checkString() is deprecated in %s on line %d bool(true) -Deprecated: Function V8Js::checkString() is deprecated in %s on line %d +Deprecated: %s V8Js::checkString() is deprecated in %s on line %d string(%d) "V8Js::checkString():1: SyntaxError: %s" ===EOF=== diff --git a/tests/exception_clearing.phpt b/tests/exception_clearing.phpt index c48a26c..3646c5a 100644 --- a/tests/exception_clearing.phpt +++ b/tests/exception_clearing.phpt @@ -23,15 +23,15 @@ var_dump($v8->getPendingException()); --EXPECTF-- Deprecated: V8Js::__construct(): Disabling exception reporting is deprecated, $report_uncaught_exceptions != true in %s%eexception_clearing.php on line 3 -Deprecated: Function V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 5 +Deprecated: %s V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 5 NULL -Deprecated: Function V8Js::clearPendingException() is deprecated in %s%eexception_clearing.php on line 7 +Deprecated: %s V8Js::clearPendingException() is deprecated in %s%eexception_clearing.php on line 7 -Deprecated: Function V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 8 +Deprecated: %s V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 8 NULL -Deprecated: Function V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 11 +Deprecated: %s V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 11 object(V8JsScriptException)#%d (13) { ["message":protected]=> string(49) "throw_0:1: ReferenceError: fooobar is not defined" @@ -83,8 +83,8 @@ object(V8JsScriptException)#%d (13) { at throw_0:1:1" } -Deprecated: Function V8Js::clearPendingException() is deprecated in %s%eexception_clearing.php on line 13 +Deprecated: %s V8Js::clearPendingException() is deprecated in %s%eexception_clearing.php on line 13 -Deprecated: Function V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 14 +Deprecated: %s V8Js::getPendingException() is deprecated in %s%eexception_clearing.php on line 14 NULL ===EOF=== diff --git a/tests/exception_propagation_2.phpt b/tests/exception_propagation_2.phpt index 718856d..c808e3a 100644 --- a/tests/exception_propagation_2.phpt +++ b/tests/exception_propagation_2.phpt @@ -40,7 +40,7 @@ try { --EXPECTF-- Deprecated: V8Js::__construct(): Disabling exception reporting is deprecated, $report_uncaught_exceptions != true in %s%eexception_propagation_2.php on line 8 -Deprecated: Function V8Js::getPendingException() is deprecated in %s%eexception_propagation_2.php on line 11 +Deprecated: %s V8Js::getPendingException() is deprecated in %s%eexception_propagation_2.php on line 11 object(V8JsScriptException)#%d (13) { ["message":protected]=> string(49) "throw_0:1: ReferenceError: fooobar is not defined" diff --git a/tests/extensions_basic.phpt b/tests/extensions_basic.phpt index 9c0db76..308c79c 100644 --- a/tests/extensions_basic.phpt +++ b/tests/extensions_basic.phpt @@ -14,11 +14,11 @@ $a = new V8Js('myobj', array(), array('a')); ?> ===EOF=== --EXPECTF-- -Deprecated: Function V8Js::registerExtension() is deprecated in %s%eextensions_basic.php on line 3 +Deprecated: %s V8Js::registerExtension() is deprecated in %s%eextensions_basic.php on line 3 -Deprecated: Function V8Js::registerExtension() is deprecated in %s%eextensions_basic.php on line 4 +Deprecated: %s V8Js::registerExtension() is deprecated in %s%eextensions_basic.php on line 4 -Deprecated: Function V8Js::getExtensions() is deprecated in %s%eextensions_basic.php on line 6 +Deprecated: %s V8Js::getExtensions() is deprecated in %s%eextensions_basic.php on line 6 array(2) { ["a"]=> array(2) { diff --git a/tests/extensions_circular_dependency.phpt b/tests/extensions_circular_dependency.phpt index 5c65c4b..f015293 100644 --- a/tests/extensions_circular_dependency.phpt +++ b/tests/extensions_circular_dependency.phpt @@ -13,11 +13,11 @@ var_dump(V8JS::getExtensions()); $a = new V8Js('myobj', array(), array('a')); ?> --EXPECTF-- -Deprecated: Function V8Js::registerExtension() is deprecated in %s%eextensions_circular_dependency.php on line 3 +Deprecated: %s V8Js::registerExtension() is deprecated in %s%eextensions_circular_dependency.php on line 3 -Deprecated: Function V8Js::registerExtension() is deprecated in %s%eextensions_circular_dependency.php on line 4 +Deprecated: %s V8Js::registerExtension() is deprecated in %s%eextensions_circular_dependency.php on line 4 -Deprecated: Function V8Js::getExtensions() is deprecated in %s%eextensions_circular_dependency.php on line 6 +Deprecated: %s V8Js::getExtensions() is deprecated in %s%eextensions_circular_dependency.php on line 6 array(2) { ["a"]=> array(2) { diff --git a/tests/extensions_error.phpt b/tests/extensions_error.phpt index b11054a..d2210ad 100644 --- a/tests/extensions_error.phpt +++ b/tests/extensions_error.phpt @@ -33,7 +33,7 @@ var_dump($v8); --EXPECTF-- -- registerExtension -- -Deprecated: Function V8Js::registerExtension() is deprecated in %s%eextensions_error.php on line 5 +Deprecated: %s V8Js::registerExtension() is deprecated in %s%eextensions_error.php on line 5 -- creating V8Js object -- Error installing extension 'handlebars'. diff --git a/tests/fatal_error_ignore_non_fatals.phpt b/tests/fatal_error_ignore_non_fatals.phpt index 729577d..1708bbd 100644 --- a/tests/fatal_error_ignore_non_fatals.phpt +++ b/tests/fatal_error_ignore_non_fatals.phpt @@ -24,7 +24,7 @@ $js->executeString($script); ?> ===EOF=== --EXPECTF-- -Notice: Undefined variable: bar in %s%efatal_error_ignore_non_fatals.php on line 6 +%s: Undefined variable%sbar in %s%efatal_error_ignore_non_fatals.php on line 6 Warning: Foo Bar! in %s%efatal_error_ignore_non_fatals.php on line 7 blar foo diff --git a/tests/fatal_error_v8function.phpt b/tests/fatal_error_v8function.phpt index 3c48f2d..9df4ceb 100644 --- a/tests/fatal_error_v8function.phpt +++ b/tests/fatal_error_v8function.phpt @@ -25,7 +25,7 @@ goodbye cruel world! Fatal error: Uncaught Error: Call to undefined method Foo::bar() in %s%efatal_error_v8function.php:6 Stack trace: -#0 [internal function]: Foo->callback() +#0 %s: Foo->callback() #1 %s%efatal_error_v8function.php(14): V8Function->V8Js::V8::Invoke() #2 {main} thrown in %s%efatal_error_v8function.php on line 6 diff --git a/v8js_class.cc b/v8js_class.cc index a9ba1f3..becac9d 100644 --- a/v8js_class.cc +++ b/v8js_class.cc @@ -506,11 +506,7 @@ static PHP_METHOD(V8Js, __construct) V8JS_GLOBAL(isolate)->DefineOwnProperty(context, object_name_js, php_obj, v8::ReadOnly); /* Export public property values */ - #if (PHP_MAJOR_VERSION < 8) - HashTable *properties = zend_std_get_properties(getThis()); - #else - HashTable *properties = zend_std_get_properties(Z_OBJ_P(getThis())); - #endif + HashTable *properties = zend_std_get_properties(SINCE80(Z_OBJ_P(getThis()), getThis())); zval *value; zend_string *member; @@ -1339,15 +1335,16 @@ static SINCE74(zval*, void) v8js_write_property(SINCE80(zend_object, zval) *_obj } /* Write value to PHP object */ - SINCE74(return,) std_object_handlers.write_property(object, member, value, NULL); + SINCE74(return,) std_object_handlers.write_property(SINCE80(object, _object), SINCE80(member, _member), value, NULL); } /* }}} */ -#if PHP_VERSION_ID >= 80000 -static void v8js_unset_property(zend_object *object, zend_string *member, void **cache_slot) /* {{{ */ +static void v8js_unset_property(SINCE80(zend_object, zval) *_object, SINCE80(zend_string, zval) *_member, void **cache_slot) /* {{{ */ { - V8JS_BEGIN_CTX_OBJ(c, object) + zend_object *object = SINCE80(_object, Z_OBJ_P(_object)); + zend_string *member = SINCE80(_member, Z_STR_P(_member)); + V8JS_BEGIN_CTX_OBJ(c, object); /* Global PHP JS object */ v8::Local object_name_js = v8::Local::New(isolate, c->object_name); v8::Local jsobj = V8JS_GLOBAL(isolate)->Get(v8_context, object_name_js).ToLocalChecked()->ToObject(v8_context).ToLocalChecked(); @@ -1360,29 +1357,11 @@ static void v8js_unset_property(zend_object *object, zend_string *member, void * /* Delete value from PHP JS object */ v8::Local key = V8JS_SYML(ZSTR_VAL(member), static_cast(ZSTR_LEN(member))); -#else -static void v8js_unset_property(zval *object, zval *member, void **cache_slot) /* {{{ */ -{ - V8JS_BEGIN_CTX(c, object) - - /* Global PHP JS object */ - v8::Local object_name_js = v8::Local::New(isolate, c->object_name); - v8::Local jsobj = V8JS_GLOBAL(isolate)->Get(v8_context, object_name_js).ToLocalChecked()->ToObject(v8_context).ToLocalChecked(); - - if (Z_STRLEN_P(member) > std::numeric_limits::max()) { - zend_throw_exception(php_ce_v8js_exception, - "Property name exceeds maximum supported length", 0); - return; - } - - /* Delete value from PHP JS object */ - v8::Local key = V8JS_SYML(Z_STRVAL_P(member), static_cast(Z_STRLEN_P(member))); -#endif jsobj->Delete(v8_context, key); /* Unset from PHP object */ - std_object_handlers.unset_property(object, member, NULL); + std_object_handlers.unset_property(SINCE80(object, _object), SINCE80(member, _member), NULL); } /* }}} */ diff --git a/v8js_convert.cc b/v8js_convert.cc index b70d20f..a8ef6dc 100644 --- a/v8js_convert.cc +++ b/v8js_convert.cc @@ -148,11 +148,7 @@ v8::Local zval_to_v8js(zval *value, v8::Isolate *isolate) /* {{{ */ ce = php_date_get_date_ce(); if (instanceof_function(Z_OBJCE_P(value), ce)) { zval dtval; - #if PHP_VERSION_ID >= 80000 - zend_call_method_with_0_params(Z_OBJ_P(value), NULL, NULL, "getTimestamp", &dtval); - #else - zend_call_method_with_0_params(value, NULL, NULL, "getTimestamp", &dtval); - #endif + zend_call_method_with_0_params(SINCE80(Z_OBJ_P(value), value), NULL, NULL, "getTimestamp", &dtval); v8::Date::New(isolate->GetEnteredOrMicrotaskContext(), ((double)Z_LVAL(dtval) * 1000.0)).ToLocal(&jsValue); zval_dtor(&dtval); } else diff --git a/v8js_exceptions.cc b/v8js_exceptions.cc index 89903d6..fa1d08f 100644 --- a/v8js_exceptions.cc +++ b/v8js_exceptions.cc @@ -50,13 +50,8 @@ void v8js_create_script_exception(zval *return_value, v8::Isolate *isolate, v8:: object_init_ex(return_value, php_ce_v8js_script_exception); -#if PHP_VERSION_ID >= 80000 #define PHPV8_EXPROP(type, name, value) \ - zend_update_property##type(php_ce_v8js_script_exception, Z_OBJ_P(return_value), #name, sizeof(#name) - 1, value); -#else -#define PHPV8_EXPROP(type, name, value) \ - zend_update_property##type(php_ce_v8js_script_exception, return_value, #name, sizeof(#name) - 1, value); -#endif + zend_update_property##type(php_ce_v8js_script_exception, SINCE80(Z_OBJ_P(return_value), return_value), #name, sizeof(#name) - 1, value); if (tc_message.IsEmpty()) { @@ -134,7 +129,6 @@ void v8js_throw_script_exception(v8::Isolate *isolate, v8::TryCatch *try_catch) } } /* }}} */ -#if PHP_VERSION_ID >= 80000 #define V8JS_EXCEPTION_METHOD(property) \ static PHP_METHOD(V8JsScriptException, get##property) \ { \ @@ -143,22 +137,9 @@ void v8js_throw_script_exception(v8::Isolate *isolate, v8::TryCatch *try_catch) if (zend_parse_parameters_none() == FAILURE) { \ return; \ } \ - value = zend_read_property(php_ce_v8js_script_exception, Z_OBJ_P(getThis()), #property, sizeof(#property) - 1, 0, &rv); \ + value = zend_read_property(php_ce_v8js_script_exception, SINCE80(Z_OBJ_P(getThis()), getThis()), #property, sizeof(#property) - 1, 0, &rv); \ RETURN_ZVAL(value, 1, 0); \ } -#else -#define V8JS_EXCEPTION_METHOD(property) \ - static PHP_METHOD(V8JsScriptException, get##property) \ - { \ - zval *value, rv; \ - \ - if (zend_parse_parameters_none() == FAILURE) { \ - return; \ - } \ - value = zend_read_property(php_ce_v8js_script_exception, getThis(), #property, sizeof(#property) - 1, 0, &rv); \ - RETURN_ZVAL(value, 1, 0); \ - } -#endif /* {{{ proto string V8JsEScriptxception::getJsFileName() diff --git a/v8js_object_export.cc b/v8js_object_export.cc index 59263aa..6b3b59b 100644 --- a/v8js_object_export.cc +++ b/v8js_object_export.cc @@ -643,11 +643,11 @@ v8::Local v8js_named_property_callback(v8::Local property_n zval php_value; zend_object *object = reinterpret_cast(self->GetAlignedPointerFromInternalField(1)); - #if PHP_VERSION_ID >= 80000 - zend_object &zobject = *object; - #else + #if PHP_VERSION_ID < 80000 zval zobject; ZVAL_OBJ(&zobject, object); + #else + zend_object &zobject = *object; #endif v8js_function_tmpl_t *tmpl_ptr = reinterpret_cast(self->GetAlignedPointerFromInternalField(0)); @@ -803,11 +803,7 @@ v8::Local v8js_named_property_callback(v8::Local property_n const zend_object_handlers *h = object->handlers; if (callback_type == V8JS_PROP_QUERY) { - #if PHP_VERSION_ID >= 80000 - if (h->has_property(&zobject, Z_STR_P(&zname), 0, NULL)) { - #else - if (h->has_property(&zobject, &zname, 0, NULL)) { - #endif + if (h->has_property(&zobject, SINCE80(Z_STR_P(&zname), &zname), 0, NULL)) { ret_value = V8JS_UINT(v8::None); } else { ret_value = v8::Local(); // empty handle @@ -818,11 +814,7 @@ v8::Local v8js_named_property_callback(v8::Local property_n if(!property_info || (property_info != ZEND_WRONG_PROPERTY_INFO && property_info->flags & ZEND_ACC_PUBLIC)) { - #if PHP_VERSION_ID >= 80000 - h->unset_property(&zobject, Z_STR_P(&zname), NULL); - #else - h->unset_property(&zobject, &zname, NULL); - #endif + h->unset_property(&zobject, SINCE80(Z_STR_P(&zname), &zname), NULL); ret_value = V8JS_TRUE(); } else { diff --git a/v8js_v8object_class.cc b/v8js_v8object_class.cc index 2fce6ba..a4a3097 100644 --- a/v8js_v8object_class.cc +++ b/v8js_v8object_class.cc @@ -45,9 +45,15 @@ static zend_object_handlers v8js_v8generator_handlers; #define V8JS_V8_INVOKE_FUNC_NAME "V8Js::V8::Invoke" /* V8 Object handlers */ -#if PHP_VERSION_ID >= 80000 -static int v8js_v8object_has_property(zend_object *object, zend_string *member, int has_set_exists, void **cache_slot) /* {{{ */ +static int v8js_v8object_has_property(SINCE80(zend_object, zval) *_object, SINCE80(zend_string, zval) *_member, int has_set_exists, void **cache_slot) /* {{{ */ { + zend_object *object = SINCE80(_object, Z_OBJ_P(_object)); + zend_string *member = SINCE80(_member, Z_STR_P(_member)); + /* param has_set_exists: + * 0 (has) whether property exists and is not NULL - isset() + * 1 (set) whether property exists and is true-ish - empty() + * 2 (exists) whether property exists - property_exists() + */ int retval = false; v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ(object); @@ -75,42 +81,6 @@ static int v8js_v8object_has_property(zend_object *object, zend_string *member, } v8::Local jsKey = V8JS_ZSYM(member); -#else -static int v8js_v8object_has_property(zval *object, zval *member, int has_set_exists, void **cache_slot) /* {{{ */ -{ - /* param has_set_exists: - * 0 (has) whether property exists and is not NULL - isset() - * 1 (set) whether property exists and is true-ish - empty() - * 2 (exists) whether property exists - property_exists() - */ - int retval = false; - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ_P(object); - - if (!obj->ctx) - { - zend_throw_exception(php_ce_v8js_exception, - "Can't access V8Object after V8Js instance is destroyed!", 0); - return false; - } - - V8JS_CTX_PROLOGUE_EX(obj->ctx, false); - v8::Local v8obj = v8::Local::New(isolate, obj->v8obj); - v8::Local jsObj; - - if (Z_TYPE_P(member) != IS_STRING || !v8obj->IsObject() || !v8obj->ToObject(v8_context).ToLocal(&jsObj)) - { - return false; - } - - if (Z_STRLEN_P(member) > std::numeric_limits::max()) - { - zend_throw_exception(php_ce_v8js_exception, - "Member name length exceeds maximum supported length", 0); - return false; - } - - v8::Local jsKey = V8JS_ZSYM(Z_STR_P(member)); -#endif /* Skip any prototype properties */ if (!jsObj->HasRealNamedProperty(v8_context, jsKey).FromMaybe(false) && !jsObj->HasRealNamedCallbackProperty(v8_context, jsKey).FromMaybe(false)) { @@ -158,9 +128,11 @@ static int v8js_v8object_has_property(zval *object, zval *member, int has_set_ex } /* }}} */ -#if PHP_VERSION_ID >= 80000 -static zval *v8js_v8object_read_property(zend_object *object, zend_string *member, int type, void **cache_slot, zval *rv) /* {{{ */ +static zval *v8js_v8object_read_property(SINCE80(zend_object, zval) *_object, SINCE80(zend_string, zval) *_member, int type, void **cache_slot, zval *rv) /* {{{ */ { + zend_object *object = SINCE80(_object, Z_OBJ_P(_object)); + zend_string *member = SINCE80(_member, Z_STR_P(_member)); + zval *retval = rv; v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ(object); @@ -185,34 +157,7 @@ static zval *v8js_v8object_read_property(zend_object *object, zend_string *membe v8::Local jsKey = V8JS_ZSYM(member); v8::Local jsObj = v8obj->ToObject(v8_context).ToLocalChecked(); -#else -static zval *v8js_v8object_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv) /* {{{ */ -{ - zval *retval = rv; - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ_P(object); - if (!obj->ctx) - { - zend_throw_exception(php_ce_v8js_exception, - "Can't access V8Object after V8Js instance is destroyed!", 0); - return SINCE74(object, retval); - } - - V8JS_CTX_PROLOGUE_EX(obj->ctx, retval); - v8::Local v8obj = v8::Local::New(isolate, obj->v8obj); - - if (Z_TYPE_P(member) == IS_STRING && v8obj->IsObject()) - { - if (Z_STRLEN_P(member) > std::numeric_limits::max()) - { - zend_throw_exception(php_ce_v8js_exception, - "Member name length exceeds maximum supported length", 0); - return retval; - } - - v8::Local jsKey = V8JS_ZSYM(Z_STR_P(member)); - v8::Local jsObj = v8obj->ToObject(v8_context).ToLocalChecked(); -#endif /* Skip any prototype properties */ if (jsObj->HasRealNamedProperty(v8_context, jsKey).FromMaybe(false) || jsObj->HasRealNamedCallbackProperty(v8_context, jsKey).FromMaybe(false)) { @@ -229,19 +174,17 @@ static zval *v8js_v8object_read_property(zval *object, zval *member, int type, v } /* }}} */ -#if PHP_VERSION_ID >= 80000 -static zval *v8js_v8object_get_property_ptr_ptr(zend_object *object, zend_string *member, int type, void **cache_slot) /* {{{ */ -#else -static zval *v8js_v8object_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot) /* {{{ */ -#endif +static zval *v8js_v8object_get_property_ptr_ptr(SINCE80(zend_object, zval) *object, SINCE80(zend_string, zval) *member, int type, void **cache_slot) /* {{{ */ { return NULL; } /* }}} */ -#if PHP_VERSION_ID >= 80000 -static SINCE74(zval *, void) v8js_v8object_write_property(zend_object *object, zend_string *member, zval *value, void **cache_slot) /* {{{ */ +static SINCE74(zval *, void) v8js_v8object_write_property(SINCE80(zend_object, zval) *_object, SINCE80(zend_string, zval) *_member, zval *value, void **cache_slot) /* {{{ */ { + zend_object *object = SINCE80(_object, Z_OBJ_P(_object)); + zend_string *member = SINCE80(_member, Z_STR_P(_member)); + v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ(object); if (!obj->ctx) @@ -266,41 +209,16 @@ static SINCE74(zval *, void) v8js_v8object_write_property(zend_object *object, z { v8obj->CreateDataProperty(v8_context, V8JS_ZSYM(member), zval_to_v8js(value, isolate)); } -#else -static SINCE74(zval *, void) v8js_v8object_write_property(zval *object, zval *member, zval *value, void **cache_slot) /* {{{ */ -{ - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ_P(object); - if (!obj->ctx) - { - zend_throw_exception(php_ce_v8js_exception, - "Can't access V8Object after V8Js instance is destroyed!", 0); - return SINCE74(value, ); - } - - V8JS_CTX_PROLOGUE_EX(obj->ctx, SINCE74(value, )); - v8::Local v8objHandle = v8::Local::New(isolate, obj->v8obj); - - if (Z_STRLEN_P(member) > std::numeric_limits::max()) - { - zend_throw_exception(php_ce_v8js_exception, - "Member name length exceeds maximum supported length", 0); - return SINCE74(value, ); - } - - v8::Local v8obj; - if (v8objHandle->IsObject() && v8objHandle->ToObject(v8_context).ToLocal(&v8obj)) - { - v8obj->CreateDataProperty(v8_context, V8JS_ZSYM(Z_STR_P(member)), zval_to_v8js(value, isolate)); - } -#endif return SINCE74(value, ); } /* }}} */ -#if PHP_VERSION_ID >= 80000 -static void v8js_v8object_unset_property(zend_object *object, zend_string *member, void **cache_slot) /* {{{ */ +static void v8js_v8object_unset_property(SINCE80(zend_object, zval) *_object, SINCE80(zend_string, zval) *_member, void **cache_slot) /* {{{ */ { + zend_object *object = SINCE80(_object, Z_OBJ_P(_object)); + zend_string *member = SINCE80(_member, Z_STR_P(_member)); + v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ(object); if (!obj->ctx) @@ -326,46 +244,12 @@ static void v8js_v8object_unset_property(zend_object *object, zend_string *membe v8obj->Delete(v8_context, V8JS_ZSYM(member)); } } -#else -static void v8js_v8object_unset_property(zval *object, zval *member, void **cache_slot) /* {{{ */ -{ - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ_P(object); - - if (!obj->ctx) - { - zend_throw_exception(php_ce_v8js_exception, - "Can't access V8Object after V8Js instance is destroyed!", 0); - return; - } - - V8JS_CTX_PROLOGUE(obj->ctx); - v8::Local v8objHandle = v8::Local::New(isolate, obj->v8obj); - - if (Z_STRLEN_P(member) > std::numeric_limits::max()) - { - zend_throw_exception(php_ce_v8js_exception, - "Member name length exceeds maximum supported length", 0); - return; - } - - v8::Local v8obj; - if (v8objHandle->IsObject() && v8objHandle->ToObject(v8_context).ToLocal(&v8obj)) - { - v8obj->Delete(v8_context, V8JS_ZSYM(Z_STR_P(member))); - } -} -#endif /* }}} */ -#if PHP_VERSION_ID >= 80000 -static HashTable *v8js_v8object_get_properties(zend_object *object) /* {{{ */ +static HashTable *v8js_v8object_get_properties(SINCE80(zend_object, zval) *object) /* {{{ */ { - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ(object); -#else -static HashTable *v8js_v8object_get_properties(zval *object) /* {{{ */ -{ - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ_P(object); -#endif + v8js_v8object *obj = SINCE80(Z_V8JS_V8OBJECT_OBJ, Z_V8JS_V8OBJECT_OBJ_P)(object); + if (obj->properties == NULL) { #if PHP_VERSION_ID < 70300 @@ -411,11 +295,7 @@ static HashTable *v8js_v8object_get_properties(zval *object) /* {{{ */ } /* }}} */ -#if PHP_VERSION_ID >= 80000 -static HashTable *v8js_v8object_get_debug_info(zend_object *object, int *is_temp) /* {{{ */ -#else -static HashTable *v8js_v8object_get_debug_info(zval *object, int *is_temp) /* {{{ */ -#endif +static HashTable *v8js_v8object_get_debug_info(SINCE80(zend_object, zval) *object, int *is_temp) /* {{{ */ { *is_temp = 0; return v8js_v8object_get_properties(object); @@ -544,11 +424,7 @@ static ZEND_FUNCTION(zend_v8object_func) static zend_function *v8js_v8object_get_method(zend_object **object_ptr, zend_string *method, const zval *key) /* {{{ */ { v8js_v8object *obj = v8js_v8object_fetch_object(*object_ptr); -#if PHP_VERSION_ID < 80000 - zend_function *f; -#else - zend_internal_function *f; -#endif + SINCE80(zend_internal_function, zend_function) *f; if (!obj->ctx) { @@ -708,15 +584,13 @@ static int v8js_v8object_call_method(zend_string *method, zend_object *object, I #if PHP_VERSION_ID >= 80000 static int v8js_v8object_get_closure(zend_object *object, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **zobj_ptr, bool call) /* {{{ */ -{ - zend_internal_function *invoke; - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ(object); #else static int v8js_v8object_get_closure(zval *object, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **zobj_ptr) /* {{{ */ -{ - zend_function *invoke; - v8js_v8object *obj = Z_V8JS_V8OBJECT_OBJ_P(object); #endif +{ + SINCE80(zend_internal_function, zend_function) *invoke; + v8js_v8object *obj = SINCE80(Z_V8JS_V8OBJECT_OBJ, Z_V8JS_V8OBJECT_OBJ_P)(object); + if (!obj->ctx) { zend_throw_exception(php_ce_v8js_exception, @@ -747,11 +621,7 @@ static int v8js_v8object_get_closure(zval *object, zend_class_entry **ce_ptr, ze if (zobj_ptr) { -#if PHP_VERSION_ID >= 80000 - *zobj_ptr = object; -#else - *zobj_ptr = Z_OBJ_P(object); -#endif + *zobj_ptr = SINCE80(object, Z_OBJ_P(object)); } *ce_ptr = NULL; @@ -1176,9 +1046,7 @@ PHP_MINIT_FUNCTION(v8js_v8object_class) /* {{{ */ v8js_v8object_handlers.unset_property = v8js_v8object_unset_property; v8js_v8object_handlers.get_properties = v8js_v8object_get_properties; v8js_v8object_handlers.get_method = v8js_v8object_get_method; -#if PHP_VERSION_ID < 80000 - v8js_v8object_handlers.call_method = v8js_v8object_call_method; -#endif + SINCE80(, v8js_v8object_handlers.call_method = v8js_v8object_call_method); v8js_v8object_handlers.get_debug_info = v8js_v8object_get_debug_info; v8js_v8object_handlers.get_closure = v8js_v8object_get_closure; v8js_v8object_handlers.offset = XtOffsetOf(struct v8js_v8object, std);