diff --git a/src/php/arginfo.h b/src/php/arginfo.h index 7551002..605d63e 100644 --- a/src/php/arginfo.h +++ b/src/php/arginfo.h @@ -82,6 +82,75 @@ ZEND_ARG_TYPE_INFO(0, i, IS_LONG, 0) \ ZEND_ARG_VARIADIC_INFO(0, v) \ ZEND_END_ARG_INFO() +#if PHP_VERSION_ID >= 80100 + +#define ARGINFO_OFFSET_GET(name) \ + ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 1, IS_MIXED, 0) \ + ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ + ZEND_END_ARG_INFO() + +#define ARGINFO_OFFSET_SET(name) \ + ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 2, IS_VOID, 0) \ + ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ + ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) \ + ZEND_END_ARG_INFO() + +#define ARGINFO_OFFSET_UNSET(name) \ + ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 1, IS_VOID, 0) \ + ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ + ZEND_END_ARG_INFO() + +#elif PHP_VERSION_ID >= 80000 + +#define ARGINFO_OFFSET_GET(name) \ + ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ + ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ + ZEND_END_ARG_INFO() + +#define ARGINFO_OFFSET_SET(name) \ + ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 2) \ + ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ + ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) \ + ZEND_END_ARG_INFO() + +#define ARGINFO_OFFSET_UNSET(name) \ + ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ + ZEND_ARG_TYPE_INFO(0, offset, IS_MIXED, 0) \ + ZEND_END_ARG_INFO() + +#else + +#define ARGINFO_OFFSET_GET(name) \ + ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ + ZEND_ARG_INFO(0, offset) \ + ZEND_END_ARG_INFO() + +#define ARGINFO_OFFSET_SET(name) \ + ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 2) \ + ZEND_ARG_INFO(0, offset) \ + ZEND_ARG_INFO(0, value) \ + ZEND_END_ARG_INFO() + +#define ARGINFO_OFFSET_UNSET(name) \ + ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 1) \ + ZEND_ARG_INFO(0, offset) \ + ZEND_END_ARG_INFO() + +#endif + +#if PHP_VERSION_ID >= 80100 + +#define ARGINFO_NONE_RETURN_TYPE(name, type) \ + ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX(arginfo_##name, 0, 0, type, 0) \ + ZEND_END_ARG_INFO() +#else + +#define ARGINFO_NONE_RETURN_TYPE(name, type) \ + ZEND_BEGIN_ARG_INFO_EX(arginfo_##name, 0, 0, 0) \ + ZEND_END_ARG_INFO() + +#endif + #if PHP_VERSION_ID >= 80000 #define DS_BEGIN_ARG_WITH_RETURN_DS_INFO_EX(name, pass_by_ref, required_num_args, class_name, allow_null) \ static const zend_internal_arg_info arginfo_##name[] = { \ @@ -182,7 +251,7 @@ ZEND_END_ARG_INFO() ZEND_END_ARG_INFO() #define ARGINFO_NONE_RETURN_OBJ(name, class_name) \ - DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, #class_name, 1) \ + DS_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, 0, #class_name, 0) \ ZEND_END_ARG_INFO() #define ARGINFO_NONE_RETURN_BOOL(name) \ diff --git a/src/php/classes/php_collection_ce.h b/src/php/classes/php_collection_ce.h index 101ac94..83aec6b 100644 --- a/src/php/classes/php_collection_ce.h +++ b/src/php/classes/php_collection_ce.h @@ -21,7 +21,7 @@ ARGINFO_NONE_RETURN_DS( Collection_copy, Collection); ARGINFO_NONE( Collection_clear); ARGINFO_NONE_RETURN_LONG( Collection_count); ARGINFO_NONE_RETURN_BOOL( Collection_isEmpty); -ARGINFO_NONE( Collection_jsonSerialize); +ARGINFO_NONE_RETURN_TYPE( Collection_jsonSerialize, IS_MIXED); ARGINFO_NONE_RETURN_ARRAY( Collection_toArray); void php_ds_register_collection(); diff --git a/src/php/classes/php_map_ce.h b/src/php/classes/php_map_ce.h index e36f670..c732af2 100644 --- a/src/php/classes/php_map_ce.h +++ b/src/php/classes/php_map_ce.h @@ -27,7 +27,7 @@ ARGINFO_NONE_RETURN_DS( Map_keys, Set); ARGINFO_NONE_RETURN_DS( Map_last, Pair); ARGINFO_ZVAL_RETURN_DS( Map_merge, values, Map); ARGINFO_NONE_RETURN_DS( Map_pairs, Sequence); -ARGINFO_NONE( Map_jsonSerialize); +ARGINFO_NONE_RETURN_TYPE( Map_jsonSerialize, IS_MIXED); ARGINFO_OPTIONAL_CALLABLE_RETURN_DS( Map_filter, callback, Map); ARGINFO_NONE_RETURN_DS( Map_first, Pair); ARGINFO_CALLABLE_OPTIONAL_ZVAL( Map_reduce, callback, initial); @@ -43,9 +43,9 @@ ARGINFO_DS_RETURN_DS( Map_xor, map, Map, Map); ARGINFO_NONE_RETURN_OBJ( Map_getIterator, Traversable); ARGINFO_ZVAL_RETURN_BOOL( Map_offsetExists, offset); -ARGINFO_ZVAL( Map_offsetGet, offset); -ARGINFO_ZVAL_ZVAL( Map_offsetSet, offset, value); -ARGINFO_ZVAL( Map_offsetUnset, offset); +ARGINFO_OFFSET_GET( Map_offsetGet); +ARGINFO_OFFSET_SET( Map_offsetSet); +ARGINFO_OFFSET_UNSET( Map_offsetUnset); void php_ds_register_map(); diff --git a/src/php/classes/php_pair_ce.h b/src/php/classes/php_pair_ce.h index bcbbe74..1ffc95d 100644 --- a/src/php/classes/php_pair_ce.h +++ b/src/php/classes/php_pair_ce.h @@ -10,7 +10,7 @@ extern zend_class_entry *php_ds_pair_ce; ARGINFO_OPTIONAL_ZVAL_OPTIONAL_ZVAL( Pair___construct, key, value); ARGINFO_NONE_RETURN_DS( Pair_copy, Pair); ARGINFO_NONE_RETURN_ARRAY( Pair_toArray); -ARGINFO_NONE( Pair_jsonSerialize); +ARGINFO_NONE_RETURN_TYPE( Pair_jsonSerialize, IS_MIXED); void php_ds_register_pair(); diff --git a/src/php/classes/php_queue_ce.h b/src/php/classes/php_queue_ce.h index dcd02d4..acdddb8 100644 --- a/src/php/classes/php_queue_ce.h +++ b/src/php/classes/php_queue_ce.h @@ -16,9 +16,9 @@ ARGINFO_NONE( Queue_peek); ARGINFO_NONE_RETURN_OBJ( Queue_getIterator, Traversable); ARGINFO_ZVAL_RETURN_BOOL( Queue_offsetExists, offset); -ARGINFO_ZVAL( Queue_offsetGet, offset); -ARGINFO_ZVAL_ZVAL( Queue_offsetSet, offset, value); -ARGINFO_ZVAL( Queue_offsetUnset, offset); +ARGINFO_OFFSET_GET( Queue_offsetGet); +ARGINFO_OFFSET_SET( Queue_offsetSet); +ARGINFO_OFFSET_UNSET( Queue_offsetUnset); void php_ds_register_queue(); diff --git a/src/php/classes/php_sequence_ce.h b/src/php/classes/php_sequence_ce.h index ec56282..dff20f6 100644 --- a/src/php/classes/php_sequence_ce.h +++ b/src/php/classes/php_sequence_ce.h @@ -55,9 +55,9 @@ ARGINFO_NONE( Sequence_last); ARGINFO_CALLABLE_RETURN_DS( Sequence_map, callback, Sequence); ARGINFO_ZVAL_RETURN_DS( Sequence_merge, values, Sequence); ARGINFO_ZVAL_RETURN_BOOL( Sequence_offsetExists, offset); -ARGINFO_ZVAL( Sequence_offsetGet, offset); -ARGINFO_ZVAL_ZVAL( Sequence_offsetSet, offset, value); -ARGINFO_ZVAL( Sequence_offsetUnset, offset); +ARGINFO_OFFSET_GET( Sequence_offsetGet); +ARGINFO_OFFSET_SET( Sequence_offsetSet); +ARGINFO_OFFSET_UNSET( Sequence_offsetUnset); ARGINFO_NONE( Sequence_pop); ARGINFO_VARIADIC_ZVAL( Sequence_push, values); ARGINFO_CALLABLE_OPTIONAL_ZVAL( Sequence_reduce, callback, initial); diff --git a/src/php/classes/php_set_ce.h b/src/php/classes/php_set_ce.h index b3c6e65..bdda6d1 100644 --- a/src/php/classes/php_set_ce.h +++ b/src/php/classes/php_set_ce.h @@ -34,9 +34,9 @@ ARGINFO_NONE( Set_sum); ARGINFO_NONE_RETURN_OBJ( Set_getIterator, Traversable); ARGINFO_ZVAL_RETURN_BOOL( Set_offsetExists, offset); -ARGINFO_ZVAL( Set_offsetGet, offset); -ARGINFO_ZVAL_ZVAL( Set_offsetSet, offset, value); -ARGINFO_ZVAL( Set_offsetUnset, offset); +ARGINFO_OFFSET_GET( Set_offsetGet); +ARGINFO_OFFSET_SET( Set_offsetSet); +ARGINFO_OFFSET_UNSET( Set_offsetUnset); void php_ds_register_set(); diff --git a/src/php/classes/php_stack_ce.h b/src/php/classes/php_stack_ce.h index 1119b0f..c63a6cd 100644 --- a/src/php/classes/php_stack_ce.h +++ b/src/php/classes/php_stack_ce.h @@ -16,9 +16,9 @@ ARGINFO_NONE( Stack_peek); ARGINFO_NONE_RETURN_OBJ( Stack_getIterator, Traversable); ARGINFO_ZVAL_RETURN_BOOL( Stack_offsetExists, offset); -ARGINFO_ZVAL( Stack_offsetGet, offset); -ARGINFO_ZVAL_ZVAL( Stack_offsetSet, offset, value); -ARGINFO_ZVAL( Stack_offsetUnset, offset); +ARGINFO_OFFSET_GET( Stack_offsetGet); +ARGINFO_OFFSET_SET( Stack_offsetSet); +ARGINFO_OFFSET_UNSET( Stack_offsetUnset); void php_ds_register_stack();