--- phpc/phpc.h 2016-06-26 16:59:54.000000000 +0200 +++ /work/GIT/pecl-and-ext/phpc/phpc.h 2020-08-25 10:43:46.675520654 +0200 @@ -50,33 +50,13 @@ #define PHPC_OBJ_INIT_HANDLERS(_name) \ memcpy(&PHPC_OBJ_GET_HANDLER_VAR_NAME(_name), \ zend_get_std_object_handlers(), sizeof(zend_object_handlers)) -#define PHPC_CLASS_SET_HANDLER_CREATE(_class_entry, _name) \ - _class_entry.create_object = PHPC_OBJ_GET_HANDLER_FCE(_name, create) -#define PHPC_OBJ_SET_HANDLER_CLONE(_name) \ - PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).clone_obj = PHPC_OBJ_GET_HANDLER_FCE(_name, clone) -#define PHPC_OBJ_SET_HANDLER_COMPARE(_name) \ - PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).compare_objects = PHPC_OBJ_GET_HANDLER_FCE(_name, compare) -#define PHPC_OBJ_HAS_HANDLER_GET_GC (PHP_VERSION_ID > 50399) -#if PHPC_OBJ_HAS_HANDLER_GET_GC -#define PHPC_OBJ_SET_HANDLER_GET_GC(_name) \ - PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).get_gc = PHPC_OBJ_GET_HANDLER_FCE(_name, get_gc) -#else -#define PHPC_OBJ_SET_HANDLER_GET_GC(_name) PHPC_NOOP -#endif -#define PHPC_OBJ_HAS_HANDLER_GET_DEBUG_INFO (PHP_VERSION_ID > 50299) -#if PHPC_OBJ_HAS_HANDLER_GET_DEBUG_INFO -#define PHPC_OBJ_SET_HANDLER_GET_DEBUG_INFO(_name) \ - PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).get_debug_info = PHPC_OBJ_GET_HANDLER_FCE(_name, get_debug_info) -#else -#define PHPC_OBJ_SET_HANDLER_GET_DEBUG_INFO(_name) PHPC_NOOP + +/* ZEND_ACC_CTOR and ZEND_ACC_DTOR is removed in 7.4 */ +#ifndef ZEND_ACC_CTOR +#define ZEND_ACC_CTOR 0 #endif -/* there is such handler in 5.2 but we would have to re-implement zend_std_get_properties */ -#define PHPC_OBJ_HAS_HANDLER_GET_PROPERTIES (PHP_VERSION_ID > 50299) -#if PHPC_OBJ_HAS_HANDLER_GET_PROPERTIES -#define PHPC_OBJ_SET_HANDLER_GET_PROPERTIES(_name) \ - PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).get_properties = PHPC_OBJ_GET_HANDLER_FCE(_name, get_properties) -#else -#define PHPC_OBJ_SET_HANDLER_GET_PROPERTIES(_name) PHPC_NOOP +#ifndef ZEND_ACC_DTOR +#define ZEND_ACC_DTOR 0 #endif #if PHP_VERSION_ID < 50299 @@ -85,25 +65,58 @@ #define phpc_function_entry const zend_function_entry #endif +#if PHP_MAJOR_VERSION < 8 +#define PHPC_OBJ_FOR_PROP(_obj) (_obj) +#else +#define PHPC_OBJ_FOR_PROP(_obj) Z_OBJ_P(_obj) +/* ZTS */ +#define TSRMLS_D void +#define TSRMLS_DC +#define TSRMLS_C +#define TSRMLS_CC +#define TSRMLS_FETCH() +#endif -/* initializing properties in obejct (object_properties_init was added in PHP 5.4) */ #if PHP_VERSION_ID < 50399 -#define PHPC_OBJ_PROPERTIES_INIT(zo, class_type) \ - { \ - zval *tmp; \ - zend_hash_copy((*(zo)).properties, \ - &(class_type)->default_properties, \ +/* initializing properties in obejct (object_properties_init was added in PHP 5.4) */ +#define PHPC_OBJ_PROPERTIES_INIT(_zo, _class_type) \ + do { \ + zval *_phpc_tmp; \ + zend_hash_copy((*(_zo)).properties, \ + &(_class_type)->default_properties, \ (copy_ctor_func_t) zval_add_ref, \ - (void *) &tmp, \ + (void *) &_phpc_tmp, \ sizeof(zval *)); \ - } + } while(0) + +/* write property */ +#define PHPC_OBJ_STD_WRITE_PROPERTY(_obj, _member, _value) \ + Z_OBJ_HT_P(_obj)->write_property(_obj, _member, _value TSRMLS_CC) #else #define PHPC_OBJ_PROPERTIES_INIT object_properties_init +#define PHPC_OBJ_STD_WRITE_PROPERTY(_obj, _member, _value) \ + zend_std_write_property(_obj, _member, _value, NULL TSRMLS_CC) #endif /* common fcall macros */ #define PHPC_FCALL_PARAMS_NAME(_pname) _phpc_fcall_params__ ## _pname +#if PHP_MAJOR_VERSION == 8 +#define PHPC_FCALL_FCI_INIT(_fci, callback, count, no_separ) \ + do { \ + (_fci).params = PHPC_FCALL_PARAMS_NAME(callback); \ + (_fci).param_count = (count); \ + } while (0) +#else +#define PHPC_FCALL_FCI_INIT(_fci, callback, count, no_separ) \ + do { \ + (_fci).params = PHPC_FCALL_PARAMS_NAME(callback); \ + (_fci).param_count = (count); \ + (_fci).no_separation = (no_separ); \ + } while (0) +#endif + + /* integer conversions */ #define PHPC_CONVERT_NUMBER(_pn, _n, _exc_over, _exc_under, _type_from, _type_to, _max, _min) \ if (_pn > (_type_from) _max) { \ @@ -195,6 +208,12 @@ #define PHPC_STR_FROM_PTR_VAL(_str, _strpv) \ PHPC_STR_VAL(_str) = *PHPC_STR_VAL(_strpv); \ PHPC_STR_LEN(_str) = strlen(*PHPC_STR_VAL(_strpv)) +#define PHPC_STR_FROM_ZVAL(_str, _zv) \ + PHPC_STR_VAL(_str) = Z_STRVAL(_zv); \ + PHPC_STR_LEN(_str) = Z_STRLEN(_zv) +#define PHPC_STR_FROM_PZVAL(_str, _pzv) \ + PHPC_STR_VAL(_str) = Z_STRVAL_P(_pzv); \ + PHPC_STR_LEN(_str) = Z_STRLEN_P(_pzv) #define PHPC_STR_RETURN(_name) \ RETURN_STRINGL(PHPC_STR_VAL(_name), PHPC_STR_LEN(_name), 0) @@ -347,8 +366,8 @@ PHPC_OBJ_STRUCT_DECLARE(_name, _obj) = PHPC_OBJ_FROM_ZVAL(_name, _phpc_obj ## _id) /* handler setters */ -#define PHPC_OBJ_SET_HANDLER_OFFSET(_name) PHPC_NOOP -#define PHPC_OBJ_SET_HANDLER_FREE(_name) PHPC_NOOP +#define PHPC_OBJ_SET_SPECIFIC_HANDLER_OFFSET(_handlers, _name) PHPC_NOOP +#define PHPC_OBJ_SET_SPECIFIC_HANDLER_FREE(_handlers, _name) PHPC_NOOP /* read propery */ #define PHPC_READ_PROPERTY_RV_NAME @@ -359,6 +378,7 @@ /* HASH */ /* apply count */ +#define PHPC_HASH_HAS_APPLY_COUNT(_ht) (_ht->nApplyCount > 0) #define PHPC_HASH_GET_APPLY_COUNT(_ht) _ht->nApplyCount #define PHPC_HASH_INC_APPLY_COUNT(_ht) _ht->nApplyCount++ #define PHPC_HASH_DEC_APPLY_COUNT(_ht) _ht->nApplyCount-- @@ -383,6 +403,12 @@ #define PHPC_HASH_CSTR_ADD(_ht, _cstr_value, _pzv) \ zend_hash_add(_ht, _cstr_value, strlen(_cstr_value) + 1, &_pzv, sizeof(_pzv), NULL) +/* next insert */ +#define PHPC_HASH_NEXT_INDEX_INSERT_PTR(_ht, _ptr, _ptr_size) \ + zend_hash_next_index_insert(_ht, _ptr, _ptr_size, NULL) +#define PHPC_HASH_NEXT_INDEX_INSERT(_ht, _pzv) \ + zend_hash_next_index_insert(_ht, _pzv, sizeof(_pzv), NULL) + /* update ptr */ #define PHPC_HASH_INDEX_UPDATE_PTR(_ht, _idx, _ptr, _ptr_size) \ zend_hash_index_update(_ht, _idx, _ptr, _ptr_size, NULL) @@ -459,6 +485,13 @@ #define PHPC_HASH_COPY_EX(_target, _source, _copy_ctr) \ zend_hash_copy(_target, _source, NULL, NULL, sizeof(zval *)) +/* key result constant has been renamed in 5.4 */ +#if PHP_VERSION_ID < 50399 +#define _PHPC_HASH_KEY_NON_EXISTENT HASH_KEY_NON_EXISTANT +#else +#define _PHPC_HASH_KEY_NON_EXISTENT HASH_KEY_NON_EXISTENT +#endif + /* iteration for each element */ #define PHPC_HASH_FOREACH_KEY(_ht, _h, _key) do { \ HashPosition _pos; \ @@ -466,7 +499,7 @@ int _key_type; \ for (zend_hash_internal_pointer_reset_ex((_ht), &_pos); \ (_key_type = zend_hash_get_current_key_ex( \ - (_ht), &PHPC_STR_VAL(_key), &_str_length, &_h, 0, &_pos)) != HASH_KEY_NON_EXISTENT; \ + (_ht), &PHPC_STR_VAL(_key), &_str_length, &_h, 0, &_pos)) != _PHPC_HASH_KEY_NON_EXISTENT; \ zend_hash_move_forward_ex((_ht), &_pos) ) { \ if (_key_type == HASH_KEY_IS_STRING) { \ PHPC_STR_LEN(_key) = (int) _str_length - 1; \ @@ -529,7 +562,15 @@ } while(0) +/* SYMTABLE */ + +/* update*/ +#define PHPC_SYMTABLE_UPDATE(_ht, _str, _pzv) \ + zend_symtable_update(_ht, PHPC_STR_VAL(_str), PHPC_STR_LEN(_str) + 1, &_pzv, sizeof(_pzv), NULL) + + /* ARRAY */ + #define PHPC_ARRAY_ADD_ASSOC_NULL_EX(_arr, _key, _key_len) \ add_assoc_null_ex(_arr, _key, (_key_len) + 1) #define PHPC_ARRAY_ADD_ASSOC_BOOL_EX(_arr, _key, _key_len, _b) \ @@ -642,6 +683,9 @@ #define PHPC_OBJDEBUG Z_OBJDEBUG_P #define PHPC_OBJDEBUG_P Z_OBJDEBUG_PP +#define PHPC_REFCOUNTED(_zv) 1 +#define PHPC_REFCOUNTED_P(_pzv) 1 + #define PHPC_PZVAL_CAST_TO_PVAL(_pzv) &_pzv #define PHPC_VAL_CAST_TO_ZVAL(_pv) *(_pv) @@ -659,19 +703,39 @@ #define PHPC_VAL_COPY(_pv, _zv) ZVAL_ZVAL(_pv, _zv, 1, 0) #define PHPC_VAL_ASSIGN(_pv, _zv) _pv = _zv +#define PHPC_PZVAL_MAKE MAKE_STD_ZVAL +#define PHPC_PZVAL_FREE FREE_ZVAL +#define PHPC_PZVAL_SET(_pv, _zv) ZVAL_ZVAL(_pv, _zv, 0, 0) #define PHPC_PVAL_DEREF(_pv) PHPC_NOOP #define PHPC_PZVAL_DEREF(_pv) PHPC_NOOP -#define PHPC_VAL_STR(_pv, _str) \ +#define PHPC_PZVAL_COPY_INIT INIT_PZVAL_COPY +#define PHPC_PZVAL_COPY(_pzv_dst, _pzv_src) \ + *_pzv_dst = *_pzv_src + +#define PHPC_VAL_NEW_STR(_pv, _str) \ ZVAL_STRINGL(_pv, PHPC_STR_VAL(_str), PHPC_STR_LEN(_str), 0) +#define PHPC_VAL_STR PHPC_VAL_NEW_STR #define PHPC_VAL_CSTR(_pv, _cstr) \ ZVAL_STRING(_pv, _cstr, 1) #define PHPC_VAL_CSTRL(_pv, _cstr, _cstr_len) \ ZVAL_STRINGL(_pv, _cstr, _cstr_len, 1) -#define PHPC_PZVAL_STR PHPC_VAL_STR -#define PHPC_PZVAL_CSTR PHPC_VAL_CSTR -#define PHPC_PZVAL_CSTRL PHPC_VAL_CSTRL +#define PHPC_PZVAL_NEW_STR PHPC_VAL_NEW_STR +#define PHPC_PZVAL_STR PHPC_VAL_STR +#define PHPC_PZVAL_CSTR PHPC_VAL_CSTR +#define PHPC_PZVAL_CSTRL PHPC_VAL_CSTRL + +#define PHPC_ZVAL_COPY(_zv_dst, _zv_src) \ + _zv_dst = _zv_src + +#define PHPC_ZVAL_NEW_STR(_zv, _str) \ + PHPC_VAL_STR(&_zv, _str) +#define PHPC_ZVAL_STR PHPC_ZVAL_NEW_STR +#define PHPC_ZVAL_CSTR(_zv, _cstr) \ + PHPC_VAL_CSTR(&_zv, _cstr) +#define PHPC_ZVAL_CSTRL(_zv, _cstr, _cstr_len) \ + PHPC_VAL_CSTRL(&_zv, _cstr, _cstr_len) #define PHPC_ZVAL_IS_TRUE(_zv) \ (Z_TYPE(_zv) == IS_BOOL && Z_BVAL(_zv)) @@ -815,6 +879,8 @@ #define PHPC_STR_FROM_PTR_STR(_str, _strp) _str = *_strp #define PHPC_STR_FROM_PTR_VAL(_str, _strpv) _str = *_strpv #define PHPC_STR_RETURN RETURN_STR +#define PHPC_STR_FROM_ZVAL(_str, _zv) _str = Z_STR(_zv) +#define PHPC_STR_FROM_PZVAL(_str, _pzv) _str = Z_STR_P(_pzv) /* wrapper macros */ #define PHPC_STR_INIT(_name, _cstr, _len) \ _name = zend_string_init(_cstr, _len, 0) @@ -948,26 +1014,34 @@ PHPC_OBJ_STRUCT_DECLARE(_name, _obj) = PHPC_OBJ_FROM_ZVAL(_name, _phpc_obj ## _id) /* handler setters */ -#define PHPC_OBJ_SET_HANDLER_OFFSET(_name) \ - PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).offset = XtOffsetOf(PHPC_OBJ_STRUCT_NAME(_name), std) -#define PHPC_OBJ_SET_HANDLER_FREE(_name) \ - PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).free_obj = PHPC_OBJ_GET_HANDLER_FCE(_name, free) +#define PHPC_OBJ_SET_SPECIFIC_HANDLER_OFFSET(_handlers, _name) \ + (_handlers).offset = XtOffsetOf(PHPC_OBJ_STRUCT_NAME(_name), std) +#define PHPC_OBJ_SET_SPECIFIC_HANDLER_FREE(_handlers, _name) \ + (_handlers).free_obj = PHPC_OBJ_GET_HANDLER_FCE(_name, free) /* read propery */ #define PHPC_READ_PROPERTY_RV_NAME _phpc_read_property_rv #define PHPC_READ_PROPERTY_RV_DECLARE zval PHPC_READ_PROPERTY_RV_NAME #define PHPC_READ_PROPERTY(_scope, _object, _name, _name_len, _silent) \ - zend_read_property(_scope, _object, _name, _name_len, _silent, &PHPC_READ_PROPERTY_RV_NAME) + zend_read_property(_scope, PHPC_OBJ_FOR_PROP(_object), _name, _name_len, _silent, &PHPC_READ_PROPERTY_RV_NAME) /* HASH */ -/* apply count */ -#define PHPC_HASH_GET_APPLY_COUNT ZEND_HASH_GET_APPLY_COUNT -#define PHPC_HASH_INC_APPLY_COUNT ZEND_HASH_INC_APPLY_COUNT -#define PHPC_HASH_DEC_APPLY_COUNT ZEND_HASH_DEC_APPLY_COUNT -#define PHPC_HASH_APPLY_PROTECTION ZEND_HASH_APPLY_PROTECTION - +/* recursion protection */ +#if PHP_VERSION_ID < 70299 +#define PHPC_HASH_HAS_APPLY_COUNT(_tht) (ZEND_HASH_GET_APPLY_COUNT(_tht) > 0) +#define PHPC_HASH_GET_APPLY_COUNT ZEND_HASH_GET_APPLY_COUNT +#define PHPC_HASH_INC_APPLY_COUNT ZEND_HASH_INC_APPLY_COUNT +#define PHPC_HASH_DEC_APPLY_COUNT ZEND_HASH_DEC_APPLY_COUNT +#define PHPC_HASH_APPLY_PROTECTION ZEND_HASH_APPLY_PROTECTION +#else +#define PHPC_HASH_HAS_APPLY_COUNT GC_IS_RECURSIVE +#define PHPC_HASH_GET_APPLY_COUNT GC_IS_RECURSIVE +#define PHPC_HASH_INC_APPLY_COUNT GC_PROTECT_RECURSION +#define PHPC_HASH_DEC_APPLY_COUNT GC_UNPROTECT_RECURSION +#define PHPC_HASH_APPLY_PROTECTION(_tht) (!(GC_FLAGS(_tht) & GC_IMMUTABLE)) +#endif /* add ptr */ #define PHPC_HASH_INDEX_ADD_PTR(_ht, _idx, _ptr, _ptr_size) \ zend_hash_index_add_ptr(_ht, _idx, _ptr) @@ -984,6 +1058,11 @@ #define PHPC_HASH_CSTR_ADD(_ht, _cstr_value, _pzv) \ zend_hash_str_add(_ht, _cstr_value, strlen(_cstr_value), _pzv) +/* next insert */ +#define PHPC_HASH_NEXT_INDEX_INSERT_PTR(_ht, _ptr, _ptr_size) \ + zend_hash_next_index_insert_ptr(_ht, _ptr) +#define PHPC_HASH_NEXT_INDEX_INSERT zend_hash_next_index_insert + /* update ptr */ #define PHPC_HASH_INDEX_UPDATE_PTR(_ht, _idx, _ptr, _ptr_size) \ zend_hash_index_update_ptr(_ht, _idx, _ptr) @@ -1067,6 +1146,12 @@ #define PHPC_HASH_RETURN RETURN_ARR +/* SYMTABLE */ + +/* update*/ +#define PHPC_SYMTABLE_UPDATE zend_symtable_update + + /* ARRAY */ #define PHPC_ARRAY_ADD_ASSOC_NULL_EX add_assoc_null_ex @@ -1157,6 +1242,9 @@ #define PHPC_OBJDEBUG Z_OBJDEBUG #define PHPC_OBJDEBUG_P Z_OBJDEBUG_P +#define PHPC_REFCOUNTED Z_REFCOUNTED +#define PHPC_REFCOUNTED_P Z_REFCOUNTED_P + #define PHPC_PZVAL_CAST_TO_PVAL(_pzv) _pzv #define PHPC_VAL_CAST_TO_ZVAL(_pv) _pv @@ -1174,9 +1262,17 @@ #define PHPC_VAL_COPY(_pv, _zv) ZVAL_COPY(&(_pv), _zv) #define PHPC_VAL_ASSIGN PHPC_VAL_COPY -#define PHPC_PVAL_DEREF ZVAL_DEREF -#define PHPC_PZVAL_DEREF ZVAL_DEREF +#define PHPC_PZVAL_MAKE(_pzv) PHPC_NOOP +#define PHPC_PZVAL_FREE(_pzv) PHPC_NOOP +#define PHPC_PZVAL_SET(_pv, _zv) _pv = _zv +#define PHPC_PVAL_DEREF ZVAL_DEREF +#define PHPC_PZVAL_DEREF ZVAL_DEREF + +#define PHPC_PZVAL_COPY_INIT ZVAL_COPY_VALUE +#define PHPC_PZVAL_COPY ZVAL_COPY_VALUE +#define PHPC_VAL_NEW_STR(_pv, _str) \ + ZVAL_NEW_STR(&_pv, _str) #define PHPC_VAL_STR(_pv, _str) \ ZVAL_STR(&_pv, _str) #define PHPC_VAL_CSTR(_pv, _cstr) \ @@ -1184,9 +1280,18 @@ #define PHPC_VAL_CSTRL(_pv, _cstr, _cstr_len) \ ZVAL_STRINGL(&_pv, _cstr, _cstr_len) -#define PHPC_PZVAL_STR ZVAL_STR -#define PHPC_PZVAL_CSTR ZVAL_STRING -#define PHPC_PZVAL_CSTRL ZVAL_STRINGL +#define PHPC_PZVAL_NEW_STR ZVAL_NEW_STR +#define PHPC_PZVAL_STR ZVAL_STR +#define PHPC_PZVAL_CSTR ZVAL_STRING +#define PHPC_PZVAL_CSTRL ZVAL_STRINGL + +#define PHPC_ZVAL_COPY(_zv_dst, _zv_src) \ + ZVAL_COPY_VALUE(&_zv_dst, &_zv_src) + +#define PHPC_ZVAL_NEW_STR PHPC_VAL_NEW_STR +#define PHPC_ZVAL_STR PHPC_VAL_STR +#define PHPC_ZVAL_CSTR PHPC_VAL_CSTR +#define PHPC_ZVAL_CSTRL PHPC_VAL_CSTRL #define PHPC_ZVAL_IS_TRUE(_zv) \ (Z_TYPE(_zv) == IS_TRUE) @@ -1313,6 +1418,42 @@ PHPC_OBJ_DEFINE_HANDLER_FCE(HashTable *, _name, get_properties)\ (zval *PHPC_SELF TSRMLS_DC) +/* object handler setters */ +#define PHPC_CLASS_SET_HANDLER_CREATE(_class_entry, _name) \ + _class_entry.create_object = PHPC_OBJ_GET_HANDLER_FCE(_name, create) +#define PHPC_OBJ_SET_SPECIFIC_HANDLER_CLONE(_handlers, _name) \ + (_handlers).clone_obj = PHPC_OBJ_GET_HANDLER_FCE(_name, clone) +#define PHPC_OBJ_SET_HANDLER_CLONE(_name) \ + PHPC_OBJ_SET_SPECIFIC_HANDLER_CLONE(PHPC_OBJ_GET_HANDLER_VAR_NAME(_name), _name) +#define PHPC_OBJ_SET_HANDLER_COMPARE(_name) \ + PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).compare_objects = PHPC_OBJ_GET_HANDLER_FCE(_name, compare) +#define PHPC_OBJ_HAS_HANDLER_GET_GC (PHP_VERSION_ID > 50399) +#if PHPC_OBJ_HAS_HANDLER_GET_GC +#define PHPC_OBJ_SET_HANDLER_GET_GC(_name) \ + PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).get_gc = PHPC_OBJ_GET_HANDLER_FCE(_name, get_gc) +#else +#define PHPC_OBJ_SET_HANDLER_GET_GC(_name) PHPC_NOOP +#endif +#define PHPC_OBJ_HAS_HANDLER_GET_DEBUG_INFO (PHP_VERSION_ID > 50299) +#if PHPC_OBJ_HAS_HANDLER_GET_DEBUG_INFO +#define PHPC_OBJ_SET_HANDLER_GET_DEBUG_INFO(_name) \ + PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).get_debug_info = PHPC_OBJ_GET_HANDLER_FCE(_name, get_debug_info) +#else +#define PHPC_OBJ_SET_HANDLER_GET_DEBUG_INFO(_name) PHPC_NOOP +#endif +/* there is such handler in 5.2 but we would have to re-implement zend_std_get_properties */ +#define PHPC_OBJ_HAS_HANDLER_GET_PROPERTIES (PHP_VERSION_ID > 50299) +#if PHPC_OBJ_HAS_HANDLER_GET_PROPERTIES +#define PHPC_OBJ_SET_HANDLER_GET_PROPERTIES(_name) \ + PHPC_OBJ_GET_HANDLER_VAR_NAME(_name).get_properties = PHPC_OBJ_GET_HANDLER_FCE(_name, get_properties) +#else +#define PHPC_OBJ_SET_HANDLER_GET_PROPERTIES(_name) PHPC_NOOP +#endif +#define PHPC_OBJ_SET_HANDLER_OFFSET(_name) \ + PHPC_OBJ_SET_SPECIFIC_HANDLER_OFFSET(PHPC_OBJ_GET_HANDLER_VAR_NAME(_name), _name) +#define PHPC_OBJ_SET_HANDLER_FREE(_name) \ + PHPC_OBJ_SET_SPECIFIC_HANDLER_FREE(PHPC_OBJ_GET_HANDLER_VAR_NAME(_name), _name) + /* hash */ #define PHPC_HASH_ALLOC ALLOC_HASHTABLE #define PHPC_HASH_INIT zend_hash_init