summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortheodorejb <theodorejb@outlook.com>2019-10-07 11:13:16 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-10-07 11:13:16 +0200
commitef9736e06274c23808b8dfc19f97b49e1e0ad8b6 (patch)
tree85c1490204cdca6fdc2b07b3c097bb7a2e379505
parentfdc133063d30385866b0eb84e8592aad2f94834e (diff)
downloadphp-git-ef9736e06274c23808b8dfc19f97b49e1e0ad8b6.tar.gz
Convert string function arginfo to PHP stubs
-rwxr-xr-xext/standard/basic_functions.c354
-rwxr-xr-xext/standard/basic_functions.stub.php201
-rwxr-xr-xext/standard/basic_functions_arginfo.h289
-rw-r--r--ext/standard/string.c6
4 files changed, 493 insertions, 357 deletions
diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c
index 1afa27f266..9c4c22f03b 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 ce5020a253..1a1681ae0a 100755
--- a/ext/standard/basic_functions.stub.php
+++ b/ext/standard/basic_functions.stub.php
@@ -395,3 +395,204 @@ 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 = 0, int $len = UNKNOWN) {}
+
+/** @return int|false */
+function strcspn(string $str, string $mask, int $start = 0, 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 = UNKNOWN): string {}
+
+/**
+ * @param string $str Optional - defaults to previous string
+ * @param string $token
+ * @return string|false
+ */
+function strtok(string $str, string $token = UNKNOWN) {}
+
+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 $before_needle = false) {}
+
+/** @return string|false */
+function strstr(string $haystack, string $needle, bool $before_needle = 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
+ * @return string|false
+ */
+function strtr(string $str, $from, string $to = UNKNOWN) {}
+
+function strrev(string $str): string {}
+
+/** @param float $percent */
+function similar_text(string $str1, string $str2, &$percent = null): 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
+ * @param int $replace_count
+ * @return string|array
+ */
+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, &$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, ...$rest) {}
+
+/** @param array $result */
+function parse_str(string $encoded_string, &$result): void {}
+
+function str_getcsv(string $string, string $delimiter = ',', string $enclosure = '"', string $escape = '\\'): array {}
+
+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 {}
+
+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|null */
+function sscanf(string $str, string $format, &...$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_insensitivity = 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 83a77ba9d1..434c4a160d 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, 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, 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
+
+#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, before_needle, _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_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)
+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_INFO(1, percent)
+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_INFO(1, replace_count)
+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_INFO(0, rest)
+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_INFO(1, result)
+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_INFO(1, vars)
+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_insensitivity, _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 81f1cebb52..948a1ffce1 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)
{
@@ -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)
{
@@ -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)
{