mirror of
https://github.com/php/php-src.git
synced 2025-08-15 21:48:51 +02:00
Convert remaining array function arginfo to PHP stubs
This commit is contained in:
parent
48040cf345
commit
d5f42d68c8
5 changed files with 506 additions and 360 deletions
|
@ -4176,7 +4176,7 @@ static inline zval *array_column_fetch_prop(zval *data, zval *name, zval *rv) /*
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto array|false array_column(array input, mixed column_key[, mixed index_key])
|
||||
/* {{{ proto array array_column(array input, mixed column_key[, mixed index_key])
|
||||
Return the values from a single column in the input array, identified by the
|
||||
value_key and optionally indexed by the index_key */
|
||||
PHP_FUNCTION(array_column)
|
||||
|
@ -6334,7 +6334,7 @@ PHP_FUNCTION(array_key_exists)
|
|||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ proto array|null array_chunk(array input, int size [, bool preserve_keys])
|
||||
/* {{{ proto array array_chunk(array input, int size [, bool preserve_keys])
|
||||
Split array into chunks */
|
||||
PHP_FUNCTION(array_chunk)
|
||||
{
|
||||
|
|
|
@ -122,354 +122,6 @@ static void user_tick_function_dtor(user_tick_function_entry *tick_function_entr
|
|||
|
||||
/* {{{ arginfo */
|
||||
|
||||
/* {{{ array.c */
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_usort, 0)
|
||||
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_ARG_INFO(0, cmp_function)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_uasort, 0)
|
||||
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_ARG_INFO(0, cmp_function)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_uksort, 0)
|
||||
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_ARG_INFO(0, cmp_function)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_end, 0)
|
||||
ZEND_ARG_INFO(1, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_prev, 0)
|
||||
ZEND_ARG_INFO(1, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_next, 0)
|
||||
ZEND_ARG_INFO(1, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_reset, 0)
|
||||
ZEND_ARG_INFO(1, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_current, 0)
|
||||
ZEND_ARG_INFO(0, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_key, 0)
|
||||
ZEND_ARG_INFO(0, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_min, 0, 0, 1)
|
||||
ZEND_ARG_VARIADIC_INFO(0, args)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_max, 0, 0, 1)
|
||||
ZEND_ARG_VARIADIC_INFO(0, args)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk, 0, 2, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_ARG_INFO(0, funcname)
|
||||
ZEND_ARG_INFO(0, userdata)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk_recursive, 0, 2, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(1, input) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_ARG_INFO(0, funcname)
|
||||
ZEND_ARG_INFO(0, userdata)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_in_array, 0, 2, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(0, needle)
|
||||
ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
|
||||
ZEND_ARG_INFO(0, strict)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, needle)
|
||||
ZEND_ARG_INFO(0, haystack) /* ARRAY_INFO(0, haystack, 0) */
|
||||
ZEND_ARG_INFO(0, strict)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_extract, 0, 0, 1)
|
||||
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, extract_type)
|
||||
ZEND_ARG_INFO(0, prefix)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_compact, 0, 0, 1)
|
||||
ZEND_ARG_VARIADIC_INFO(0, var_names)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_fill, 0)
|
||||
ZEND_ARG_INFO(0, start_key)
|
||||
ZEND_ARG_INFO(0, num)
|
||||
ZEND_ARG_INFO(0, val)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_fill_keys, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */
|
||||
ZEND_ARG_INFO(0, val)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_range, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, low)
|
||||
ZEND_ARG_INFO(0, high)
|
||||
ZEND_ARG_INFO(0, step)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_shuffle, 0)
|
||||
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_pop, 0)
|
||||
ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_shift, 0)
|
||||
ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_unshift, 0, 1, IS_LONG, 0)
|
||||
ZEND_ARG_INFO(1, stack) /* ARRAY_INFO(1, stack, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, vars)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_splice, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(1, arg) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_ARG_INFO(0, offset)
|
||||
ZEND_ARG_INFO(0, length)
|
||||
ZEND_ARG_INFO(0, replacement) /* ARRAY_INFO(0, arg, 1) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_slice, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(1, arg, 0) */
|
||||
ZEND_ARG_INFO(0, offset)
|
||||
ZEND_ARG_INFO(0, length)
|
||||
ZEND_ARG_INFO(0, preserve_keys)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_merge, 0, 0, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_merge_recursive, 0, 0, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace, 0, 0, 1)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_replace_recursive, 0, 0, 1)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_keys, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, search_value)
|
||||
ZEND_ARG_INFO(0, strict)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_key_first, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_key_last, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_values, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_count_values, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_column, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, column_key)
|
||||
ZEND_ARG_INFO(0, index_key)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_reverse, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, preserve_keys)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_pad, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, pad_size)
|
||||
ZEND_ARG_INFO(0, pad_value)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_flip, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_change_key_case, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, input) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, case)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_unique, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, flags)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_key, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_ukey, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_key_compare_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_data_compare_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_intersect_assoc, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_assoc, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_data_compare_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_intersect_uassoc, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_key_compare_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_uintersect_uassoc, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_data_compare_func)
|
||||
ZEND_ARG_INFO(0, callback_key_compare_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_key, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_diff_ukey, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_key_comp_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_udiff, 0)
|
||||
ZEND_ARG_INFO(0, arr1)
|
||||
ZEND_ARG_INFO(0, arr2)
|
||||
ZEND_ARG_INFO(0, callback_data_comp_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_diff_assoc, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_diff_uassoc, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_data_comp_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_assoc, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_key_comp_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_udiff_uassoc, 0)
|
||||
ZEND_ARG_INFO(0, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(0, arr2) /* ARRAY_INFO(0, arg2, 0) */
|
||||
ZEND_ARG_INFO(0, callback_data_comp_func)
|
||||
ZEND_ARG_INFO(0, callback_key_comp_func)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_multisort, 0, 0, 1)
|
||||
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, arr1) /* ARRAY_INFO(0, arg1, 0) */
|
||||
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_order)
|
||||
ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, sort_flags)
|
||||
ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, arr2)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, num_req)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_sum, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_product, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_reduce, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, callback)
|
||||
ZEND_ARG_INFO(0, initial)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_filter, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, callback)
|
||||
ZEND_ARG_INFO(0, use_keys)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_map, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, callback)
|
||||
ZEND_ARG_VARIADIC_INFO(0, arrays)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_array_key_exists, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(0, key)
|
||||
ZEND_ARG_INFO(0, search)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_chunk, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, arg) /* ARRAY_INFO(0, arg, 0) */
|
||||
ZEND_ARG_INFO(0, size)
|
||||
ZEND_ARG_INFO(0, preserve_keys)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_array_combine, 0)
|
||||
ZEND_ARG_INFO(0, keys) /* ARRAY_INFO(0, keys, 0) */
|
||||
ZEND_ARG_INFO(0, values) /* ARRAY_INFO(0, values, 0) */
|
||||
ZEND_END_ARG_INFO()
|
||||
/* }}} */
|
||||
/* {{{ basic_functions.c */
|
||||
ZEND_BEGIN_ARG_INFO(arginfo_get_magic_quotes_gpc, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
|
|
@ -79,6 +79,197 @@ function sort(array &$arg, int $sort_flags = SORT_REGULAR): bool {}
|
|||
|
||||
function rsort(array &$arg, int $sort_flags = SORT_REGULAR): bool {}
|
||||
|
||||
function usort(array &$arg, callable $cmp_function): bool {}
|
||||
|
||||
function uasort(array &$arg, callable $cmp_function): bool {}
|
||||
|
||||
function uksort(array &$arg, callable $cmp_function): bool {}
|
||||
|
||||
/**
|
||||
* @param array|object $arg
|
||||
* @return mixed
|
||||
*/
|
||||
function end(array &$arg) {}
|
||||
|
||||
/**
|
||||
* @param array|object $arg
|
||||
* @return mixed
|
||||
*/
|
||||
function prev(&$arg) {}
|
||||
|
||||
/**
|
||||
* @param array|object $arg
|
||||
* @return mixed
|
||||
*/
|
||||
function next(&$arg) {}
|
||||
|
||||
/**
|
||||
* @param array|object $arg
|
||||
* @return mixed
|
||||
*/
|
||||
function reset(&$arg) {}
|
||||
|
||||
/**
|
||||
* @param array|object $arg
|
||||
* @return mixed
|
||||
*/
|
||||
function current($arg) {}
|
||||
|
||||
/**
|
||||
* @param array|object $arg
|
||||
* @return int|string|null
|
||||
*/
|
||||
function key($arg) {}
|
||||
|
||||
/** @return mixed */
|
||||
function min($arg, ...$args) {}
|
||||
|
||||
/** @return mixed */
|
||||
function max($arg, ...$args) {}
|
||||
|
||||
/** @param array|object $input */
|
||||
function array_walk(&$input, callable $funcname, $userdata = null): bool {}
|
||||
|
||||
/** @param array|object $input */
|
||||
function array_walk_recursive(&$input, callable $funcname, $userdata = null): bool {}
|
||||
|
||||
function in_array($needle, array $haystack, bool $strict = false): bool {}
|
||||
|
||||
/** @return int|string|false */
|
||||
function array_search($needle, array $haystack, bool $strict = false) {}
|
||||
|
||||
/** @prefer-ref $arg */
|
||||
function extract(array &$arg, int $extract_type = EXTR_OVERWRITE, string $prefix = ""): ?int {}
|
||||
|
||||
function compact($var_name, ...$var_names): ?array {}
|
||||
|
||||
/** @return array|false */
|
||||
function array_fill(int $start_key, int $num, $val) {}
|
||||
|
||||
function array_fill_keys(array $keys, $val): array {}
|
||||
|
||||
/**
|
||||
* @param int|float|string $low
|
||||
* @param int|float|string $high
|
||||
* @param int|float $step
|
||||
*/
|
||||
function range($low, $high, $step = 1): array {}
|
||||
|
||||
function shuffle(array &$arg): bool {}
|
||||
|
||||
/** @return mixed */
|
||||
function array_pop(array &$stack) {}
|
||||
|
||||
/** @return mixed */
|
||||
function array_shift(array &$stack) {}
|
||||
|
||||
function array_unshift(array &$stack, ...$vars): int {}
|
||||
|
||||
function array_splice(array &$arg, int $offset, int $length = UNKNOWN, $replacement = []): array {}
|
||||
|
||||
function array_slice(array $arg, int $offset, ?int $length = null, bool $preserve_keys = false): array {}
|
||||
|
||||
function array_merge(array ...$arrays): array {}
|
||||
|
||||
function array_merge_recursive(array ...$arrays): array {}
|
||||
|
||||
function array_replace(array $arr1, array ...$arrays): array {}
|
||||
|
||||
function array_replace_recursive(array $arr1, array ...$arrays): array {}
|
||||
|
||||
function array_keys(array $arg, $search_value = UNKNOWN, bool $strict = false): array {}
|
||||
|
||||
/** @return int|string|null */
|
||||
function array_key_first(array $arg) {}
|
||||
|
||||
/** @return int|string|null */
|
||||
function array_key_last(array $arg) {}
|
||||
|
||||
function array_values(array $arg): array {}
|
||||
|
||||
function array_count_values(array $arg): array {}
|
||||
|
||||
/**
|
||||
* @param int|string|null $column_key
|
||||
* @param int|string|null $index_key
|
||||
*/
|
||||
function array_column(array $arg, $column_key, $index_key = null): array {}
|
||||
|
||||
function array_reverse(array $input, bool $preserve_keys = false): array {}
|
||||
|
||||
function array_pad(array $arg, int $pad_size, $pad_value): array {}
|
||||
|
||||
function array_flip(array $arg): array {}
|
||||
|
||||
function array_change_key_case(array $input, int $case = CASE_LOWER): array {}
|
||||
|
||||
function array_unique(array $arg, int $flags = SORT_STRING): array {}
|
||||
|
||||
function array_intersect_key(array $arr1, array $arr2, array ...$arrays): array {}
|
||||
|
||||
function array_intersect_ukey(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_intersect(array $arr1, array $arr2, array ...$arrays): array {}
|
||||
|
||||
function array_uintersect(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_intersect_assoc(array $arr1, array $arr2, array ...$arrays): array {}
|
||||
|
||||
function array_uintersect_assoc(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_intersect_uassoc(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_uintersect_uassoc(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_diff_key(array $arr1, array $arr2, array ...$arrays): array {}
|
||||
|
||||
function array_diff_ukey(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_diff(array $arr1, array $arr2, array ...$arrays): array {}
|
||||
|
||||
function array_udiff(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_diff_assoc(array $arr1, array $arr2, array ...$arrays): array {}
|
||||
|
||||
function array_diff_uassoc(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_udiff_assoc(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
function array_udiff_uassoc(array $arr1, array $arr2, ...$rest): array {}
|
||||
|
||||
/**
|
||||
* @prefer-ref $arr1
|
||||
* @prefer-ref $sort_order
|
||||
* @prefer-ref $sort_flags
|
||||
* @prefer-ref $arr2
|
||||
*/
|
||||
function array_multisort(&$arr1, $sort_order = SORT_ASC, $sort_flags = SORT_REGULAR, &...$arr2): bool {}
|
||||
|
||||
/** @return int|string|array|null */
|
||||
function array_rand(array $arg, int $num_req = 1) {}
|
||||
|
||||
/** @return int|float */
|
||||
function array_sum(array $arg) {}
|
||||
|
||||
/** @return int|float */
|
||||
function array_product(array $arg) {}
|
||||
|
||||
function array_reduce(array $arg, callable $callback, $initial = null) {}
|
||||
|
||||
function array_filter(array $arg, callable $callback, int $use_keys = 0): array {}
|
||||
|
||||
function array_map(?callable $callback, array $arr1, array ...$arrays): array {}
|
||||
|
||||
/**
|
||||
* @param int|string $key
|
||||
* @param array|object $search
|
||||
*/
|
||||
function array_key_exists($key, $search): bool {}
|
||||
|
||||
function array_chunk(array $arg, int $size, bool $preserve_keys = false): array {}
|
||||
|
||||
function array_combine(array $keys, array $values): array {}
|
||||
|
||||
/* base64.c */
|
||||
|
||||
function base64_encode(string $str): string {}
|
||||
|
|
|
@ -96,6 +96,265 @@ ZEND_END_ARG_INFO()
|
|||
|
||||
#define arginfo_rsort arginfo_krsort
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_usort, 0, 2, _IS_BOOL, 0)
|
||||
ZEND_ARG_TYPE_INFO(1, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, cmp_function, IS_CALLABLE, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_uasort arginfo_usort
|
||||
|
||||
#define arginfo_uksort arginfo_usort
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_end, 0, 0, 1)
|
||||
ZEND_ARG_TYPE_INFO(1, arg, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_prev, 0, 0, 1)
|
||||
ZEND_ARG_INFO(1, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_next arginfo_prev
|
||||
|
||||
#define arginfo_reset arginfo_prev
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_current, 0, 0, 1)
|
||||
ZEND_ARG_INFO(0, arg)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_key arginfo_current
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_min, 0, 0, 1)
|
||||
ZEND_ARG_INFO(0, arg)
|
||||
ZEND_ARG_VARIADIC_INFO(0, args)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_max arginfo_min
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_walk, 0, 2, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(1, input)
|
||||
ZEND_ARG_TYPE_INFO(0, funcname, IS_CALLABLE, 0)
|
||||
ZEND_ARG_INFO(0, userdata)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_walk_recursive arginfo_array_walk
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_in_array, 0, 2, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(0, needle)
|
||||
ZEND_ARG_TYPE_INFO(0, haystack, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, strict, _IS_BOOL, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_search, 0, 0, 2)
|
||||
ZEND_ARG_INFO(0, needle)
|
||||
ZEND_ARG_TYPE_INFO(0, haystack, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, strict, _IS_BOOL, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_extract, 0, 1, IS_LONG, 1)
|
||||
ZEND_ARG_TYPE_INFO(2, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, extract_type, IS_LONG, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, prefix, IS_STRING, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_compact, 0, 1, IS_ARRAY, 1)
|
||||
ZEND_ARG_INFO(0, var_name)
|
||||
ZEND_ARG_VARIADIC_INFO(0, var_names)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_fill, 0, 0, 3)
|
||||
ZEND_ARG_TYPE_INFO(0, start_key, IS_LONG, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, num, IS_LONG, 0)
|
||||
ZEND_ARG_INFO(0, val)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_fill_keys, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, keys, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, val)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_range, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, low)
|
||||
ZEND_ARG_INFO(0, high)
|
||||
ZEND_ARG_INFO(0, step)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_shuffle arginfo_natsort
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_pop, 0, 0, 1)
|
||||
ZEND_ARG_TYPE_INFO(1, stack, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_shift arginfo_array_pop
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_unshift, 0, 1, IS_LONG, 0)
|
||||
ZEND_ARG_TYPE_INFO(1, stack, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_INFO(0, vars)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_splice, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(1, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0)
|
||||
ZEND_ARG_INFO(0, replacement)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_slice, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 1)
|
||||
ZEND_ARG_TYPE_INFO(0, preserve_keys, _IS_BOOL, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_merge, 0, 0, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_TYPE_INFO(0, arrays, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_merge_recursive arginfo_array_merge
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_replace, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arr1, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_TYPE_INFO(0, arrays, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_replace_recursive arginfo_array_replace
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_keys, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, search_value)
|
||||
ZEND_ARG_TYPE_INFO(0, strict, _IS_BOOL, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_key_first, 0, 0, 1)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_key_last arginfo_array_key_first
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_values, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_count_values arginfo_array_values
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_column, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_INFO(0, column_key)
|
||||
ZEND_ARG_INFO(0, index_key)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_reverse, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, input, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, preserve_keys, _IS_BOOL, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_pad, 0, 3, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, pad_size, IS_LONG, 0)
|
||||
ZEND_ARG_INFO(0, pad_value)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_flip arginfo_array_values
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_change_key_case, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, input, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, case, IS_LONG, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_unique, 0, 1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_intersect_key, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arr1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arr2, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_TYPE_INFO(0, arrays, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_intersect_ukey, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arr1, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arr2, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_INFO(0, rest)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_intersect arginfo_array_intersect_key
|
||||
|
||||
#define arginfo_array_uintersect arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_intersect_assoc arginfo_array_intersect_key
|
||||
|
||||
#define arginfo_array_uintersect_assoc arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_intersect_uassoc arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_uintersect_uassoc arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_diff_key arginfo_array_intersect_key
|
||||
|
||||
#define arginfo_array_diff_ukey arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_diff arginfo_array_intersect_key
|
||||
|
||||
#define arginfo_array_udiff arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_diff_assoc arginfo_array_intersect_key
|
||||
|
||||
#define arginfo_array_diff_uassoc arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_udiff_assoc arginfo_array_intersect_ukey
|
||||
|
||||
#define arginfo_array_udiff_uassoc arginfo_array_intersect_ukey
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_multisort, 0, 1, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(2, arr1)
|
||||
ZEND_ARG_INFO(2, sort_order)
|
||||
ZEND_ARG_INFO(2, sort_flags)
|
||||
ZEND_ARG_VARIADIC_INFO(2, arr2)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_rand, 0, 0, 1)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, num_req, IS_LONG, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
#define arginfo_array_sum arginfo_array_key_first
|
||||
|
||||
#define arginfo_array_product arginfo_array_key_first
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_array_reduce, 0, 0, 2)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
|
||||
ZEND_ARG_INFO(0, initial)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_filter, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, use_keys, IS_LONG, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_map, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, callback, IS_CALLABLE, 1)
|
||||
ZEND_ARG_TYPE_INFO(0, arr1, IS_ARRAY, 0)
|
||||
ZEND_ARG_VARIADIC_TYPE_INFO(0, arrays, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_key_exists, 0, 2, _IS_BOOL, 0)
|
||||
ZEND_ARG_INFO(0, key)
|
||||
ZEND_ARG_INFO(0, search)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_chunk, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, arg, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, size, IS_LONG, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, preserve_keys, _IS_BOOL, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_combine, 0, 2, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, keys, IS_ARRAY, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, values, IS_ARRAY, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_base64_encode, 0, 1, IS_STRING, 0)
|
||||
ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
|
|
@ -108,25 +108,29 @@ class Type {
|
|||
}
|
||||
|
||||
class ArgInfo {
|
||||
const SEND_BY_VAL = 0;
|
||||
const SEND_BY_REF = 1;
|
||||
const SEND_PREFER_REF = 2;
|
||||
|
||||
/** @var string */
|
||||
public $name;
|
||||
/** @var bool */
|
||||
public $byRef;
|
||||
/** @var int */
|
||||
public $sendBy;
|
||||
/** @var bool */
|
||||
public $isVariadic;
|
||||
/** @var Type|null */
|
||||
public $type;
|
||||
|
||||
public function __construct(string $name, bool $byRef, bool $isVariadic, ?Type $type) {
|
||||
public function __construct(string $name, int $sendBy, bool $isVariadic, ?Type $type) {
|
||||
$this->name = $name;
|
||||
$this->byRef = $byRef;
|
||||
$this->sendBy = $sendBy;
|
||||
$this->isVariadic = $isVariadic;
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
public function equals(ArgInfo $other): bool {
|
||||
return $this->name === $other->name
|
||||
&& $this->byRef === $other->byRef
|
||||
&& $this->sendBy === $other->sendBy
|
||||
&& $this->isVariadic === $other->isVariadic
|
||||
&& Type::equals($this->type, $other->type);
|
||||
}
|
||||
|
@ -189,12 +193,48 @@ class FuncInfo {
|
|||
}
|
||||
|
||||
function parseFunctionLike(string $name, Node\FunctionLike $func, ?string $cond): FuncInfo {
|
||||
$comment = $func->getDocComment();
|
||||
$paramMeta = [];
|
||||
|
||||
if ($comment) {
|
||||
$commentText = substr($comment->getText(), 2, -2);
|
||||
|
||||
foreach (explode("\n", $commentText) as $commentLine) {
|
||||
if (preg_match('/^\*\s*@prefer-ref\s+\$(.+)$/', trim($commentLine), $matches)) {
|
||||
$varName = $matches[1];
|
||||
if (!isset($paramMeta[$varName])) {
|
||||
$paramMeta[$varName] = [];
|
||||
}
|
||||
$paramMeta[$varName]['preferRef'] = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$args = [];
|
||||
$numRequiredArgs = 0;
|
||||
$foundVariadic = false;
|
||||
foreach ($func->getParams() as $i => $param) {
|
||||
$varName = $param->var->name;
|
||||
$preferRef = !empty($paramMeta[$varName]['preferRef']);
|
||||
unset($paramMeta[$varName]);
|
||||
|
||||
if ($preferRef) {
|
||||
$sendBy = ArgInfo::SEND_PREFER_REF;
|
||||
} else if ($param->byRef) {
|
||||
$sendBy = ArgInfo::SEND_BY_REF;
|
||||
} else {
|
||||
$sendBy = ArgInfo::SEND_BY_VAL;
|
||||
}
|
||||
|
||||
if ($foundVariadic) {
|
||||
throw new Exception("Error in function $name: only the last parameter can be variadic");
|
||||
}
|
||||
|
||||
$foundVariadic = $param->variadic;
|
||||
|
||||
$args[] = new ArgInfo(
|
||||
$param->var->name,
|
||||
$param->byRef,
|
||||
$varName,
|
||||
$sendBy,
|
||||
$param->variadic,
|
||||
$param->type ? Type::fromNode($param->type) : null
|
||||
);
|
||||
|
@ -203,6 +243,10 @@ function parseFunctionLike(string $name, Node\FunctionLike $func, ?string $cond)
|
|||
}
|
||||
}
|
||||
|
||||
foreach (array_keys($paramMeta) as $var) {
|
||||
throw new Exception("Found metadata for invalid param $var of function $name");
|
||||
}
|
||||
|
||||
$returnType = $func->getReturnType();
|
||||
$return = new ReturnInfo(
|
||||
$func->returnsByRef(),
|
||||
|
@ -321,19 +365,19 @@ function funcInfoToCode(FuncInfo $funcInfo): string {
|
|||
if ($argInfo->type->isBuiltin) {
|
||||
$code .= sprintf(
|
||||
"\tZEND_%s_TYPE_INFO(%d, %s, %s, %d)\n",
|
||||
$argKind, $argInfo->byRef, $argInfo->name,
|
||||
$argKind, $argInfo->sendBy, $argInfo->name,
|
||||
$argInfo->type->toTypeCode(), $argInfo->type->isNullable
|
||||
);
|
||||
} else {
|
||||
$code .= sprintf(
|
||||
"\tZEND_%s_OBJ_INFO(%d, %s, %s, %d)\n",
|
||||
$argKind, $argInfo->byRef, $argInfo->name,
|
||||
$argKind, $argInfo->sendBy, $argInfo->name,
|
||||
str_replace('\\', '\\\\', $argInfo->type->name), $argInfo->type->isNullable
|
||||
);
|
||||
}
|
||||
} else {
|
||||
$code .= sprintf(
|
||||
"\tZEND_%s_INFO(%d, %s)\n", $argKind, $argInfo->byRef, $argInfo->name);
|
||||
"\tZEND_%s_INFO(%d, %s)\n", $argKind, $argInfo->sendBy, $argInfo->name);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue