From b779752387d9b73c1ec5f2b96bd0483340e36a71 Mon Sep 17 00:00:00 2001 From: theodorejb Date: Wed, 2 Oct 2019 11:38:15 -0600 Subject: [PATCH 1/3] Convert string function arginfo to PHP stubs --- ext/standard/basic_functions.c | 354 ------------------------- ext/standard/basic_functions.stub.php | 193 ++++++++++++++ ext/standard/basic_functions_arginfo.h | 289 ++++++++++++++++++++ ext/standard/string.c | 2 +- 4 files changed, 483 insertions(+), 355 deletions(-) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index ff12fceb73f29..8b0e3a214c351 100755 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -1467,360 +1467,6 @@ ZEND_BEGIN_ARG_INFO(arginfo_stream_socket_shutdown, 0) ZEND_END_ARG_INFO() #endif /* }}} */ -/* {{{ string.c */ -ZEND_BEGIN_ARG_INFO(arginfo_bin2hex, 0) - ZEND_ARG_INFO(0, data) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_hex2bin, 0) - ZEND_ARG_INFO(0, data) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strspn, 0, 0, 2) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, mask) - ZEND_ARG_INFO(0, start) - ZEND_ARG_INFO(0, len) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strcspn, 0, 0, 2) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, mask) - ZEND_ARG_INFO(0, start) - ZEND_ARG_INFO(0, len) -ZEND_END_ARG_INFO() - -#if HAVE_NL_LANGINFO -ZEND_BEGIN_ARG_INFO(arginfo_nl_langinfo, 0) - ZEND_ARG_INFO(0, item) -ZEND_END_ARG_INFO() -#endif - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_strcoll, IS_LONG, 0) - ZEND_ARG_INFO(0, str1) - ZEND_ARG_INFO(0, str2) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trim, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, character_mask) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_rtrim, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, character_mask) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ltrim, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, character_mask) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_wordwrap, 0, 0, 1) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, width) - ZEND_ARG_INFO(0, break) - ZEND_ARG_INFO(0, cut) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_explode, 0, 0, 2) - ZEND_ARG_INFO(0, separator) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, limit) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_implode, 0) - ZEND_ARG_INFO(0, glue) - ZEND_ARG_INFO(0, pieces) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strtok, 0, 0, 1) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, token) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_strtoupper, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_strtolower, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_basename, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, path) - ZEND_ARG_INFO(0, suffix) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_dirname, 0, 0, 1) - ZEND_ARG_INFO(0, path) - ZEND_ARG_INFO(0, levels) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_pathinfo, 0, 0, 1) - ZEND_ARG_INFO(0, path) - ZEND_ARG_INFO(0, options) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_stristr, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) - ZEND_ARG_INFO(0, part) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strstr, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) - ZEND_ARG_INFO(0, part) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strpos, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) - ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_stripos, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) - ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strrpos, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) - ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strripos, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) - ZEND_ARG_INFO(0, offset) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_strrchr, 0) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_chunk_split, 0, 0, 1) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, chunklen) - ZEND_ARG_INFO(0, ending) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_substr, 0, 0, 2) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, start) - ZEND_ARG_INFO(0, length) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_replace, 0, 0, 3) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, replace) - ZEND_ARG_INFO(0, start) - ZEND_ARG_INFO(0, length) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_quotemeta, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_ord, IS_LONG, 0) - ZEND_ARG_INFO(0, character) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_chr, IS_STRING, 0) - ZEND_ARG_INFO(0, codepoint) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_ucfirst, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_lcfirst, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ucwords, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, delimiters) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strtr, 0, 0, 2) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, from) - ZEND_ARG_INFO(0, to) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_strrev, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_similar_text, 0, 2, IS_LONG, 0) - ZEND_ARG_INFO(0, str1) - ZEND_ARG_INFO(0, str2) - ZEND_ARG_INFO(1, percent) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_addcslashes, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, charlist) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_addslashes, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_stripcslashes, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_stripslashes, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_str_replace, 0, 0, 3) - ZEND_ARG_INFO(0, search) - ZEND_ARG_INFO(0, replace) - ZEND_ARG_INFO(0, subject) - ZEND_ARG_INFO(1, replace_count) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_str_ireplace, 0, 0, 3) - ZEND_ARG_INFO(0, search) - ZEND_ARG_INFO(0, replace) - ZEND_ARG_INFO(0, subject) - ZEND_ARG_INFO(1, replace_count) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hebrev, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, max_chars_per_line) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hebrevc, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, max_chars_per_line) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_nl2br, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, is_xhtml) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strip_tags, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, allowable_tags) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_setlocale, 0, 0, 2) - ZEND_ARG_INFO(0, category) - ZEND_ARG_VARIADIC_INFO(0, locales) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_parse_str, 0, 2, IS_VOID, 0) - ZEND_ARG_INFO(0, encoded_string) - ZEND_ARG_INFO(1, result) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_str_getcsv, 0, 0, 1) - ZEND_ARG_INFO(0, string) - ZEND_ARG_INFO(0, delimiter) - ZEND_ARG_INFO(0, enclosure) - ZEND_ARG_INFO(0, escape) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_str_repeat, 0) - ZEND_ARG_INFO(0, input) - ZEND_ARG_INFO(0, mult) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_count_chars, 0, 0, 1) - ZEND_ARG_INFO(0, input) - ZEND_ARG_INFO(0, mode) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_strnatcmp, IS_LONG, 0) - ZEND_ARG_INFO(0, s1) - ZEND_ARG_INFO(0, s2) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO(arginfo_localeconv, 0) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_strnatcasecmp, IS_LONG, 0) - ZEND_ARG_INFO(0, s1) - ZEND_ARG_INFO(0, s2) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_count, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, needle) - ZEND_ARG_INFO(0, offset) - ZEND_ARG_INFO(0, length) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_str_pad, 0, 0, 2) - ZEND_ARG_INFO(0, input) - ZEND_ARG_INFO(0, pad_length) - ZEND_ARG_INFO(0, pad_string) - ZEND_ARG_INFO(0, pad_type) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_sscanf, 0, 0, 2) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, format) - ZEND_ARG_VARIADIC_INFO(1, vars) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_str_rot13, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(arginfo_str_shuffle, IS_STRING, 0) - ZEND_ARG_INFO(0, str) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_str_word_count, 0, 0, 1) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, charlist) -ZEND_END_ARG_INFO() - -#ifdef HAVE_STRFMON -ZEND_BEGIN_ARG_INFO(arginfo_money_format, 0) - ZEND_ARG_INFO(0, format) - ZEND_ARG_INFO(0, value) -ZEND_END_ARG_INFO() -#endif - -ZEND_BEGIN_ARG_INFO_EX(arginfo_str_split, 0, 0, 1) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, split_length) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_strpbrk, 0, 0, 2) - ZEND_ARG_INFO(0, haystack) - ZEND_ARG_INFO(0, char_list) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_compare, 0, 0, 3) - ZEND_ARG_INFO(0, main_str) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, offset) - ZEND_ARG_INFO(0, length) - ZEND_ARG_INFO(0, case_sensitivity) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_utf8_encode, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, data) -ZEND_END_ARG_INFO() - -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_utf8_decode, 0, 1, IS_STRING, 0) - ZEND_ARG_INFO(0, data) -ZEND_END_ARG_INFO() -/* }}} */ /* {{{ type.c */ ZEND_BEGIN_ARG_INFO(arginfo_gettype, 0) ZEND_ARG_INFO(0, var) diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index ce5020a253770..ca49eeffeba33 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -395,3 +395,196 @@ function assert($assertion, $description = null): bool {} /** @return int|string|bool|null */ function assert_options(int $what, $value = UNKNOWN) {} + +/* string.c */ + +function bin2hex(string $data): string {} + +/** @return string|false */ +function hex2bin(string $data) {} + +/** @return int|false */ +function strspn(string $str, string $mask, int $start = UNKNOWN, int $len = UNKNOWN) {} + +/** @return int|false */ +function strcspn(string $str, string $mask, int $start = UNKNOWN, int $len = UNKNOWN) {} + +#if HAVE_NL_LANGINFO +/** @return string|false */ +function nl_langinfo(int $item) {} +#endif + +function strcoll(string $str1, string $str2): int {} + +function trim(string $str, string $character_mask = " \n\r\t\v\0"): string {} + +function rtrim(string $str, string $character_mask = " \n\r\t\v\0"): string {} + +function ltrim(string $str, string $character_mask = " \n\r\t\v\0"): string {} + +function wordwrap(string $str, int $width = 75, string $break = "\n", bool $cut = false): string {} + +function explode(string $separator, string $str, int $limit = PHP_INT_MAX): array {} + +/** + * @param string $glue Optional - defaults to empty string + * @param array $pieces + */ +function implode($glue, $pieces): string {} + +/** + * @param string $str Optional - defaults to previous string + * @param string $token + * @return string|false + */ +function strtok($str, $token) {} + +function strtoupper(string $str): string {} + +function strtolower(string $str): string {} + +function basename(string $path, string $suffix = ""): string {} + +function dirname(string $path, int $levels = 1): string {} + +/** @return array|string */ +function pathinfo(string $path, int $options = UNKNOWN) {} + +/** @return string|false */ +function stristr(string $haystack, string $needle, bool $part = false) {} + +/** @return string|false */ +function strstr(string $haystack, string $needle, bool $part = false) {} + +/** @return int|false */ +function strpos(string $haystack, string $needle, int $offset = 0) {} + +/** @return int|false */ +function stripos(string $haystack, string $needle, int $offset = 0) {} + +/** @return int|false */ +function strrpos(string $haystack, string $needle, int $offset = 0) {} + +/** @return int|false */ +function strripos(string $haystack, string $needle, int $offset = 0) {} + +/** @return string|false */ +function strrchr(string $haystack, string $needle) {} + +function chunk_split(string $str, int $chunklen = 76, string $ending = "\r\n"): string {} + +/** @return string|false */ +function substr(string $str, int $start, int $length = UNKNOWN) {} + +/** + * @param mixed $str + * @param mixed $replace + * @param mixed $start + * @param mixed $length + * @return string|array|false + */ +function substr_replace($str, $replace, $start, $length = UNKNOWN) {} + +function quotemeta(string $str): string {} + +function ord(string $character): int {} + +function chr(int $codepoint): string {} + +function ucfirst(string $str): string {} + +function lcfirst(string $str): string {} + +function ucwords(string $str, string $delimiters = " \t\r\n\f\v"): string {} + +/** @param string|array $from */ +function strtr(string $str, $from, string $to = UNKNOWN): string {} + +function strrev(string $str): string {} + +function similar_text(string $str1, string $str2, float &$percent = UNKNOWN): int {} + +function addcslashes(string $str, string $charlist): string {} + +function addslashes(string $str): string {} + +function stripcslashes(string $str): string {} + +function stripslashes(string $str): string {} + +/** + * @param string|array $search + * @param string|array $replace + * @param string|array $subject + * @return string|array + */ +function str_replace($search, $replace, $subject, int &$replace_count = UNKNOWN) {} + +/** + * @param string|array $search + * @param string|array $replace + * @param string|array $subject + * @return string|array + */ +function str_ireplace($search, $replace, $subject, int &$replace_count = UNKNOWN) {} + +function hebrev(string $str, int $max_chars_per_line = 0): string {} + +function hebrevc(string $str, int $max_chars_per_line = 0): string {} + +function nl2br(string $str, bool $is_xhtml = true): string {} + +/** @param mixed $allowable_tags */ +function strip_tags(string $str, $allowable_tags = UNKNOWN): string {} + +/** + * @param string|array $locales + * @return string|false + */ +function setlocale(int $category, $locales, string ...$rest) {} + +function parse_str(string $encoded_string, array &$result): void {} + +function str_getcsv(string $string, string $delimiter = ',', string $enclosure = '"', string $escape = '\\'): array {} + +function str_repeat(string $input, int $mult): string {} + +function count_chars(string $input, int $mode = 0) {} + +function strnatcmp(string $s1, string $s2): int {} + +function localeconv(): array {} + +function strnatcasecmp(string $s1, string $s2): int {} + +/** @return int|false */ +function substr_count(string $haystack, string $needle, int $offset = 0, int $length = UNKNOWN) {} + +function str_pad(string $input, int $pad_length, string $pad_string = " ", int $pad_type = STR_PAD_RIGHT): string {} + +/** @return array|int */ +function sscanf(string $str, string $format, string &...$vars) {} + +function str_rot13(string $str): string {} + +function str_shuffle(string $str): string {} + +/** @return array|int */ +function str_word_count(string $str, int $format = 0, string $charlist = UNKNOWN) {} + +#ifdef HAVE_STRFMON +/** @return string|false */ +function money_format(string $format, float $value) {} +#endif + +function str_split(string $str, int $split_length = 1): array {} + +/** @return string|false */ +function strpbrk(string $haystack, string $char_list) {} + +/** @return int|false */ +function substr_compare(string $main_str, string $str, int $offset, int $length = UNKNOWN, bool $case_sensitivity = false) {} + +function utf8_encode(string $data): string {} + +function utf8_decode(string $data): string {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 83a77ba9d1b8a..940f84595772d 100755 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -516,3 +516,292 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_assert_options, 0, 0, 1) ZEND_ARG_TYPE_INFO(0, what, IS_LONG, 0) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_bin2hex, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_hex2bin, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, data, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_strspn, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, mask, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, start, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, len, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_strcspn arginfo_strspn + +#if HAVE_NL_LANGINFO +ZEND_BEGIN_ARG_INFO_EX(arginfo_nl_langinfo, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, item, IS_LONG, 0) +ZEND_END_ARG_INFO() +#endif + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strcoll, 0, 2, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_trim, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, character_mask, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_rtrim arginfo_trim + +#define arginfo_ltrim arginfo_trim + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_wordwrap, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, width, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, break, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, cut, _IS_BOOL, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_explode, 0, 2, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, separator, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_implode, 0, 2, IS_STRING, 0) + ZEND_ARG_INFO(0, glue) + ZEND_ARG_INFO(0, pieces) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_strtok, 0, 0, 2) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, token) +ZEND_END_ARG_INFO() + +#define arginfo_strtoupper arginfo_base64_encode + +#define arginfo_strtolower arginfo_base64_encode + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_basename, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, suffix, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_dirname, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, levels, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_pathinfo, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, path, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, options, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_stristr, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, part, _IS_BOOL, 0) +ZEND_END_ARG_INFO() + +#define arginfo_strstr arginfo_stristr + +ZEND_BEGIN_ARG_INFO_EX(arginfo_strpos, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_stripos arginfo_strpos + +#define arginfo_strrpos arginfo_strpos + +#define arginfo_strripos arginfo_strpos + +ZEND_BEGIN_ARG_INFO_EX(arginfo_strrchr, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chunk_split, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, chunklen, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, ending, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_substr, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, start, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_replace, 0, 0, 3) + ZEND_ARG_INFO(0, str) + ZEND_ARG_INFO(0, replace) + ZEND_ARG_INFO(0, start) + ZEND_ARG_INFO(0, length) +ZEND_END_ARG_INFO() + +#define arginfo_quotemeta arginfo_base64_encode + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ord, 0, 1, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, character, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_chr, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, codepoint, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_ucfirst arginfo_base64_encode + +#define arginfo_lcfirst arginfo_base64_encode + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ucwords, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, delimiters, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strtr, 0, 2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_INFO(0, from) + ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_strrev arginfo_base64_encode + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_similar_text, 0, 2, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(1, percent, IS_DOUBLE, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_addcslashes, 0, 2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, charlist, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_addslashes arginfo_base64_encode + +#define arginfo_stripcslashes arginfo_base64_encode + +#define arginfo_stripslashes arginfo_base64_encode + +ZEND_BEGIN_ARG_INFO_EX(arginfo_str_replace, 0, 0, 3) + ZEND_ARG_INFO(0, search) + ZEND_ARG_INFO(0, replace) + ZEND_ARG_INFO(0, subject) + ZEND_ARG_TYPE_INFO(1, replace_count, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_str_ireplace arginfo_str_replace + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_hebrev, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, max_chars_per_line, IS_LONG, 0) +ZEND_END_ARG_INFO() + +#define arginfo_hebrevc arginfo_hebrev + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_nl2br, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, is_xhtml, _IS_BOOL, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strip_tags, 0, 1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_INFO(0, allowable_tags) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_setlocale, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, category, IS_LONG, 0) + ZEND_ARG_INFO(0, locales) + ZEND_ARG_VARIADIC_TYPE_INFO(0, rest, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_parse_str, 0, 2, IS_VOID, 0) + ZEND_ARG_TYPE_INFO(0, encoded_string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(1, result, IS_ARRAY, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_getcsv, 0, 1, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, delimiter, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, enclosure, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, escape, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_repeat, 0, 2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, mult, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_count_chars, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, mode, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strnatcmp, 0, 2, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, s1, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, s2, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_localeconv arginfo_ob_list_handlers + +#define arginfo_strnatcasecmp arginfo_strnatcmp + +ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_count, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_pad, 0, 2, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, input, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, pad_length, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, pad_string, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, pad_type, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_sscanf, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0) + ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#define arginfo_str_rot13 arginfo_base64_encode + +#define arginfo_str_shuffle arginfo_base64_encode + +ZEND_BEGIN_ARG_INFO_EX(arginfo_str_word_count, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, format, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, charlist, IS_STRING, 0) +ZEND_END_ARG_INFO() + +#if defined(HAVE_STRFMON) +ZEND_BEGIN_ARG_INFO_EX(arginfo_money_format, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, value, IS_DOUBLE, 0) +ZEND_END_ARG_INFO() +#endif + +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_split, 0, 1, IS_ARRAY, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, split_length, IS_LONG, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_strpbrk, 0, 0, 2) + ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, char_list, IS_STRING, 0) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_compare, 0, 0, 3) + ZEND_ARG_TYPE_INFO(0, main_str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) + ZEND_ARG_TYPE_INFO(0, case_sensitivity, _IS_BOOL, 0) +ZEND_END_ARG_INFO() + +#define arginfo_utf8_encode arginfo_bin2hex + +#define arginfo_utf8_decode arginfo_bin2hex diff --git a/ext/standard/string.c b/ext/standard/string.c index 047f5454d635d..f963a5fe37e2c 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -4711,7 +4711,7 @@ PHP_FUNCTION(strip_tags) } /* }}} */ -/* {{{ proto string|false setlocale(mixed category, string locale [, string ...]) +/* {{{ proto string|false setlocale(int category, string locale [, string ...]) Set locale information */ PHP_FUNCTION(setlocale) { From 692caa48860bdab999804f5319500dffc32d4c53 Mon Sep 17 00:00:00 2001 From: theodorejb Date: Wed, 2 Oct 2019 14:28:00 -0600 Subject: [PATCH 2/3] Remove by-ref param types to fix failing tests --- ext/standard/basic_functions.stub.php | 9 ++++++--- ext/standard/basic_functions_arginfo.h | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index ca49eeffeba33..5a86f234d0364 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -516,17 +516,19 @@ function stripslashes(string $str): string {} * @param string|array $search * @param string|array $replace * @param string|array $subject + * @param int $replace_count * @return string|array */ -function str_replace($search, $replace, $subject, int &$replace_count = UNKNOWN) {} +function str_replace($search, $replace, $subject, &$replace_count = UNKNOWN) {} /** * @param string|array $search * @param string|array $replace * @param string|array $subject + * @param int $replace_count * @return string|array */ -function str_ireplace($search, $replace, $subject, int &$replace_count = UNKNOWN) {} +function str_ireplace($search, $replace, $subject, &$replace_count = UNKNOWN) {} function hebrev(string $str, int $max_chars_per_line = 0): string {} @@ -543,7 +545,8 @@ function strip_tags(string $str, $allowable_tags = UNKNOWN): string {} */ function setlocale(int $category, $locales, string ...$rest) {} -function parse_str(string $encoded_string, array &$result): void {} +/** @param array $result */ +function parse_str(string $encoded_string, &$result): void {} function str_getcsv(string $string, string $delimiter = ',', string $enclosure = '"', string $escape = '\\'): array {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index 940f84595772d..d5abee2dc0342 100755 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -688,7 +688,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_str_replace, 0, 0, 3) ZEND_ARG_INFO(0, search) ZEND_ARG_INFO(0, replace) ZEND_ARG_INFO(0, subject) - ZEND_ARG_TYPE_INFO(1, replace_count, IS_LONG, 0) + ZEND_ARG_INFO(1, replace_count) ZEND_END_ARG_INFO() #define arginfo_str_ireplace arginfo_str_replace @@ -718,7 +718,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_parse_str, 0, 2, IS_VOID, 0) ZEND_ARG_TYPE_INFO(0, encoded_string, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(1, result, IS_ARRAY, 0) + ZEND_ARG_INFO(1, result) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_str_getcsv, 0, 1, IS_ARRAY, 0) From b6685b2e9986e4ededb88c514bc6a6b2651e3eba Mon Sep 17 00:00:00 2001 From: theodorejb Date: Fri, 4 Oct 2019 10:38:26 -0600 Subject: [PATCH 3/3] Address review feedback --- ext/standard/basic_functions.stub.php | 31 +++++++++++++++----------- ext/standard/basic_functions_arginfo.h | 20 ++++++++--------- ext/standard/string.c | 10 ++++----- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/ext/standard/basic_functions.stub.php b/ext/standard/basic_functions.stub.php index 5a86f234d0364..1a1681ae0aae7 100755 --- a/ext/standard/basic_functions.stub.php +++ b/ext/standard/basic_functions.stub.php @@ -404,10 +404,10 @@ function bin2hex(string $data): string {} function hex2bin(string $data) {} /** @return int|false */ -function strspn(string $str, string $mask, int $start = UNKNOWN, int $len = UNKNOWN) {} +function strspn(string $str, string $mask, int $start = 0, int $len = UNKNOWN) {} /** @return int|false */ -function strcspn(string $str, string $mask, int $start = UNKNOWN, int $len = UNKNOWN) {} +function strcspn(string $str, string $mask, int $start = 0, int $len = UNKNOWN) {} #if HAVE_NL_LANGINFO /** @return string|false */ @@ -430,14 +430,14 @@ function explode(string $separator, string $str, int $limit = PHP_INT_MAX): arra * @param string $glue Optional - defaults to empty string * @param array $pieces */ -function implode($glue, $pieces): string {} +function implode($glue, $pieces = UNKNOWN): string {} /** * @param string $str Optional - defaults to previous string * @param string $token * @return string|false */ -function strtok($str, $token) {} +function strtok(string $str, string $token = UNKNOWN) {} function strtoupper(string $str): string {} @@ -451,10 +451,10 @@ function dirname(string $path, int $levels = 1): string {} function pathinfo(string $path, int $options = UNKNOWN) {} /** @return string|false */ -function stristr(string $haystack, string $needle, bool $part = false) {} +function stristr(string $haystack, string $needle, bool $before_needle = false) {} /** @return string|false */ -function strstr(string $haystack, string $needle, bool $part = false) {} +function strstr(string $haystack, string $needle, bool $before_needle = false) {} /** @return int|false */ function strpos(string $haystack, string $needle, int $offset = 0) {} @@ -497,12 +497,16 @@ function lcfirst(string $str): string {} function ucwords(string $str, string $delimiters = " \t\r\n\f\v"): string {} -/** @param string|array $from */ -function strtr(string $str, $from, string $to = UNKNOWN): string {} +/** + * @param string|array $from + * @return string|false + */ +function strtr(string $str, $from, string $to = UNKNOWN) {} function strrev(string $str): string {} -function similar_text(string $str1, string $str2, float &$percent = UNKNOWN): int {} +/** @param float $percent */ +function similar_text(string $str1, string $str2, &$percent = null): int {} function addcslashes(string $str, string $charlist): string {} @@ -543,7 +547,7 @@ function strip_tags(string $str, $allowable_tags = UNKNOWN): string {} * @param string|array $locales * @return string|false */ -function setlocale(int $category, $locales, string ...$rest) {} +function setlocale(int $category, $locales, ...$rest) {} /** @param array $result */ function parse_str(string $encoded_string, &$result): void {} @@ -552,6 +556,7 @@ function str_getcsv(string $string, string $delimiter = ',', string $enclosure = function str_repeat(string $input, int $mult): string {} +/** @return array|string */ function count_chars(string $input, int $mode = 0) {} function strnatcmp(string $s1, string $s2): int {} @@ -565,8 +570,8 @@ function substr_count(string $haystack, string $needle, int $offset = 0, int $le function str_pad(string $input, int $pad_length, string $pad_string = " ", int $pad_type = STR_PAD_RIGHT): string {} -/** @return array|int */ -function sscanf(string $str, string $format, string &...$vars) {} +/** @return array|int|null */ +function sscanf(string $str, string $format, &...$vars) {} function str_rot13(string $str): string {} @@ -586,7 +591,7 @@ function str_split(string $str, int $split_length = 1): array {} function strpbrk(string $haystack, string $char_list) {} /** @return int|false */ -function substr_compare(string $main_str, string $str, int $offset, int $length = UNKNOWN, bool $case_sensitivity = false) {} +function substr_compare(string $main_str, string $str, int $offset, int $length = UNKNOWN, bool $case_insensitivity = false) {} function utf8_encode(string $data): string {} diff --git a/ext/standard/basic_functions_arginfo.h b/ext/standard/basic_functions_arginfo.h index d5abee2dc0342..434c4a160d9d9 100755 --- a/ext/standard/basic_functions_arginfo.h +++ b/ext/standard/basic_functions_arginfo.h @@ -567,14 +567,14 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_explode, 0, 2, IS_ARRAY, 0) ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_implode, 0, 2, IS_STRING, 0) +ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_implode, 0, 1, IS_STRING, 0) ZEND_ARG_INFO(0, glue) ZEND_ARG_INFO(0, pieces) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_INFO_EX(arginfo_strtok, 0, 0, 2) - ZEND_ARG_INFO(0, str) - ZEND_ARG_INFO(0, token) +ZEND_BEGIN_ARG_INFO_EX(arginfo_strtok, 0, 0, 1) + ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) + ZEND_ARG_TYPE_INFO(0, token, IS_STRING, 0) ZEND_END_ARG_INFO() #define arginfo_strtoupper arginfo_base64_encode @@ -599,7 +599,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_stristr, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, haystack, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, needle, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(0, part, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, before_needle, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_strstr arginfo_stristr @@ -659,7 +659,7 @@ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_ucwords, 0, 1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, delimiters, IS_STRING, 0) ZEND_END_ARG_INFO() -ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_strtr, 0, 2, IS_STRING, 0) +ZEND_BEGIN_ARG_INFO_EX(arginfo_strtr, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) ZEND_ARG_INFO(0, from) ZEND_ARG_TYPE_INFO(0, to, IS_STRING, 0) @@ -670,7 +670,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_similar_text, 0, 2, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, str1, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, str2, IS_STRING, 0) - ZEND_ARG_TYPE_INFO(1, percent, IS_DOUBLE, 0) + ZEND_ARG_INFO(1, percent) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_addcslashes, 0, 2, IS_STRING, 0) @@ -713,7 +713,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_setlocale, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, category, IS_LONG, 0) ZEND_ARG_INFO(0, locales) - ZEND_ARG_VARIADIC_TYPE_INFO(0, rest, IS_STRING, 0) + ZEND_ARG_VARIADIC_INFO(0, rest) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_parse_str, 0, 2, IS_VOID, 0) @@ -764,7 +764,7 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_sscanf, 0, 0, 2) ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, format, IS_STRING, 0) - ZEND_ARG_VARIADIC_TYPE_INFO(1, vars, IS_STRING, 0) + ZEND_ARG_VARIADIC_INFO(1, vars) ZEND_END_ARG_INFO() #define arginfo_str_rot13 arginfo_base64_encode @@ -799,7 +799,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_substr_compare, 0, 0, 3) ZEND_ARG_TYPE_INFO(0, str, IS_STRING, 0) ZEND_ARG_TYPE_INFO(0, offset, IS_LONG, 0) ZEND_ARG_TYPE_INFO(0, length, IS_LONG, 0) - ZEND_ARG_TYPE_INFO(0, case_sensitivity, _IS_BOOL, 0) + ZEND_ARG_TYPE_INFO(0, case_insensitivity, _IS_BOOL, 0) ZEND_END_ARG_INFO() #define arginfo_utf8_encode arginfo_bin2hex diff --git a/ext/standard/string.c b/ext/standard/string.c index f963a5fe37e2c..817126b1a61fd 100644 --- a/ext/standard/string.c +++ b/ext/standard/string.c @@ -3250,7 +3250,7 @@ PHPAPI zend_string *php_str_to_str(const char *haystack, size_t length, const ch } /* }}} */ -/* {{{ proto string strtr(string str, string from[, string to]) +/* {{{ proto string|false strtr(string str, string from[, string to]) Translates characters in str using given translation tables */ PHP_FUNCTION(strtr) { @@ -5359,7 +5359,7 @@ PHP_FUNCTION(str_repeat) } /* }}} */ -/* {{{ proto array|string|false count_chars(string input [, int mode]) +/* {{{ proto array|string count_chars(string input [, int mode]) Returns info about what characters are used in input */ PHP_FUNCTION(count_chars) { @@ -5379,8 +5379,8 @@ PHP_FUNCTION(count_chars) ZEND_PARSE_PARAMETERS_END(); if (mymode < 0 || mymode > 4) { - php_error_docref(NULL, E_WARNING, "Unknown mode"); - RETURN_FALSE; + zend_value_error("Unknown mode"); + return; } buf = (const unsigned char *) ZSTR_VAL(input); @@ -5694,7 +5694,7 @@ PHP_FUNCTION(str_pad) } /* }}} */ -/* {{{ proto mixed sscanf(string str, string format [, string ...]) +/* {{{ proto array|int|null sscanf(string str, string format [, string ...]) Implements an ANSI C compatible sscanf */ PHP_FUNCTION(sscanf) {