summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore7
-rw-r--r--0001-review-object-management.patch1106
-rw-r--r--PHPINFO2
-rw-r--r--REFLECTION220
-rw-r--r--php-pecl-ds.spec114
5 files changed, 194 insertions, 1255 deletions
diff --git a/.gitignore b/.gitignore
index 0f369b4..01f0400 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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
-
diff --git a/PHPINFO b/PHPINFO
index a6135e2..9eba475 100644
--- a/PHPINFO
+++ b/PHPINFO
@@ -2,4 +2,4 @@
ds
ds support => enabled
-ds version => 1.3.0
+ds version => 1.5.0
diff --git a/REFLECTION b/REFLECTION
index e7c5f64..842258a 100644
--- a/REFLECTION
+++ b/REFLECTION
@@ -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