diff options
-rw-r--r-- | .gitignore | 7 | ||||
-rw-r--r-- | 0001-review-object-management.patch | 1106 | ||||
-rw-r--r-- | PHPINFO | 2 | ||||
-rw-r--r-- | REFLECTION | 220 | ||||
-rw-r--r-- | php-pecl-ds.spec | 114 |
5 files changed, 194 insertions, 1255 deletions
@@ -1,4 +1,9 @@ +clog +package-*.xml *.tgz +*.tar.bz2 *.tar.gz +*.tar.xz +*.tar.xz.asc *.src.rpm -*.xml +*/*rpm diff --git a/0001-review-object-management.patch b/0001-review-object-management.patch deleted file mode 100644 index 89a6d34..0000000 --- a/0001-review-object-management.patch +++ /dev/null @@ -1,1106 +0,0 @@ -From 0a224885ca775ee1af7f9c8ff0e89bb8061966e1 Mon Sep 17 00:00:00 2001 -From: Remi Collet <remi@remirepo.net> -Date: Thu, 15 Oct 2020 15:34:23 +0200 -Subject: [PATCH] review object management - ---- - src/php/handlers/php_common_handlers.c | 4 +++- - src/php/handlers/php_deque_handlers.c | 23 ++++++++++--------- - src/php/handlers/php_map_handlers.c | 22 +++++++++--------- - .../handlers/php_priority_queue_handlers.c | 12 +++++----- - src/php/handlers/php_queue_handlers.c | 14 +++++------ - src/php/handlers/php_set_handlers.c | 18 +++++++-------- - src/php/handlers/php_stack_handlers.c | 17 ++++++++------ - src/php/handlers/php_vector_handlers.c | 20 ++++++++-------- - src/php/iterators/php_queue_iterator.c | 19 +++++++-------- - src/php/iterators/php_queue_iterator.h | 3 ++- - src/php/iterators/php_stack_iterator.c | 19 +++++++-------- - src/php/iterators/php_stack_iterator.h | 3 ++- - src/php/objects/php_deque.c | 6 ++++- - src/php/objects/php_deque.h | 19 +++++++-------- - src/php/objects/php_map.c | 6 ++++- - src/php/objects/php_map.h | 16 ++++++++----- - src/php/objects/php_pair.c | 8 +++++-- - src/php/objects/php_priority_queue.c | 6 ++++- - src/php/objects/php_priority_queue.h | 21 +++++++++-------- - src/php/objects/php_queue.c | 6 ++++- - src/php/objects/php_queue.h | 16 ++++++++----- - src/php/objects/php_set.c | 6 ++++- - src/php/objects/php_set.h | 16 ++++++++----- - src/php/objects/php_stack.c | 6 ++++- - src/php/objects/php_stack.h | 16 ++++++++----- - src/php/objects/php_vector.c | 6 ++++- - src/php/objects/php_vector.h | 16 ++++++++----- - 27 files changed, 205 insertions(+), 139 deletions(-) - -diff --git a/src/php/handlers/php_common_handlers.c b/src/php/handlers/php_common_handlers.c -index 7d84dfb..e2441b2 100644 ---- a/src/php/handlers/php_common_handlers.c -+++ b/src/php/handlers/php_common_handlers.c -@@ -38,6 +38,7 @@ zval *php_ds_read_dimension_by_key_not_supported - (zval *obj, zval *offset, int type, zval *rv) { - #endif - ARRAY_ACCESS_BY_KEY_NOT_SUPPORTED(); -+ return NULL; - } - - int php_ds_has_dimension_by_key_not_supported -@@ -47,6 +48,7 @@ int php_ds_has_dimension_by_key_not_supported - (zval *obj, zval *offset, int check_empty) { - #endif - ARRAY_ACCESS_BY_KEY_NOT_SUPPORTED(); -+ return 0; - } - - void php_ds_unset_dimension_by_key_not_supported -@@ -56,4 +58,4 @@ void php_ds_unset_dimension_by_key_not_supported - (zval *obj, zval *offset) { - #endif - ARRAY_ACCESS_BY_KEY_NOT_SUPPORTED(); --} -\ No newline at end of file -+} -diff --git a/src/php/handlers/php_deque_handlers.c b/src/php/handlers/php_deque_handlers.c -index 0bfe187..07ba92c 100644 ---- a/src/php/handlers/php_deque_handlers.c -+++ b/src/php/handlers/php_deque_handlers.c -@@ -9,7 +9,7 @@ zend_object_handlers php_deque_handlers; - static zval *php_ds_deque_read_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, int type, zval *return_value) { -- ds_deque_t *deque = ((php_ds_deque_t*)obj)->deque; -+ ds_deque_t *deque = php_ds_deque_fetch_object(obj)->deque; - #else - (zval *obj, zval *offset, int type, zval *return_value) { - ds_deque_t *deque = Z_DS_DEQUE_P(obj); -@@ -47,7 +47,7 @@ static zval *php_ds_deque_read_dimension - static void php_ds_deque_write_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, zval *value) { -- ds_deque_t *deque = ((php_ds_deque_t*)obj)->deque; -+ ds_deque_t *deque = php_ds_deque_fetch_object(obj)->deque; - #else - (zval *obj, zval *offset, zval *value) { - ds_deque_t *deque = Z_DS_DEQUE_P(obj); -@@ -69,7 +69,7 @@ static void php_ds_deque_write_dimension - static int php_ds_deque_has_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, int check_empty) { -- ds_deque_t *deque = ((php_ds_deque_t*)obj)->deque; -+ ds_deque_t *deque = php_ds_deque_fetch_object(obj)->deque; - #else - (zval *obj, zval *offset, int check_empty) { - ds_deque_t *deque = Z_DS_DEQUE_P(obj); -@@ -86,7 +86,7 @@ static int php_ds_deque_has_dimension - static void php_ds_deque_unset_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset) { -- ds_deque_t *deque = ((php_ds_deque_t*)obj)->deque; -+ ds_deque_t *deque = php_ds_deque_fetch_object(obj)->deque; - #else - (zval *obj, zval *offset) { - ds_deque_t *deque = Z_DS_DEQUE_P(obj); -@@ -111,24 +111,25 @@ static void php_ds_deque_unset_dimension - static int php_ds_deque_count_elements - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zend_long *count) { -- *count = ((php_ds_deque_t*)obj)->deque->size; return SUCCESS; -+ *count = php_ds_deque_fetch_object(obj)->deque->size; - #else - (zval *obj, zend_long *count) { -- *count = Z_DS_DEQUE_P(obj)->size; return SUCCESS; -+ *count = Z_DS_DEQUE_P(obj)->size; - #endif -+ return SUCCESS; - } - - static void php_ds_deque_free_object(zend_object *object) - { -- php_ds_deque_t *obj = (php_ds_deque_t*) object; -- zend_object_std_dtor(&obj->std); -+ php_ds_deque_t *obj = php_ds_deque_fetch_object(object); - ds_deque_free(obj->deque); -+ zend_object_std_dtor(&obj->std); - } - - static HashTable *php_ds_deque_get_debug_info - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, int *is_temp) { -- ds_deque_t *deque = ((php_ds_deque_t*)obj)->deque; -+ ds_deque_t *deque = php_ds_deque_fetch_object(obj)->deque; - #else - (zval *obj, int *is_temp) { - ds_deque_t *deque = Z_DS_DEQUE_P(obj); -@@ -142,7 +143,7 @@ static HashTable *php_ds_deque_get_debug_info - static zend_object *php_ds_deque_clone_obj - #if PHP_VERSION_ID >= 80000 - (zend_object *obj) { -- return php_ds_deque_create_clone(((php_ds_deque_t*)obj)->deque); -+ return php_ds_deque_create_clone(php_ds_deque_fetch_object(obj)->deque); - #else - (zval *obj) { - return php_ds_deque_create_clone(Z_DS_DEQUE_P(obj)); -@@ -152,7 +153,7 @@ static zend_object *php_ds_deque_clone_obj - static HashTable *php_ds_deque_get_gc - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval **gc_data, int *gc_count) { -- ds_deque_t *deque = ((php_ds_deque_t*)obj)->deque; -+ ds_deque_t *deque = php_ds_deque_fetch_object(obj)->deque; - #else - (zval *obj, zval **gc_data, int *gc_count) { - ds_deque_t *deque = Z_DS_DEQUE_P(obj); -diff --git a/src/php/handlers/php_map_handlers.c b/src/php/handlers/php_map_handlers.c -index 852842e..0b46c5a 100644 ---- a/src/php/handlers/php_map_handlers.c -+++ b/src/php/handlers/php_map_handlers.c -@@ -8,7 +8,7 @@ zend_object_handlers php_map_handlers; - static zval *php_ds_map_read_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, int type, zval *rv) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj, zval *offset, int type, zval *rv) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -46,7 +46,7 @@ static zval *php_ds_map_read_dimension - static void php_ds_map_write_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, zval *value) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj, zval *offset, zval *value) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -62,7 +62,7 @@ static void php_ds_map_write_dimension - static int php_ds_map_has_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, int check_empty) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj, zval *offset, int check_empty) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -74,7 +74,7 @@ static int php_ds_map_has_dimension - static void php_ds_map_unset_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj, zval *offset) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -86,7 +86,7 @@ static void php_ds_map_unset_dimension - static int php_ds_map_count_elements - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zend_long *count) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj, zend_long *count) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -97,15 +97,15 @@ static int php_ds_map_count_elements - - static void php_ds_map_free_object(zend_object *object) - { -- php_ds_map_t *intern = (php_ds_map_t*) object; -- zend_object_std_dtor(&intern->std); -+ php_ds_map_t *intern = php_ds_map_fetch_object(object); - ds_map_free(intern->map); -+ zend_object_std_dtor(&intern->std); - } - - static HashTable *php_ds_map_get_debug_info - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, int *is_temp) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj, int *is_temp) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -117,7 +117,7 @@ static HashTable *php_ds_map_get_debug_info - static zend_object *php_ds_map_clone_obj - #if PHP_VERSION_ID >= 80000 - (zend_object *obj) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -128,7 +128,7 @@ static zend_object *php_ds_map_clone_obj - static HashTable *php_ds_map_get_gc - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval **gc_data, int *gc_size) { -- ds_map_t *map = ((php_ds_map_t*)obj)->map; -+ ds_map_t *map = php_ds_map_fetch_object(obj)->map; - #else - (zval *obj, zval **gc_data, int *gc_size) { - ds_map_t *map = Z_DS_MAP_P(obj); -@@ -147,7 +147,7 @@ void php_ds_register_map_handlers() - { - memcpy(&php_map_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - -- php_map_handlers.offset = 0; -+ php_map_handlers.offset = XtOffsetOf(php_ds_map_t, std); - php_map_handlers.dtor_obj = zend_objects_destroy_object; - php_map_handlers.get_gc = php_ds_map_get_gc; - php_map_handlers.free_obj = php_ds_map_free_object; -diff --git a/src/php/handlers/php_priority_queue_handlers.c b/src/php/handlers/php_priority_queue_handlers.c -index 99cf7e6..cae059e 100644 ---- a/src/php/handlers/php_priority_queue_handlers.c -+++ b/src/php/handlers/php_priority_queue_handlers.c -@@ -8,19 +8,19 @@ zend_object_handlers php_priority_queue_handlers; - - static void php_ds_priority_queue_free_object(zend_object *object) - { -- php_ds_priority_queue_t *queue = (php_ds_priority_queue_t*) object; -- zend_object_std_dtor(&queue->std); -+ php_ds_priority_queue_t *queue = php_ds_priority_queue_fetch_object(object); - ds_priority_queue_free(queue->queue); - - if (queue->gc_data != NULL) { - efree(queue->gc_data); - } -+ zend_object_std_dtor(&queue->std); - } - - static int php_ds_priority_queue_count_elements - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zend_long *count) { -- ds_priority_queue_t *pq = ((php_ds_priority_queue_t *) obj)->queue; -+ ds_priority_queue_t *pq = php_ds_priority_queue_fetch_object(obj)->queue; - #else - (zval *obj, zend_long *count) { - ds_priority_queue_t *pq = Z_DS_PRIORITY_QUEUE_P(obj); -@@ -32,7 +32,7 @@ static int php_ds_priority_queue_count_elements - static zend_object *php_ds_priority_queue_clone_obj - #if PHP_VERSION_ID >= 80000 - (zend_object *obj) { -- ds_priority_queue_t *pq = ((php_ds_priority_queue_t *) obj)->queue; -+ ds_priority_queue_t *pq = php_ds_priority_queue_fetch_object(obj)->queue; - #else - (zval *obj) { - ds_priority_queue_t *pq = Z_DS_PRIORITY_QUEUE_P(obj); -@@ -43,7 +43,7 @@ static zend_object *php_ds_priority_queue_clone_obj - static HashTable *php_ds_priority_queue_get_debug_info - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, int *is_temp) { -- ds_priority_queue_t *pq = ((php_ds_priority_queue_t *) obj)->queue; -+ ds_priority_queue_t *pq = php_ds_priority_queue_fetch_object(obj)->queue; - #else - (zval *obj, int *is_temp) { - ds_priority_queue_t *pq = Z_DS_PRIORITY_QUEUE_P(obj); -@@ -57,7 +57,7 @@ static HashTable *php_ds_priority_queue_get_debug_info - static HashTable *php_ds_priority_queue_get_gc - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval **gc_data, int *gc_size) { -- ds_priority_queue_t *pq = ((php_ds_priority_queue_t *) obj)->queue; -+ ds_priority_queue_t *pq = php_ds_priority_queue_fetch_object(obj)->queue; - #else - (zval *obj, zval **gc_data, int *gc_size) { - ds_priority_queue_t *pq = Z_DS_PRIORITY_QUEUE_P(obj); -diff --git a/src/php/handlers/php_queue_handlers.c b/src/php/handlers/php_queue_handlers.c -index 7a00c9e..cd0c78e 100644 ---- a/src/php/handlers/php_queue_handlers.c -+++ b/src/php/handlers/php_queue_handlers.c -@@ -10,7 +10,7 @@ zend_object_handlers php_queue_handlers; - static void php_ds_queue_write_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, zval *value) { -- ds_queue_t *queue = ((php_ds_queue_t*)obj)->queue; -+ ds_queue_t *queue = php_ds_queue_fetch_object(obj)->queue; - #else - (zval *obj, zval *offset, zval *value) { - ds_queue_t *queue = Z_DS_QUEUE_P(obj); -@@ -24,15 +24,15 @@ static void php_ds_queue_write_dimension - - static void php_ds_queue_free_object(zend_object *object) - { -- php_ds_queue_t *queue = (php_ds_queue_t*) object; -- zend_object_std_dtor(&queue->std); -+ php_ds_queue_t *queue = php_ds_queue_fetch_object(object); - ds_queue_free(queue->queue); -+ zend_object_std_dtor(&queue->std); - } - - static int php_ds_queue_count_elements - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zend_long *count) { -- ds_queue_t *queue = ((php_ds_queue_t*)obj)->queue; -+ ds_queue_t *queue = php_ds_queue_fetch_object(obj)->queue; - #else - (zval *obj, zend_long *count) { - ds_queue_t *queue = Z_DS_QUEUE_P(obj); -@@ -44,7 +44,7 @@ static int php_ds_queue_count_elements - static zend_object *php_ds_queue_clone_obj - #if PHP_VERSION_ID >= 80000 - (zend_object *obj) { -- ds_queue_t *queue = ((php_ds_queue_t*)obj)->queue; -+ ds_queue_t *queue = php_ds_queue_fetch_object(obj)->queue; - #else - (zval *obj) { - ds_queue_t *queue = Z_DS_QUEUE_P(obj); -@@ -55,7 +55,7 @@ static zend_object *php_ds_queue_clone_obj - static HashTable *php_ds_queue_get_debug_info - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, int *is_temp) { -- ds_queue_t *queue = ((php_ds_queue_t*)obj)->queue; -+ ds_queue_t *queue = php_ds_queue_fetch_object(obj)->queue; - #else - (zval *obj, int *is_temp) { - ds_queue_t *queue = Z_DS_QUEUE_P(obj); -@@ -69,7 +69,7 @@ static HashTable *php_ds_queue_get_debug_info - static HashTable *php_ds_queue_get_gc - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval **gc_data, int *gc_count) { -- ds_queue_t *queue = ((php_ds_queue_t*)obj)->queue; -+ ds_queue_t *queue = php_ds_queue_fetch_object(obj)->queue; - #else - (zval *obj, zval **gc_data, int *gc_count) { - ds_queue_t *queue = Z_DS_QUEUE_P(obj); -diff --git a/src/php/handlers/php_set_handlers.c b/src/php/handlers/php_set_handlers.c -index 93319ec..44dc001 100644 ---- a/src/php/handlers/php_set_handlers.c -+++ b/src/php/handlers/php_set_handlers.c -@@ -9,7 +9,7 @@ zend_object_handlers php_ds_set_handlers; - static zval *php_ds_set_read_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, int type, zval *rv) { -- ds_set_t *set = ((php_ds_set_t*)obj)->set; -+ ds_set_t *set = php_ds_set_fetch_object(obj)->set; - #else - (zval *obj, zval *offset, int type, zval *rv) { - ds_set_t *set = Z_DS_SET_P(obj); -@@ -30,7 +30,7 @@ static zval *php_ds_set_read_dimension - static void php_ds_set_write_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, zval *value) { -- ds_set_t *set = ((php_ds_set_t*)obj)->set; -+ ds_set_t *set = php_ds_set_fetch_object(obj)->set; - #else - (zval *obj, zval *offset, zval *value) { - ds_set_t *set = Z_DS_SET_P(obj); -@@ -45,7 +45,7 @@ static void php_ds_set_write_dimension - static int php_ds_set_count_elements - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zend_long *count) { -- ds_set_t *set = ((php_ds_set_t*)obj)->set; -+ ds_set_t *set = php_ds_set_fetch_object(obj)->set; - #else - (zval *obj, zend_long *count) { - ds_set_t *set = Z_DS_SET_P(obj); -@@ -56,15 +56,15 @@ static int php_ds_set_count_elements - - static void php_ds_set_free_object(zend_object *object) - { -- php_ds_set_t *obj = (php_ds_set_t*) object; -- zend_object_std_dtor(&obj->std); -+ php_ds_set_t *obj = php_ds_set_fetch_object(object); - ds_set_free(obj->set); -+ zend_object_std_dtor(&obj->std); - } - - static HashTable *php_ds_set_get_debug_info - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, int *is_temp) { -- ds_set_t *set = ((php_ds_set_t*)obj)->set; -+ ds_set_t *set = php_ds_set_fetch_object(obj)->set; - #else - (zval *obj, int *is_temp) { - ds_set_t *set = Z_DS_SET_P(obj); -@@ -79,7 +79,7 @@ static HashTable *php_ds_set_get_debug_info - static zend_object *php_ds_set_clone_obj - #if PHP_VERSION_ID >= 80000 - (zend_object *obj) { -- ds_set_t *set = ((php_ds_set_t*)obj)->set; -+ ds_set_t *set = php_ds_set_fetch_object(obj)->set; - #else - (zval *obj) { - ds_set_t *set = Z_DS_SET_P(obj); -@@ -90,7 +90,7 @@ static zend_object *php_ds_set_clone_obj - static HashTable *php_ds_set_get_gc - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval **gc_data, int *gc_count) { -- ds_set_t *set = ((php_ds_set_t*)obj)->set; -+ ds_set_t *set = php_ds_set_fetch_object(obj)->set; - #else - (zval *obj, zval **gc_data, int *gc_count) { - ds_set_t *set = Z_DS_SET_P(obj); -@@ -110,7 +110,7 @@ void php_ds_register_set_handlers() - { - memcpy(&php_ds_set_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); - -- php_ds_set_handlers.offset = 0; // XtOffsetOf(php_ds_set_t, std); -+ php_ds_set_handlers.offset = XtOffsetOf(php_ds_set_t, std); - - php_ds_set_handlers.cast_object = php_ds_default_cast_object; - php_ds_set_handlers.clone_obj = php_ds_set_clone_obj; -diff --git a/src/php/handlers/php_stack_handlers.c b/src/php/handlers/php_stack_handlers.c -index 7fe5a7c..a08f15d 100644 ---- a/src/php/handlers/php_stack_handlers.c -+++ b/src/php/handlers/php_stack_handlers.c -@@ -8,7 +8,7 @@ zend_object_handlers php_ds_stack_handlers; - static void php_ds_stack_write_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, zval *value) { -- ds_stack_t *stack = ((php_ds_stack_t*)obj)->stack; -+ ds_stack_t *stack = php_ds_stack_fetch_object(obj)->stack; - #else - (zval *obj, zval *offset, zval *value) { - ds_stack_t *stack = Z_DS_STACK_P(obj); -@@ -22,15 +22,18 @@ static void php_ds_stack_write_dimension - - static void php_ds_stack_free_object(zend_object *object) - { -- php_ds_stack_t *obj = (php_ds_stack_t*) object; -+ php_ds_stack_t *obj = php_ds_stack_fetch_object(object); -+ if (obj->stack) { -+ ds_stack_free(obj->stack); -+ obj->stack = NULL; -+ } - zend_object_std_dtor(&obj->std); -- ds_stack_free(obj->stack); - } - - static int php_ds_stack_count_elements - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zend_long *count) { -- ds_stack_t *stack = ((php_ds_stack_t*)obj)->stack; -+ ds_stack_t *stack = php_ds_stack_fetch_object(obj)->stack; - #else - (zval *obj, zend_long *count) { - ds_stack_t *stack = Z_DS_STACK_P(obj); -@@ -42,7 +45,7 @@ static int php_ds_stack_count_elements - static zend_object *php_ds_stack_clone_obj - #if PHP_VERSION_ID >= 80000 - (zend_object *obj) { -- ds_stack_t *stack = ((php_ds_stack_t*)obj)->stack; -+ ds_stack_t *stack = php_ds_stack_fetch_object(obj)->stack; - #else - (zval *obj) { - ds_stack_t *stack = Z_DS_STACK_P(obj); -@@ -53,7 +56,7 @@ static zend_object *php_ds_stack_clone_obj - static HashTable *php_ds_stack_get_debug_info - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, int *is_temp) { -- ds_stack_t *stack = ((php_ds_stack_t*)obj)->stack; -+ ds_stack_t *stack = php_ds_stack_fetch_object(obj)->stack; - #else - (zval *obj, int *is_temp) { - ds_stack_t *stack = Z_DS_STACK_P(obj); -@@ -68,7 +71,7 @@ static HashTable *php_ds_stack_get_debug_info - static HashTable *php_ds_stack_get_gc - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval **gc_data, int *gc_count) { -- ds_stack_t *stack = ((php_ds_stack_t*)obj)->stack; -+ ds_stack_t *stack = php_ds_stack_fetch_object(obj)->stack; - #else - (zval *obj, zval **gc_data, int *gc_count) { - ds_stack_t *stack = Z_DS_STACK_P(obj); -diff --git a/src/php/handlers/php_vector_handlers.c b/src/php/handlers/php_vector_handlers.c -index c126be8..58fe1e7 100644 ---- a/src/php/handlers/php_vector_handlers.c -+++ b/src/php/handlers/php_vector_handlers.c -@@ -9,7 +9,7 @@ zend_object_handlers php_vector_handlers; - static zval *php_ds_vector_read_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, int type, zval *return_value) { -- ds_vector_t *vector = ((php_ds_vector_t*)obj)->vector; -+ ds_vector_t *vector = php_ds_vector_fetch_object(obj)->vector; - #else - (zval *obj, zval *offset, int type, zval *return_value) { - ds_vector_t *vector = Z_DS_VECTOR_P(obj); -@@ -47,7 +47,7 @@ static zval *php_ds_vector_read_dimension - static void php_ds_vector_write_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, zval *value) { -- ds_vector_t *vector = ((php_ds_vector_t*)obj)->vector; -+ ds_vector_t *vector = php_ds_vector_fetch_object(obj)->vector; - #else - (zval *obj, zval *offset, zval *value) { - ds_vector_t *vector = Z_DS_VECTOR_P(obj); -@@ -69,7 +69,7 @@ static void php_ds_vector_write_dimension - static int php_ds_vector_has_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset, int check_empty) { -- ds_vector_t *vector = ((php_ds_vector_t*)obj)->vector; -+ ds_vector_t *vector = php_ds_vector_fetch_object(obj)->vector; - #else - (zval *obj, zval *offset, int check_empty) { - ds_vector_t *vector = Z_DS_VECTOR_P(obj); -@@ -85,7 +85,7 @@ static int php_ds_vector_has_dimension - static void php_ds_vector_unset_dimension - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval *offset) { -- ds_vector_t *vector = ((php_ds_vector_t*)obj)->vector; -+ ds_vector_t *vector = php_ds_vector_fetch_object(obj)->vector; - #else - (zval *obj, zval *offset) { - ds_vector_t *vector = Z_DS_VECTOR_P(obj); -@@ -110,7 +110,7 @@ static void php_ds_vector_unset_dimension - static int php_ds_vector_count_elements - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zend_long *count) { -- *count = ((php_ds_vector_t*)obj)->vector->size; return SUCCESS; -+ *count = php_ds_vector_fetch_object(obj)->vector->size; return SUCCESS; - #else - (zval *obj, zend_long *count) { - *count = Z_DS_VECTOR_P(obj)->size; return SUCCESS; -@@ -119,15 +119,15 @@ static int php_ds_vector_count_elements - - static void php_ds_vector_free_object(zend_object *obj) - { -- php_ds_vector_t *vector = (php_ds_vector_t*) obj; -- zend_object_std_dtor(&vector->std); -+ php_ds_vector_t *vector = php_ds_vector_fetch_object(obj); - ds_vector_free(vector->vector); -+ zend_object_std_dtor(&vector->std); - } - - static HashTable *php_ds_vector_get_debug_info - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, int *is_temp) { -- ds_vector_t *vector = ((php_ds_vector_t*)obj)->vector; -+ ds_vector_t *vector = php_ds_vector_fetch_object(obj)->vector; - #else - (zval *obj, int *is_temp) { - ds_vector_t *vector = Z_DS_VECTOR_P(obj); -@@ -141,7 +141,7 @@ static HashTable *php_ds_vector_get_debug_info - static zend_object *php_ds_vector_clone_obj - #if PHP_VERSION_ID >= 80000 - (zend_object *obj) { -- return php_ds_vector_create_clone(((php_ds_vector_t*)obj)->vector); -+ return php_ds_vector_create_clone(php_ds_vector_fetch_object(obj)->vector); - #else - (zval *obj) { - return php_ds_vector_create_clone(Z_DS_VECTOR_P(obj)); -@@ -151,7 +151,7 @@ static zend_object *php_ds_vector_clone_obj - static HashTable *php_ds_vector_get_gc - #if PHP_VERSION_ID >= 80000 - (zend_object *obj, zval **gc_data, int *gc_count) { -- ds_vector_t *vector = ((php_ds_vector_t*)obj)->vector; -+ ds_vector_t *vector = php_ds_vector_fetch_object(obj)->vector; - #else - (zval *obj, zval **gc_data, int *gc_count) { - ds_vector_t *vector = Z_DS_VECTOR_P(obj); -diff --git a/src/php/iterators/php_queue_iterator.c b/src/php/iterators/php_queue_iterator.c -index 3a5ebe5..3930b72 100644 ---- a/src/php/iterators/php_queue_iterator.c -+++ b/src/php/iterators/php_queue_iterator.c -@@ -4,9 +4,9 @@ - - static void php_ds_queue_iterator_dtor(zend_object_iterator *iter) - { -- zval tmp; -- ZVAL_OBJ(&tmp, (zend_object *) ((ds_queue_iterator_t *) iter)->queue); -- zval_ptr_dtor(&tmp); -+ ds_queue_iterator_t *iterator = (ds_queue_iterator_t *) iter; -+ -+ OBJ_RELEASE(iterator->object); - } - - static int php_ds_queue_iterator_valid(zend_object_iterator *iter) -@@ -23,12 +23,12 @@ static void php_ds_queue_iterator_get_current_key(zend_object_iterator *iter, zv - ZVAL_LONG(key, ((ds_queue_iterator_t *) iter)->position); - } - --static void php_ds_queue_iterator_set_current(php_ds_queue_t *queue, zval *data) -+static void php_ds_queue_iterator_set_current(ds_queue_t *queue, zval *data) - { -- if (QUEUE_IS_EMPTY(queue->queue)) { -+ if (QUEUE_IS_EMPTY(queue)) { - ZVAL_UNDEF(data); - } else { -- ds_queue_pop(queue->queue, data); -+ ds_queue_pop(queue, data); - Z_TRY_DELREF_P(data); - } - } -@@ -69,15 +69,16 @@ zend_object_iterator *php_ds_queue_get_iterator(zend_class_entry *ce, zval *obje - zend_iterator_init((zend_object_iterator*) iterator); - - iterator->intern.funcs = &php_ds_queue_iterator_funcs; -- iterator->queue = (php_ds_queue_t*) (Z_OBJ_P(object)); -+ iterator->queue = Z_DS_QUEUE_P(object); -+ iterator->object = Z_OBJ_P(object); - iterator->position = 0; - - // Add a reference to the object so that it doesn't get collected when - // the iterated object is implict, eg. foreach ($obj->getInstance() as $value){ ... } - #if PHP_VERSION_ID >= 70300 -- GC_ADDREF((zend_object *) iterator->queue); -+ GC_ADDREF(iterator->object); - #else -- ++GC_REFCOUNT((zend_object *) iterator->queue); -+ ++GC_REFCOUNT(iterator->object); - #endif - - return (zend_object_iterator *) iterator; -diff --git a/src/php/iterators/php_queue_iterator.h b/src/php/iterators/php_queue_iterator.h -index 9221827..ce4295b 100644 ---- a/src/php/iterators/php_queue_iterator.h -+++ b/src/php/iterators/php_queue_iterator.h -@@ -7,7 +7,8 @@ - typedef struct _ds_queue_iterator_t { - zend_object_iterator intern; - zend_long position; -- php_ds_queue_t *queue; -+ zend_object *object; -+ ds_queue_t *queue; - } ds_queue_iterator_t; - - zend_object_iterator *php_ds_queue_get_iterator(zend_class_entry *ce, zval *object, int by_ref); -diff --git a/src/php/iterators/php_stack_iterator.c b/src/php/iterators/php_stack_iterator.c -index f53eb5b..9b62498 100644 ---- a/src/php/iterators/php_stack_iterator.c -+++ b/src/php/iterators/php_stack_iterator.c -@@ -4,9 +4,9 @@ - - static void php_ds_stack_iterator_dtor(zend_object_iterator *iter) - { -- zval tmp; -- ZVAL_OBJ(&tmp, (zend_object *) ((php_ds_stack_iterator_t *) iter)->stack); -- zval_ptr_dtor(&tmp); -+ php_ds_stack_iterator_t *iterator = (php_ds_stack_iterator_t *) iter; -+ -+ OBJ_RELEASE(iterator->object); - } - - static int php_ds_stack_iterator_valid(zend_object_iterator *iter) -@@ -23,12 +23,12 @@ static void php_ds_stack_iterator_get_current_key(zend_object_iterator *iter, zv - ZVAL_LONG(key, ((php_ds_stack_iterator_t *) iter)->position); - } - --static void php_ds_stack_iterator_set_current(php_ds_stack_t *stack, zval *data) -+static void php_ds_stack_iterator_set_current(ds_stack_t *stack, zval *data) - { -- if (DS_STACK_IS_EMPTY(stack->stack)) { -+ if (DS_STACK_IS_EMPTY(stack)) { - ZVAL_UNDEF(data); - } else { -- ds_stack_pop(stack->stack, data); -+ ds_stack_pop(stack, data); - Z_TRY_DELREF_P(data); - } - } -@@ -69,15 +69,16 @@ zend_object_iterator *php_ds_stack_get_iterator(zend_class_entry *ce, zval *obje - zend_iterator_init((zend_object_iterator*) iterator); - - iterator->intern.funcs = &php_ds_stack_iterator_funcs; -- iterator->stack = (php_ds_stack_t *) Z_OBJ_P(object); -+ iterator->stack = Z_DS_STACK_P(object); -+ iterator->object = Z_OBJ_P(object); - iterator->position = 0; - - // Add a reference to the object so that it doesn't get collected when - // the iterated object is implict, eg. foreach ($obj->getInstance() as $value){ ... } - #if PHP_VERSION_ID >= 70300 -- GC_ADDREF((zend_object *) iterator->stack); -+ GC_ADDREF(iterator->object); - #else -- ++GC_REFCOUNT((zend_object *) iterator->stack); -+ ++GC_REFCOUNT(iterator->object); - #endif - - return (zend_object_iterator *) iterator; -diff --git a/src/php/iterators/php_stack_iterator.h b/src/php/iterators/php_stack_iterator.h -index 9ea6857..78563f5 100644 ---- a/src/php/iterators/php_stack_iterator.h -+++ b/src/php/iterators/php_stack_iterator.h -@@ -7,7 +7,8 @@ - typedef struct _php_ds_stack_iterator_t { - zend_object_iterator intern; - zend_long position; -- php_ds_stack_t *stack; -+ zend_object *object; -+ ds_stack_t *stack; - } php_ds_stack_iterator_t; - - zend_object_iterator *php_ds_stack_get_iterator(zend_class_entry *ce, zval *object, int by_ref); -diff --git a/src/php/objects/php_deque.c b/src/php/objects/php_deque.c -index e8633bf..a27e9b4 100644 ---- a/src/php/objects/php_deque.c -+++ b/src/php/objects/php_deque.c -@@ -6,7 +6,11 @@ - - zend_object *php_ds_deque_create_object_ex(ds_deque_t *deque) - { -- php_ds_deque_t *obj = ecalloc(1, sizeof(php_ds_deque_t)); -+#if PHP_VERSION_ID < 70300 -+ php_ds_deque_t *obj = ecalloc(1, sizeof(php_ds_deque_t) + zend_object_properties_size(php_ds_deque_ce)); -+#else -+ php_ds_deque_t *obj = zend_object_alloc(sizeof(php_ds_deque_t), php_ds_deque_ce); -+#endif - zend_object_std_init(&obj->std, php_ds_deque_ce); - obj->std.handlers = &php_deque_handlers; - obj->deque = deque; -diff --git a/src/php/objects/php_deque.h b/src/php/objects/php_deque.h -index 5c95cfe..ddaf354 100644 ---- a/src/php/objects/php_deque.h -+++ b/src/php/objects/php_deque.h -@@ -3,7 +3,16 @@ - - #include "../../ds/ds_deque.h" - --#define Z_DS_DEQUE(z) ((php_ds_deque_t*) Z_OBJ(z))->deque -+typedef struct php_ds_deque { -+ ds_deque_t *deque; -+ zend_object std; -+} php_ds_deque_t; -+ -+static inline php_ds_deque_t *php_ds_deque_fetch_object(zend_object *obj) { -+ return (php_ds_deque_t *)((char*)(obj) - XtOffsetOf(php_ds_deque_t, std)); -+} -+ -+#define Z_DS_DEQUE(z) (php_ds_deque_fetch_object(Z_OBJ(z))->deque) - #define Z_DS_DEQUE_P(z) Z_DS_DEQUE(*z) - #define THIS_DS_DEQUE() Z_DS_DEQUE_P(getThis()) - -@@ -21,14 +30,6 @@ do { \ - } while(0) - - --/** -- * -- */ --typedef struct php_ds_deque { -- zend_object std; -- ds_deque_t *deque; --} php_ds_deque_t; -- - /** - * Creates a new zend_object using an existing deque. - */ -diff --git a/src/php/objects/php_map.c b/src/php/objects/php_map.c -index 820f452..e36e162 100644 ---- a/src/php/objects/php_map.c -+++ b/src/php/objects/php_map.c -@@ -6,7 +6,11 @@ - - zend_object *php_ds_map_create_object_ex(ds_map_t *map) - { -- php_ds_map_t *obj = ecalloc(1, sizeof(php_ds_map_t)); -+#if PHP_VERSION_ID < 70300 -+ php_ds_map_t *obj = ecalloc(1, sizeof(php_ds_map_t) + zend_object_properties_size(php_ds_map_ce)); -+#else -+ php_ds_map_t *obj = zend_object_alloc(sizeof(php_ds_map_t), php_ds_map_ce); -+#endif - zend_object_std_init(&obj->std, php_ds_map_ce); - obj->std.handlers = &php_map_handlers; - obj->map = map; -diff --git a/src/php/objects/php_map.h b/src/php/objects/php_map.h -index 8d5ef0a..a3805b4 100644 ---- a/src/php/objects/php_map.h -+++ b/src/php/objects/php_map.h -@@ -3,7 +3,16 @@ - - #include "../../ds/ds_map.h" - --#define Z_DS_MAP(z) (((php_ds_map_t*)(Z_OBJ(z)))->map) -+typedef struct _php_ds_map_t { -+ ds_map_t *map; -+ zend_object std; -+} php_ds_map_t; -+ -+static inline php_ds_map_t *php_ds_map_fetch_object(zend_object *obj) { -+ return (php_ds_map_t *)((char*)(obj) - XtOffsetOf(php_ds_map_t, std)); -+} -+ -+#define Z_DS_MAP(z) (php_ds_map_fetch_object(Z_OBJ(z))->map) - #define Z_DS_MAP_P(z) Z_DS_MAP(*z) - #define THIS_DS_MAP() Z_DS_MAP_P(getThis()) - -@@ -20,11 +29,6 @@ do { \ - return; \ - } while(0) - --typedef struct _php_ds_map_t { -- zend_object std; -- ds_map_t *map; --} php_ds_map_t; -- - zend_object *php_ds_map_create_object_ex(ds_map_t *map); - zend_object *php_ds_map_create_object(zend_class_entry *ce); - zend_object *php_ds_map_create_clone(ds_map_t *map); -diff --git a/src/php/objects/php_pair.c b/src/php/objects/php_pair.c -index 078b9e2..c71a92a 100644 ---- a/src/php/objects/php_pair.c -+++ b/src/php/objects/php_pair.c -@@ -4,9 +4,13 @@ - - zend_object *php_ds_pair_create_object(zend_class_entry *ce) - { -+#if PHP_VERSION_ID < 70300 - php_ds_pair_t *obj = ecalloc(1, sizeof(php_ds_pair_t) + zend_object_properties_size(ce)); -- zend_object_std_init(&obj->std, php_ds_pair_ce); -- object_properties_init(&obj->std, php_ds_pair_ce); -+#else -+ php_ds_pair_t *obj = zend_object_alloc(sizeof(php_ds_pair_t), ce); -+#endif -+ zend_object_std_init(&obj->std, ce); -+ object_properties_init(&obj->std, ce); - obj->std.handlers = &php_pair_handlers; - - return &obj->std; -diff --git a/src/php/objects/php_priority_queue.c b/src/php/objects/php_priority_queue.c -index 7fa50c0..7edb9f0 100644 ---- a/src/php/objects/php_priority_queue.c -+++ b/src/php/objects/php_priority_queue.c -@@ -6,7 +6,11 @@ - - zend_object *php_ds_priority_queue_create_object_ex(ds_priority_queue_t *queue) - { -- php_ds_priority_queue_t *obj = ecalloc(1, sizeof(php_ds_priority_queue_t)); -+#if PHP_VERSION_ID < 70300 -+ php_ds_priority_queue_t *obj = ecalloc(1, sizeof(php_ds_priority_queue_t) + zend_object_properties_size(php_ds_priority_queue_ce)); -+#else -+ php_ds_priority_queue_t *obj = zend_object_alloc(sizeof(php_ds_priority_queue_t), php_ds_priority_queue_ce); -+#endif - zend_object_std_init(&obj->std, php_ds_priority_queue_ce); - obj->std.handlers = &php_priority_queue_handlers; - -diff --git a/src/php/objects/php_priority_queue.h b/src/php/objects/php_priority_queue.h -index f7a38dc..e26434d 100644 ---- a/src/php/objects/php_priority_queue.h -+++ b/src/php/objects/php_priority_queue.h -@@ -3,7 +3,18 @@ - - #include "../../ds/ds_priority_queue.h" - --#define Z_DS_PRIORITY_QUEUE(z) (((php_ds_priority_queue_t*)(Z_OBJ(z)))->queue) -+typedef struct _php_ds_priority_queue_t { -+ ds_priority_queue_t *queue; -+ zval *gc_data; -+ int gc_size; -+ zend_object std; -+} php_ds_priority_queue_t; -+ -+static inline php_ds_priority_queue_t *php_ds_priority_queue_fetch_object(zend_object *obj) { -+ return (php_ds_priority_queue_t *)((char*)(obj) - XtOffsetOf(php_ds_priority_queue_t, std)); -+} -+ -+#define Z_DS_PRIORITY_QUEUE(z) (php_ds_priority_queue_fetch_object(Z_OBJ(z))->queue) - #define Z_DS_PRIORITY_QUEUE_P(z) Z_DS_PRIORITY_QUEUE(*z) - #define THIS_DS_PRIORITY_QUEUE() Z_DS_PRIORITY_QUEUE_P(getThis()) - -@@ -21,14 +32,6 @@ do { \ - return; \ - } while(0) - --typedef struct _php_ds_priority_queue_t { -- zend_object std; -- ds_priority_queue_t *queue; -- zval *gc_data; -- int gc_size; -- --} php_ds_priority_queue_t; -- - zend_object *php_ds_priority_queue_create_object_ex(ds_priority_queue_t *queue); - zend_object *php_ds_priority_queue_create_object(zend_class_entry *ce); - zend_object *php_ds_priority_queue_create_clone(ds_priority_queue_t *queue); -diff --git a/src/php/objects/php_queue.c b/src/php/objects/php_queue.c -index 7de656d..fc5d7d9 100644 ---- a/src/php/objects/php_queue.c -+++ b/src/php/objects/php_queue.c -@@ -6,7 +6,11 @@ - - zend_object *php_ds_queue_create_object_ex(ds_queue_t *queue) - { -- php_ds_queue_t *obj = ecalloc(1, sizeof(php_ds_queue_t)); -+#if PHP_VERSION_ID < 70300 -+ php_ds_queue_t *obj = ecalloc(1, sizeof(php_ds_queue_t) + zend_object_properties_size(php_ds_queue_ce)); -+#else -+ php_ds_queue_t *obj = zend_object_alloc(sizeof(php_ds_queue_t), php_ds_queue_ce); -+#endif - zend_object_std_init(&obj->std, php_ds_queue_ce); - obj->std.handlers = &php_queue_handlers; - obj->queue = queue; -diff --git a/src/php/objects/php_queue.h b/src/php/objects/php_queue.h -index dc76385..0d2e55c 100644 ---- a/src/php/objects/php_queue.h -+++ b/src/php/objects/php_queue.h -@@ -3,7 +3,16 @@ - - #include "../../ds/ds_queue.h" - --#define Z_DS_QUEUE(z) (((php_ds_queue_t*)(Z_OBJ(z)))->queue) -+typedef struct _php_ds_queue_t { -+ ds_queue_t *queue; -+ zend_object std; -+} php_ds_queue_t; -+ -+static inline php_ds_queue_t *php_ds_queue_fetch_object(zend_object *obj) { -+ return (php_ds_queue_t *)((char*)(obj) - XtOffsetOf(php_ds_queue_t, std)); -+} -+ -+#define Z_DS_QUEUE(z) php_ds_queue_fetch_object(Z_OBJ(z))->queue - #define Z_DS_QUEUE_P(z) Z_DS_QUEUE(*z) - #define THIS_DS_QUEUE() Z_DS_QUEUE_P(getThis()) - -@@ -21,11 +30,6 @@ do { \ - return; \ - } while(0) - --typedef struct _php_ds_queue_t { -- zend_object std; -- ds_queue_t *queue; --} php_ds_queue_t; -- - zend_object *php_ds_queue_create_object_ex(ds_queue_t *queue); - zend_object *php_ds_queue_create_object(zend_class_entry *ce); - zend_object *php_ds_queue_create_clone(ds_queue_t *queue); -diff --git a/src/php/objects/php_set.c b/src/php/objects/php_set.c -index 70d82c0..85027f7 100644 ---- a/src/php/objects/php_set.c -+++ b/src/php/objects/php_set.c -@@ -6,7 +6,11 @@ - - zend_object *php_ds_set_create_object_ex(ds_set_t *set) - { -- php_ds_set_t *obj = ecalloc(1, sizeof(php_ds_set_t)); -+#if PHP_VERSION_ID < 70300 -+ php_ds_set_t *obj = ecalloc(1, sizeof(php_ds_set_t) + zend_object_properties_size(php_ds_set_ce)); -+#else -+ php_ds_set_t *obj = zend_object_alloc(sizeof(php_ds_set_t), php_ds_set_ce); -+#endif - zend_object_std_init(&obj->std, php_ds_set_ce); - obj->std.handlers = &php_ds_set_handlers; - obj->set = set; -diff --git a/src/php/objects/php_set.h b/src/php/objects/php_set.h -index 8f94b33..5c2760d 100644 ---- a/src/php/objects/php_set.h -+++ b/src/php/objects/php_set.h -@@ -3,7 +3,16 @@ - - #include "../../ds/ds_set.h" - --#define Z_DS_SET(z) (((php_ds_set_t*)(Z_OBJ(z)))->set) -+typedef struct _php_ds_set_t { -+ ds_set_t *set; -+ zend_object std; -+} php_ds_set_t; -+ -+static inline php_ds_set_t *php_ds_set_fetch_object(zend_object *obj) { -+ return (php_ds_set_t *)((char*)(obj) - XtOffsetOf(php_ds_set_t, std)); -+} -+ -+#define Z_DS_SET(z) (php_ds_set_fetch_object(Z_OBJ(z))->set) - #define Z_DS_SET_P(z) Z_DS_SET(*z) - #define THIS_DS_SET() Z_DS_SET_P(getThis()) - -@@ -20,11 +29,6 @@ do { \ - return; \ - } while(0) - --typedef struct _php_ds_set_t { -- zend_object std; -- ds_set_t *set; --} php_ds_set_t; -- - zend_object *php_ds_set_create_object_ex(ds_set_t *set); - zend_object *php_ds_set_create_object(zend_class_entry *ce); - zend_object *php_ds_set_create_clone(ds_set_t *set); -diff --git a/src/php/objects/php_stack.c b/src/php/objects/php_stack.c -index 8b2ac61..e583ba3 100644 ---- a/src/php/objects/php_stack.c -+++ b/src/php/objects/php_stack.c -@@ -6,7 +6,11 @@ - - zend_object *php_ds_stack_create_object_ex(ds_stack_t *stack) - { -- php_ds_stack_t *obj = ecalloc(1, sizeof(php_ds_stack_t)); -+#if PHP_VERSION_ID < 70300 -+ php_ds_stack_t *obj = ecalloc(1, sizeof(php_ds_stack_t) + zend_object_properties_size(php_ds_stack_ce)); -+#else -+ php_ds_stack_t *obj = zend_object_alloc(sizeof(php_ds_stack_t), php_ds_stack_ce); -+#endif - zend_object_std_init(&obj->std, php_ds_stack_ce); - obj->std.handlers = &php_ds_stack_handlers; - obj->stack = stack; -diff --git a/src/php/objects/php_stack.h b/src/php/objects/php_stack.h -index c34934b..219f306 100644 ---- a/src/php/objects/php_stack.h -+++ b/src/php/objects/php_stack.h -@@ -3,7 +3,16 @@ - - #include "../../ds/ds_stack.h" - --#define Z_DS_STACK(z) (((php_ds_stack_t*)(Z_OBJ(z)))->stack) -+typedef struct _php_ds_stack_t { -+ ds_stack_t *stack; -+ zend_object std; -+} php_ds_stack_t; -+ -+static inline php_ds_stack_t *php_ds_stack_fetch_object(zend_object *obj) { -+ return (php_ds_stack_t *)((char*)(obj) - XtOffsetOf(php_ds_stack_t, std)); -+} -+ -+#define Z_DS_STACK(z) php_ds_stack_fetch_object(Z_OBJ(z))->stack - #define Z_DS_STACK_P(z) Z_DS_STACK(*z) - #define THIS_DS_STACK() Z_DS_STACK_P(getThis()) - -@@ -20,11 +29,6 @@ do { \ - return; \ - } while(0) - --typedef struct _php_ds_stack_t { -- zend_object std; -- ds_stack_t *stack; --} php_ds_stack_t; -- - zend_object *php_ds_stack_create_object_ex(ds_stack_t *stack); - zend_object *php_ds_stack_create_object(zend_class_entry *ce); - zend_object *php_ds_stack_create_clone(ds_stack_t *stack); -diff --git a/src/php/objects/php_vector.c b/src/php/objects/php_vector.c -index f415c43..f3402ab 100644 ---- a/src/php/objects/php_vector.c -+++ b/src/php/objects/php_vector.c -@@ -6,7 +6,11 @@ - - zend_object *php_ds_vector_create_object_ex(ds_vector_t *vector) - { -- php_ds_vector_t *obj = ecalloc(1, sizeof(php_ds_vector_t)); -+#if PHP_VERSION_ID < 70300 -+ php_ds_vector_t *obj = ecalloc(1, sizeof(php_ds_vector_t) + zend_object_properties_size(php_ds_vector_ce)); -+#else -+ php_ds_vector_t *obj = zend_object_alloc(sizeof(php_ds_vector_t), php_ds_vector_ce); -+#endif - zend_object_std_init(&obj->std, php_ds_vector_ce); - obj->std.handlers = &php_vector_handlers; - obj->vector = vector; -diff --git a/src/php/objects/php_vector.h b/src/php/objects/php_vector.h -index 63b4b7f..43399e6 100644 ---- a/src/php/objects/php_vector.h -+++ b/src/php/objects/php_vector.h -@@ -3,7 +3,16 @@ - - #include "../../ds/ds_vector.h" - --#define Z_DS_VECTOR(z) (((php_ds_vector_t*)(Z_OBJ(z)))->vector) -+typedef struct php_ds_vector { -+ ds_vector_t *vector; -+ zend_object std; -+} php_ds_vector_t; -+ -+static inline php_ds_vector_t *php_ds_vector_fetch_object(zend_object *obj) { -+ return (php_ds_vector_t *)((char*)(obj) - XtOffsetOf(php_ds_vector_t, std)); -+} -+ -+#define Z_DS_VECTOR(z) (php_ds_vector_fetch_object(Z_OBJ(z))->vector) - #define Z_DS_VECTOR_P(z) Z_DS_VECTOR(*z) - #define THIS_DS_VECTOR() Z_DS_VECTOR_P(getThis()) - -@@ -20,11 +29,6 @@ do { \ - return; \ - } while(0) - --typedef struct php_ds_vector { -- zend_object std; -- ds_vector_t *vector; --} php_ds_vector_t; -- - zend_object *php_ds_vector_create_object_ex(ds_vector_t *vector); - zend_object *php_ds_vector_create_object(zend_class_entry *ce); - zend_object *php_ds_vector_create_clone(ds_vector_t *vector); --- -2.25.4 - @@ -2,4 +2,4 @@ ds ds support => enabled -ds version => 1.3.0 +ds version => 1.5.0 @@ -1,4 +1,4 @@ -Extension [ <persistent> extension #117 ds version 1.3.0 ] { +Extension [ <persistent> extension #63 ds version 1.5.0 ] { - Dependencies { Dependency [ json (Required) ] @@ -80,18 +80,24 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { } Method [ <internal:Core, inherits IteratorAggregate> abstract public method getIterator ] { + + - Parameters [0] { + } + - Tentative return [ Traversable ] } Method [ <internal:Core, inherits Countable> abstract public method count ] { - Parameters [0] { } + - Tentative return [ int ] } Method [ <internal:json, inherits JsonSerializable> abstract public method jsonSerialize ] { - Parameters [0] { } + - Tentative return [ mixed ] } } } @@ -136,7 +142,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> abstract public method filter ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $callback ] + Parameter #0 [ <optional> ?callable $callback = <default> ] } - Return [ Ds\Sequence ] } @@ -172,7 +178,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> abstract public method join ] { - Parameters [1] { - Parameter #0 [ <optional> string $glue ] + Parameter #0 [ <optional> string $glue = <default> ] } - Return [ string ] } @@ -216,7 +222,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> callable $callback ] - Parameter #1 [ <optional> $initial ] + Parameter #1 [ <optional> $initial = <default> ] } } @@ -258,7 +264,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> int $index ] - Parameter #1 [ <optional> int or NULL $length ] + Parameter #1 [ <optional> ?int $length = <default> ] } - Return [ Ds\Sequence ] } @@ -266,7 +272,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> abstract public method sort ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } } @@ -305,47 +311,57 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { } Method [ <internal:Core, inherits IteratorAggregate> abstract public method getIterator ] { + + - Parameters [0] { + } + - Tentative return [ Traversable ] } Method [ <internal:Core, inherits Countable> abstract public method count ] { - Parameters [0] { } + - Tentative return [ int ] } Method [ <internal:json, inherits JsonSerializable> abstract public method jsonSerialize ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:Core, inherits ArrayAccess> abstract public method offsetExists ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ bool ] } Method [ <internal:Core, inherits ArrayAccess> abstract public method offsetGet ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ mixed ] } Method [ <internal:Core, inherits ArrayAccess> abstract public method offsetSet ] { - Parameters [2] { - Parameter #0 [ <required> $offset ] - Parameter #1 [ <required> $value ] + Parameter #0 [ <required> mixed $offset ] + Parameter #1 [ <required> mixed $value ] } + - Tentative return [ void ] } Method [ <internal:Core, inherits ArrayAccess> abstract public method offsetUnset ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ void ] } } } @@ -369,7 +385,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, ctor> public method __construct ] { - Parameters [1] { - Parameter #0 [ <optional> $values ] + Parameter #0 [ <optional> $values = <default> ] } } @@ -377,7 +393,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } - - Return [ Traversable or NULL ] + - Return [ Traversable ] } Method [ <internal:ds, prototype Ds\Sequence> public method allocate ] { @@ -412,7 +428,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype Ds\Sequence> public method filter ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $callback ] + Parameter #0 [ <optional> ?callable $callback = <default> ] } - Return [ Ds\Sequence ] } @@ -448,7 +464,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype Ds\Sequence> public method join ] { - Parameters [1] { - Parameter #0 [ <optional> string $glue ] + Parameter #0 [ <optional> string $glue = <default> ] } - Return [ string ] } @@ -486,23 +502,26 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype ArrayAccess> public method offsetGet ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetSet ] { - Parameters [2] { - Parameter #0 [ <required> $offset ] - Parameter #1 [ <required> $value ] + Parameter #0 [ <required> mixed $offset ] + Parameter #1 [ <required> mixed $value ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetUnset ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype Ds\Sequence> public method pop ] { @@ -522,7 +541,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> callable $callback ] - Parameter #1 [ <optional> $initial ] + Parameter #1 [ <optional> $initial = <default> ] } } @@ -571,7 +590,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> int $index ] - Parameter #1 [ <optional> int or NULL $length ] + Parameter #1 [ <optional> ?int $length = <default> ] } - Return [ Ds\Sequence ] } @@ -579,14 +598,14 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype Ds\Sequence> public method sort ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } } Method [ <internal:ds> public method sorted ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } - Return [ Ds\Sequence ] } @@ -635,6 +654,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype Ds\Collection> public method toArray ] { @@ -665,7 +685,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, ctor> public method __construct ] { - Parameters [1] { - Parameter #0 [ <optional> $values ] + Parameter #0 [ <optional> $values = <default> ] } } @@ -673,7 +693,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } - - Return [ Traversable or NULL ] + - Return [ Traversable ] } Method [ <internal:ds, prototype Ds\Collection> public method clear ] { @@ -707,6 +727,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype Ds\Collection> public method toArray ] { @@ -748,7 +769,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype Ds\Sequence> public method filter ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $callback ] + Parameter #0 [ <optional> ?callable $callback = <default> ] } - Return [ Ds\Sequence ] } @@ -784,7 +805,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype Ds\Sequence> public method join ] { - Parameters [1] { - Parameter #0 [ <optional> string $glue ] + Parameter #0 [ <optional> string $glue = <default> ] } - Return [ string ] } @@ -822,23 +843,26 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype ArrayAccess> public method offsetGet ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetSet ] { - Parameters [2] { - Parameter #0 [ <required> $offset ] - Parameter #1 [ <required> $value ] + Parameter #0 [ <required> mixed $offset ] + Parameter #1 [ <required> mixed $value ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetUnset ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype Ds\Sequence> public method pop ] { @@ -858,7 +882,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> callable $callback ] - Parameter #1 [ <optional> $initial ] + Parameter #1 [ <optional> $initial = <default> ] } } @@ -907,7 +931,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> int $index ] - Parameter #1 [ <optional> int or NULL $length ] + Parameter #1 [ <optional> ?int $length = <default> ] } - Return [ Ds\Sequence ] } @@ -915,14 +939,14 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype Ds\Sequence> public method sort ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } } Method [ <internal:ds> public method sorted ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } - Return [ Ds\Sequence ] } @@ -960,7 +984,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, ctor> public method __construct ] { - Parameters [1] { - Parameter #0 [ <optional> $values ] + Parameter #0 [ <optional> $values = <default> ] } } @@ -1001,7 +1025,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } - - Return [ Traversable or NULL ] + - Return [ Traversable ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetExists ] { @@ -1015,23 +1039,26 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype ArrayAccess> public method offsetGet ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetSet ] { - Parameters [2] { - Parameter #0 [ <required> $offset ] - Parameter #1 [ <required> $value ] + Parameter #0 [ <required> mixed $offset ] + Parameter #1 [ <required> mixed $value ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetUnset ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype Ds\Collection> public method clear ] { @@ -1065,6 +1092,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype Ds\Collection> public method toArray ] { @@ -1076,7 +1104,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { } } - Class [ <internal:ds> <iterateable> final class Ds\Queue implements Ds\Collection, JsonSerializable, Countable, Traversable, IteratorAggregate ] { + Class [ <internal:ds> <iterateable> final class Ds\Queue implements Ds\Collection, JsonSerializable, Countable, Traversable, IteratorAggregate, ArrayAccess ] { - Constants [1] { Constant [ public int MIN_CAPACITY ] { 8 } @@ -1095,7 +1123,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, ctor> public method __construct ] { - Parameters [1] { - Parameter #0 [ <optional> $values ] + Parameter #0 [ <optional> $values = <default> ] } } @@ -1136,10 +1164,10 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } - - Return [ Traversable or NULL ] + - Return [ Traversable ] } - Method [ <internal:ds> public method offsetExists ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetExists ] { - Parameters [1] { Parameter #0 [ <required> $offset ] @@ -1147,26 +1175,29 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Return [ bool ] } - Method [ <internal:ds> public method offsetGet ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetGet ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ mixed ] } - Method [ <internal:ds> public method offsetSet ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetSet ] { - Parameters [2] { - Parameter #0 [ <required> $offset ] - Parameter #1 [ <required> $value ] + Parameter #0 [ <required> mixed $offset ] + Parameter #1 [ <required> mixed $value ] } + - Tentative return [ void ] } - Method [ <internal:ds> public method offsetUnset ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetUnset ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype Ds\Collection> public method clear ] { @@ -1200,6 +1231,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype Ds\Collection> public method toArray ] { @@ -1230,7 +1262,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, ctor> public method __construct ] { - Parameters [1] { - Parameter #0 [ <optional> $values ] + Parameter #0 [ <optional> $values = <default> ] } } @@ -1266,7 +1298,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> public method filter ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $callback ] + Parameter #0 [ <optional> ?callable $callback = <default> ] } - Return [ Ds\Map ] } @@ -1282,7 +1314,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> $key ] - Parameter #1 [ <optional> $default ] + Parameter #1 [ <optional> $default = <default> ] } } @@ -1320,14 +1352,14 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> public method ksort ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } } Method [ <internal:ds> public method ksorted ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } - Return [ Ds\Map ] } @@ -1381,7 +1413,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> callable $callback ] - Parameter #1 [ <optional> $initial ] + Parameter #1 [ <optional> $initial = <default> ] } } @@ -1389,7 +1421,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> $key ] - Parameter #1 [ <optional> $default ] + Parameter #1 [ <optional> $default = <default> ] } } @@ -1418,7 +1450,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> int $index ] - Parameter #1 [ <optional> int or NULL $length ] + Parameter #1 [ <optional> ?int $length = <default> ] } - Return [ Ds\Map ] } @@ -1426,14 +1458,14 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> public method sort ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } } Method [ <internal:ds> public method sorted ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } - Return [ Ds\Map ] } @@ -1471,7 +1503,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } - - Return [ Traversable or NULL ] + - Return [ Traversable ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetExists ] { @@ -1485,23 +1517,26 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, prototype ArrayAccess> public method offsetGet ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetSet ] { - Parameters [2] { - Parameter #0 [ <required> $offset ] - Parameter #1 [ <required> $value ] + Parameter #0 [ <required> mixed $offset ] + Parameter #1 [ <required> mixed $value ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype ArrayAccess> public method offsetUnset ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype Ds\Collection> public method clear ] { @@ -1535,6 +1570,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype Ds\Collection> public method toArray ] { @@ -1546,7 +1582,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { } } - Class [ <internal:ds> <iterateable> final class Ds\Set implements Ds\Collection, JsonSerializable, Countable, Traversable, IteratorAggregate ] { + Class [ <internal:ds> <iterateable> final class Ds\Set implements Ds\Collection, JsonSerializable, Countable, Traversable, IteratorAggregate, ArrayAccess ] { - Constants [1] { Constant [ public int MIN_CAPACITY ] { 8 } @@ -1565,7 +1601,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds, ctor> public method __construct ] { - Parameters [1] { - Parameter #0 [ <optional> $values ] + Parameter #0 [ <optional> $values = <default> ] } } @@ -1609,7 +1645,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> public method filter ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $predicate ] + Parameter #0 [ <optional> ?callable $predicate = <default> ] } - Return [ Ds\Set ] } @@ -1638,7 +1674,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> public method join ] { - Parameters [1] { - Parameter #0 [ <optional> string $glue ] + Parameter #0 [ <optional> string $glue = <default> ] } } @@ -1668,7 +1704,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> callable $callback ] - Parameter #1 [ <optional> $initial ] + Parameter #1 [ <optional> $initial = <default> ] } } @@ -1696,7 +1732,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [2] { Parameter #0 [ <required> int $index ] - Parameter #1 [ <optional> int or NULL $length ] + Parameter #1 [ <optional> ?int $length = <default> ] } - Return [ Ds\Set ] } @@ -1704,14 +1740,14 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { Method [ <internal:ds> public method sort ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } } Method [ <internal:ds> public method sorted ] { - Parameters [1] { - Parameter #0 [ <optional> callable or NULL $comparator ] + Parameter #0 [ <optional> ?callable $comparator = <default> ] } - Return [ Ds\Set ] } @@ -1742,10 +1778,10 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } - - Return [ Traversable or NULL ] + - Return [ Traversable ] } - Method [ <internal:ds> public method offsetExists ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetExists ] { - Parameters [1] { Parameter #0 [ <required> $offset ] @@ -1753,26 +1789,29 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Return [ bool ] } - Method [ <internal:ds> public method offsetGet ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetGet ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ mixed ] } - Method [ <internal:ds> public method offsetSet ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetSet ] { - Parameters [2] { - Parameter #0 [ <required> $offset ] - Parameter #1 [ <required> $value ] + Parameter #0 [ <required> mixed $offset ] + Parameter #1 [ <required> mixed $value ] } + - Tentative return [ void ] } - Method [ <internal:ds> public method offsetUnset ] { + Method [ <internal:ds, prototype ArrayAccess> public method offsetUnset ] { - Parameters [1] { - Parameter #0 [ <required> $offset ] + Parameter #0 [ <required> mixed $offset ] } + - Tentative return [ void ] } Method [ <internal:ds, prototype Ds\Collection> public method clear ] { @@ -1806,6 +1845,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype Ds\Collection> public method toArray ] { @@ -1877,7 +1917,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } - - Return [ Traversable or NULL ] + - Return [ Traversable ] } Method [ <internal:ds, prototype Ds\Collection> public method clear ] { @@ -1911,6 +1951,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds, prototype Ds\Collection> public method toArray ] { @@ -1934,16 +1975,16 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { } - Properties [2] { - Property [ <default> public $key ] - Property [ <default> public $value ] + Property [ public $key = NULL ] + Property [ public $value = NULL ] } - Methods [4] { Method [ <internal:ds, ctor> public method __construct ] { - Parameters [2] { - Parameter #0 [ <optional> $key ] - Parameter #1 [ <optional> $value ] + Parameter #0 [ <optional> $key = <default> ] + Parameter #1 [ <optional> $value = <default> ] } } @@ -1958,6 +1999,7 @@ Extension [ <persistent> extension #117 ds version 1.3.0 ] { - Parameters [0] { } + - Tentative return [ mixed ] } Method [ <internal:ds> public method toArray ] { diff --git a/php-pecl-ds.spec b/php-pecl-ds.spec index 4bd8e67..b9156b5 100644 --- a/php-pecl-ds.spec +++ b/php-pecl-ds.spec @@ -1,18 +1,14 @@ # remirepo spec file for php-pecl-ds # -# Copyright (c) 2016-2020 Remi Collet -# License: CC-BY-SA +# Copyright (c) 2016-2023 Remi Collet +# License: CC-BY-SA-4.0 # http://creativecommons.org/licenses/by-sa/4.0/ # # Please, preserve the changelog entries # -# we don't want -z defs linker flag -%undefine _strict_symbol_defs_build - %if 0%{?scl:1} %scl_package php-pecl-ds -%global sub_prefix %{scl_prefix} # No phpunit in SCL %bcond_with tests %else @@ -23,34 +19,36 @@ %global pecl_name ds # After json %global ini_name 40-%{pecl_name}.ini +%global sources %{pecl_name}-%{version} +%global _configure ../%{sources}/configure # For test suite, see https://github.com/php-ds/tests/commits/master -%global gh_commit 5323dffd6130d733b308e53cc8017eb41d278f3a +# version 1.5.1 +%global gh_commit 3d14aa6f8c25d38d79c90924150c51636544e4a8 %global gh_short %(c=%{gh_commit}; echo ${c:0:7}) %global gh_owner php-ds %global gh_project tests Summary: Data Structures for PHP -Name: %{?sub_prefix}php-pecl-%{pecl_name} -Version: 1.3.0 +Name: %{?scl_prefix}php-pecl-%{pecl_name} +Version: 1.5.0 Release: 1%{?dist}%{!?scl:%{!?nophptag:%(%{__php} -r 'echo ".".PHP_MAJOR_VERSION.".".PHP_MINOR_VERSION;')}} License: MIT URL: https://pecl.php.net/package/%{pecl_name} Source0: https://pecl.php.net/get/%{pecl_name}-%{version}.tgz # Only use for tests during the build, no value to be packaged separately -# in composer.json: "require-dev": { "php-ds/tests": "dev-master" } +# in composer.json: "require-dev": { "php-ds/tests": "^1.5.0" } Source1: https://github.com/%{gh_owner}/%{gh_project}/archive/%{gh_commit}/%{gh_project}-%{gh_short}.tar.gz -Patch0: 0001-review-object-management.patch - +BuildRequires: make BuildRequires: %{?dtsprefix}gcc -BuildRequires: %{?scl_prefix}php-devel >= 7 +BuildRequires: %{?scl_prefix}php-devel >= 7.4 BuildRequires: %{?scl_prefix}php-pear BuildRequires: %{?scl_prefix}php-gmp BuildRequires: %{?scl_prefix}php-json %if %{with tests} -BuildRequires: %{_bindir}/phpunit6 +BuildRequires: %{_bindir}/phpunit9 BuildRequires: %{_bindir}/phpab %endif #BuildRequires: php-debuginfo @@ -59,34 +57,11 @@ BuildRequires: %{_bindir}/phpab Requires: %{?scl_prefix}php(zend-abi) = %{php_zend_api} Requires: %{?scl_prefix}php(api) = %{php_core_api} Requires: %{?scl_prefix}php-json%{?_isa} -%{?_sclreq:Requires: %{?scl_prefix}runtime%{?_sclreq}%{?_isa}} Provides: %{?scl_prefix}php-%{pecl_name} = %{version} Provides: %{?scl_prefix}php-%{pecl_name}%{?_isa} = %{version} Provides: %{?scl_prefix}php-pecl(%{pecl_name}) = %{version} Provides: %{?scl_prefix}php-pecl(%{pecl_name})%{?_isa} = %{version} -%if "%{?scl_prefix}" != "%{?sub_prefix}" -Provides: %{?scl_prefix}php-pecl-%{pecl_name} = %{version}-%{release} -Provides: %{?scl_prefix}php-pecl-%{pecl_name}%{?_isa} = %{version}-%{release} -%endif - -%if "%{?packager}" == "Remi Collet" && 0%{!?scl:1} && 0%{?rhel} -%if "%{php_version}" > "7.3" -Obsoletes: php73-pecl-%{pecl_name} <= %{version} -%endif -%if "%{php_version}" > "7.4" -Obsoletes: php74-pecl-%{pecl_name} <= %{version} -%endif -%if "%{php_version}" > "8.0" -Obsoletes: php80-pecl-%{pecl_name} <= %{version} -%endif -%endif - -%if 0%{?fedora} < 20 && 0%{?rhel} < 7 -# Filter shared private -%{?filter_provides_in: %filter_provides_in %{_libdir}/.*\.so$} -%{?filter_setup} -%endif %description @@ -98,15 +73,12 @@ Package built for PHP %(%{__php} -r 'echo PHP_MAJOR_VERSION.".".PHP_MINOR_VERSIO %prep %setup -q -c -a 1 -mv %{pecl_name}-%{version} NTS mv %{gh_project}-%{gh_commit} tests # Don't install/register tests, install examples as doc %{?_licensedir:sed -e '/LICENSE/s/role="doc"/role="src"/' -i package.xml} -cd NTS -%patch0 -p1 - +cd %{sources} # Sanity check, really often broken extver=$(sed -n '/#define PHP_DS_VERSION/{s/.* "//;s/".*$//;p}' php_ds.h) if test "x${extver}" != "x%{version}%{?prever:-%{prever}}"; then @@ -115,9 +87,9 @@ if test "x${extver}" != "x%{version}%{?prever:-%{prever}}"; then fi cd .. +mkdir NTS %if %{with_zts} -# Duplicate source tree for NTS / ZTS build -cp -pr NTS ZTS +mkdir ZTS %endif # Create configuration file @@ -138,14 +110,15 @@ peclbuild() { make %{?_smp_mflags} } -cd NTS -%{_bindir}/phpize -peclbuild %{_bindir}/php-config +cd %{sources} +%{__phpize} + +cd ../NTS +peclbuild %{__phpconfig} %if %{with_zts} cd ../ZTS -%{_bindir}/zts-phpize -peclbuild %{_bindir}/zts-php-config +peclbuild %{__ztsphpconfig} %endif @@ -170,7 +143,7 @@ install -D -m 644 %{ini_name} %{buildroot}%{php_ztsinidir}/%{ini_name} # Documentation for i in $(grep 'role="doc"' package.xml | sed -e 's/^.*name="//;s/".*$//') -do install -Dpm 644 NTS/$i %{buildroot}%{pecl_docdir}/%{pecl_name}/$i +do install -Dpm 644 %{sources}/$i %{buildroot}%{pecl_docdir}/%{pecl_name}/$i done @@ -195,24 +168,21 @@ fi %check -modules="-d extension=json.so" +[ -f %{php_extdir}/json.so ] && modules="-d extension=json.so" -cd NTS : Minimal load test for NTS extension %{__php} --no-php-ini \ $modules \ --define extension=%{buildroot}%{php_extdir}/%{pecl_name}.so \ - --modules | grep %{pecl_name} + --modules | grep '^%{pecl_name}$' %if %{with_zts} -cd ../ZTS : Minimal load test for ZTS extension %{__ztsphp} --no-php-ini \ $modules \ --define extension=%{buildroot}%{php_ztsextdir}/%{pecl_name}.so \ - --modules | grep %{pecl_name} + --modules | grep '^%{pecl_name}$' %endif -cd .. %if %{with tests} : Generate autoloader for tests @@ -223,14 +193,15 @@ cd .. : Run upstream test suite %{_bindir}/php \ -d extension=%{buildroot}%{php_extdir}/%{pecl_name}.so \ - %{_bindir}/phpunit6 \ + %{_bindir}/phpunit9 \ + --do-not-cache-result \ --bootstrap tests/autoload.php \ - tests + --verbose tests %endif %files -%{?_licensedir:%license NTS/LICENSE} +%{?_licensedir:%license %{sources}/LICENSE} %{!?_licensedir:%doc %{pecl_docdir}/%{pecl_name}} %{pecl_xmldir}/%{name}.xml @@ -244,6 +215,33 @@ cd .. %changelog +* Wed Dec 20 2023 Remi Collet <remi@remirepo.net> - 1.5.0-1 +- update to 1.5.0 + +* Wed Aug 30 2023 Remi Collet <remi@remirepo.net> - 1.4.0-3 +- rebuild for PHP 8.3.0RC1 + +* Wed Jul 12 2023 Remi Collet <remi@remirepo.net> - 1.4.0-2 +- build out of sources tree +- add upstream patch for PHP 8.3 + +* Tue Dec 14 2021 Remi Collet <remi@remirepo.net> - 1.4.0-1 +- update to 1.4.0 +- raise dependency on PHP 7.3 +- drop all patches merged upstream +- switch to phpunit8 + +* Wed Nov 3 2021 Remi Collet <remi@remirepo.net> - 1.3.0-6 +- add patches for PHP 8.1 from upstream and from + https://github.com/php-ds/ext-ds/pull/187 + +* Fri Mar 26 2021 Remi Collet <remi@remirepo.net> - 1.3.0-4 +- switch to phpunit7 + +* Tue Nov 3 2020 Remi Collet <remi@remirepo.net> - 1.3.0-2 +- fix segfault using patch from + https://github.com/php-ds/ext-ds/pull/165 + * Wed Oct 14 2020 Remi Collet <remi@remirepo.net> - 1.3.0-1 - update to 1.3.0 |