From d37d2228353ff152245efde193f1fde0857ecaea Mon Sep 17 00:00:00 2001 From: Nikita Popov <nikita.ppv@gmail.com> Date: Wed, 9 Sep 2020 11:36:38 +0200 Subject: [PATCH] Make array_multisort() signature more variadic The second and third arguments are not always the sort_order and sort_flags -- they can also be in reverse order, or be arrays altogether. Move them into the variadic parameter to avoid awkward error messages. --- ...eflectionParameter_canBePassedByValue.phpt | 10 +--- ext/standard/basic_functions.stub.php | 10 ++-- ext/standard/basic_functions_arginfo.h | 6 +-- .../tests/array/array_multisort_error.phpt | 4 +- .../array/array_multisort_variation2.phpt | 46 ++++++++--------- .../array/array_multisort_variation3.phpt | 50 +++++++++---------- 6 files changed, 56 insertions(+), 70 deletions(-) diff --git a/ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt b/ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt index c5a7b72714..c7f823e423 100644 --- a/ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt +++ b/ext/reflection/tests/ReflectionParameter_canBePassedByValue.phpt @@ -41,15 +41,7 @@ Name: array1 Is passed by reference: yes Can be passed by value: yes -Name: sort_order -Is passed by reference: yes -Can be passed by value: yes - -Name: sort_flags -Is passed by reference: yes -Can be passed by value: yes - -Name: arrays +Name: rest Is passed by reference: yes Can be passed by value: yes diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index e9aa1b0c62..92406e22be 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -222,15 +222,11 @@ function array_udiff_uassoc(array $array, ...$rest): array {} /** * @param array $array1 - * @param int $sort_order - * @param int $sort_flags - * @param array $arrays + * @param array|int $rest * @prefer-ref $array1 - * @prefer-ref $sort_order - * @prefer-ref $sort_flags - * @prefer-ref $arrays + * @prefer-ref $rest */ -function array_multisort(&$array1, $sort_order = SORT_ASC, $sort_flags = SORT_REGULAR, &...$arrays): bool {} +function array_multisort(&$array1, &...$rest): bool {} function array_rand(array $array, int $num_req = 1): int|string|array {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 46204d773b..fe4c07518c 100755 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 56f49d359d2b11383a3f1401d0a3730192c28fc0 */ + * Stub hash: 251fc9f272492ab76c4a1a1dabcd768269cf1bde */ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_set_time_limit, 0, 1, _IS_BOOL, 0) ZEND_ARG_TYPE_INFO(0, seconds, IS_LONG, 0) @@ -313,9 +313,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_array_multisort, 0, 1, _IS_BOOL, 0) ZEND_ARG_INFO(ZEND_SEND_PREFER_REF, array1) - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(ZEND_SEND_PREFER_REF, sort_order, "SORT_ASC") - ZEND_ARG_INFO_WITH_DEFAULT_VALUE(ZEND_SEND_PREFER_REF, sort_flags, "SORT_REGULAR") - ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, arrays) + ZEND_ARG_VARIADIC_INFO(ZEND_SEND_PREFER_REF, rest) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_array_rand, 0, 1, MAY_BE_LONG|MAY_BE_STRING|MAY_BE_ARRAY) diff --git a/ext/standard/tests/array/array_multisort_error.phpt b/ext/standard/tests/array/array_multisort_error.phpt index 6df4216337..4f2d979f71 100644 --- a/ext/standard/tests/array/array_multisort_error.phpt +++ b/ext/standard/tests/array/array_multisort_error.phpt @@ -25,7 +25,7 @@ try { *** Testing array_multisort() : error conditions *** -- Testing array_multisort() function with repeated flags -- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag that has not already been specified +array_multisort(): Argument #3 must be an array or a sort flag that has not already been specified -- Testing array_multisort() function with repeated flags -- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag that has not already been specified +array_multisort(): Argument #3 must be an array or a sort flag that has not already been specified diff --git a/ext/standard/tests/array/array_multisort_variation2.phpt b/ext/standard/tests/array/array_multisort_variation2.phpt index ff19956610..b491b87bfd 100644 --- a/ext/standard/tests/array/array_multisort_variation2.phpt +++ b/ext/standard/tests/array/array_multisort_variation2.phpt @@ -117,25 +117,25 @@ bool(true) bool(true) --int 12345-- -array_multisort(): Argument #2 ($sort_order) must be a valid sort flag +array_multisort(): Argument #2 must be a valid sort flag --int -12345-- -array_multisort(): Argument #2 ($sort_order) must be a valid sort flag +array_multisort(): Argument #2 must be a valid sort flag --float 10.5-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --float -10.5-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --float 12.3456789000e10-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --float -12.3456789000e10-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --float .5-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --empty array-- Array sizes are inconsistent @@ -150,49 +150,49 @@ bool(true) Array sizes are inconsistent --uppercase NULL-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --lowercase null-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --lowercase true-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --lowercase false-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --uppercase TRUE-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --uppercase FALSE-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --empty string DQ-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --empty string SQ-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --string DQ-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --string SQ-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --mixed case string-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --heredoc-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --instance of classWithToString-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --instance of classWithoutToString-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --undefined var-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag --unset var-- -array_multisort(): Argument #2 ($sort_order) must be an array or a sort flag +array_multisort(): Argument #2 must be an array or a sort flag diff --git a/ext/standard/tests/array/array_multisort_variation3.phpt b/ext/standard/tests/array/array_multisort_variation3.phpt index 891a9d9097..71f837acd8 100644 --- a/ext/standard/tests/array/array_multisort_variation3.phpt +++ b/ext/standard/tests/array/array_multisort_variation3.phpt @@ -103,76 +103,76 @@ foreach($inputs as $key =>$value) { *** Testing array_multisort() : usage variation *** --int 0-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag that has not already been specified +array_multisort(): Argument #3 must be an array or a sort flag that has not already been specified --int 1-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag that has not already been specified +array_multisort(): Argument #3 must be an array or a sort flag that has not already been specified --int 12345-- -array_multisort(): Argument #3 ($sort_flags) must be a valid sort flag +array_multisort(): Argument #3 must be a valid sort flag --int -12345-- -array_multisort(): Argument #3 ($sort_flags) must be a valid sort flag +array_multisort(): Argument #3 must be a valid sort flag --float 10.5-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --float -10.5-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --float 12.3456789000e10-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --float -12.3456789000e10-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --float .5-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --uppercase NULL-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --lowercase null-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --lowercase true-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --lowercase false-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --uppercase TRUE-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --uppercase FALSE-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --empty string DQ-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --empty string SQ-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --string DQ-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --string SQ-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --mixed case string-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --heredoc-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --instance of classWithToString-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --instance of classWithoutToString-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --undefined var-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag --unset var-- -array_multisort(): Argument #3 ($sort_flags) must be an array or a sort flag +array_multisort(): Argument #3 must be an array or a sort flag -- 2.40.0