diff --git a/dictionaries/CallMap.php b/dictionaries/CallMap.php index f8f3a994ca8..164eaa771fb 100644 --- a/dictionaries/CallMap.php +++ b/dictionaries/CallMap.php @@ -364,9 +364,9 @@ 'array_column' => ['array', 'array'=>'array', 'column_key'=>'mixed', 'index_key='=>'mixed'], 'array_combine' => ['associative-array', 'keys'=>'string[]|int[]', 'values'=>'array'], 'array_count_values' => ['associative-array', 'array'=>'array'], -'array_diff' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], -'array_diff_assoc' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], -'array_diff_key' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], +'array_diff' => ['associative-array', 'array'=>'array', '...arrays='=>'array'], +'array_diff_assoc' => ['associative-array', 'array'=>'array', '...arrays='=>'array'], +'array_diff_key' => ['associative-array', 'array'=>'array', '...arrays='=>'array'], 'array_diff_uassoc' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'data_comp_func'=>'callable(mixed,mixed):int'], 'array_diff_uassoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest='=>'array|callable(mixed,mixed):int'], 'array_diff_ukey' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'key_comp_func'=>'callable(mixed,mixed):int'], @@ -375,36 +375,36 @@ 'array_fill_keys' => ['array', 'keys'=>'array', 'value'=>'mixed'], 'array_filter' => ['associative-array', 'array'=>'array', 'callback='=>'callable(mixed,mixed=):scalar', 'mode='=>'int'], 'array_flip' => ['associative-array|associative-array', 'array'=>'array'], -'array_intersect' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], -'array_intersect_assoc' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], -'array_intersect_key' => ['associative-array', 'array'=>'array', 'arrays'=>'array', '...args='=>'array'], +'array_intersect' => ['associative-array', 'array'=>'array', '...arrays='=>'array'], +'array_intersect_assoc' => ['associative-array', 'array'=>'array', '...arrays='=>'array'], +'array_intersect_key' => ['associative-array', 'array'=>'array', '...arrays='=>'array'], 'array_intersect_uassoc' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'key_compare_func'=>'callable(mixed,mixed):int'], 'array_intersect_uassoc\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest'=>'array|callable(mixed,mixed):int'], 'array_intersect_ukey' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'key_compare_func'=>'callable(mixed,mixed):int'], 'array_intersect_ukey\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest'=>'array|callable(mixed,mixed):int'], 'array_is_list' => ['bool', 'array'=>'array'], -'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array|ArrayObject'], +'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array'], 'array_key_first' => ['int|string|null', 'array'=>'array'], 'array_key_last' => ['int|string|null', 'array'=>'array'], 'array_keys' => ['list', 'array'=>'array', 'filter_value='=>'mixed', 'strict='=>'bool'], 'array_map' => ['array', 'callback'=>'?callable', 'array'=>'array', '...arrays='=>'array'], -'array_merge' => ['array', 'arrays'=>'array', '...args='=>'array'], -'array_merge_recursive' => ['array', 'arrays'=>'array', '...args='=>'array'], -'array_multisort' => ['bool', '&rw_array'=>'array', 'rest='=>'array|int', 'array1_sort_flags='=>'array|int', '...args='=>'array|int'], +'array_merge' => ['array', '...arrays='=>'array'], +'array_merge_recursive' => ['array', '...arrays='=>'array'], +'array_multisort' => ['bool', '&rw_array'=>'array', 'array1_sort_order='=>'array|int', 'array1_sort_flags='=>'array|int', '...rest='=>'array|int'], 'array_pad' => ['array', 'array'=>'array', 'length'=>'int', 'value'=>'mixed'], 'array_pop' => ['mixed', '&rw_array'=>'array'], 'array_product' => ['int|float', 'array'=>'array'], -'array_push' => ['int', '&rw_array'=>'array', 'values'=>'mixed', '...vars='=>'mixed'], +'array_push' => ['int', '&rw_array'=>'array', '...values='=>'mixed'], 'array_rand' => ['int|string|array|array', 'array'=>'non-empty-array', 'num'=>'int'], 'array_rand\'1' => ['int|string', 'array'=>'array'], 'array_reduce' => ['mixed', 'array'=>'array', 'callback'=>'callable(mixed,mixed):mixed', 'initial='=>'mixed'], -'array_replace' => ['array', 'array'=>'array', 'replacements'=>'array', '...args='=>'array'], -'array_replace_recursive' => ['array', 'array'=>'array', 'replacements'=>'array', '...args='=>'array'], +'array_replace' => ['array', 'array'=>'array', '...replacements='=>'array'], +'array_replace_recursive' => ['array', 'array'=>'array', '...replacements='=>'array'], 'array_reverse' => ['array', 'array'=>'array', 'preserve_keys='=>'bool'], 'array_search' => ['int|string|false', 'needle'=>'mixed', 'haystack'=>'array', 'strict='=>'bool'], 'array_shift' => ['mixed|null', '&rw_array'=>'array'], 'array_slice' => ['array', 'array'=>'array', 'offset'=>'int', 'length='=>'?int', 'preserve_keys='=>'bool'], -'array_splice' => ['array', '&rw_array'=>'array', 'offset'=>'int', 'length='=>'int', 'replacement='=>'array|string'], +'array_splice' => ['array', '&rw_array'=>'array', 'offset'=>'int', 'length='=>'int|null', 'replacement='=>'mixed'], 'array_sum' => ['int|float', 'array'=>'array'], 'array_udiff' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'data_comp_func'=>'callable(mixed,mixed):int'], 'array_udiff\'1' => ['associative-array', 'array'=>'array', 'rest'=>'array', 'arr3'=>'array', 'arg4'=>'array|callable(mixed,mixed):int', '...rest='=>'array|callable(mixed,mixed):int'], @@ -421,7 +421,7 @@ 'array_unique' => ['array', 'array'=>'array', 'flags='=>'0'], 'array_unique\'1' => ['array', 'array'=>'array', 'flags='=>'1'], 'array_unique\'2' => ['array', 'array'=>'array', 'flags='=>'2|5'], -'array_unshift' => ['int', '&rw_array'=>'array', 'values'=>'mixed', '...vars='=>'mixed'], +'array_unshift' => ['int', '&rw_array'=>'array', '...values='=>'mixed'], 'array_values' => ['list', 'array'=>'array'], 'array_walk' => ['bool', '&rw_array'=>'array', 'callback'=>'callable', 'arg='=>'mixed'], 'array_walk\'1' => ['bool', '&rw_array'=>'object', 'callback'=>'callable', 'arg='=>'mixed'], @@ -1553,7 +1553,8 @@ 'crack_opendict' => ['resource|false', 'dictionary'=>'string'], 'crash' => [''], 'crc32' => ['int', 'string'=>'string'], -'crypt' => ['string', 'string'=>'string', 'salt='=>'string'], +// While technically optional calling this without salt is bad and creates an E_NOTICE +'crypt' => ['string', 'string'=>'string', 'salt'=>'string'], 'ctype_alnum' => ['bool', 'text'=>'string|int'], 'ctype_alpha' => ['bool', 'text'=>'string|int'], 'ctype_cntrl' => ['bool', 'text'=>'string|int'], @@ -1672,7 +1673,7 @@ 'curl_escape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], 'curl_exec' => ['bool|string', 'handle'=>'CurlHandle'], 'curl_file_create' => ['CURLFile', 'filename'=>'string', 'mime_type='=>'string|null', 'posted_filename='=>'string|null'], -'curl_getinfo' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int'], +'curl_getinfo' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int|null'], 'curl_init' => ['CurlHandle|false', 'url='=>'string'], 'curl_multi_add_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], 'curl_multi_close' => ['void', 'multi_handle'=>'CurlMultiHandle'], @@ -1695,7 +1696,7 @@ 'curl_share_setopt' => ['bool', 'share_handle'=>'CurlShareHandle', 'option'=>'int', 'value'=>'mixed'], 'curl_share_strerror' => ['?string', 'error_code'=>'int'], 'curl_strerror' => ['?string', 'error_code'=>'int'], -'curl_unescape' => ['string|false', 'handle'=>'CurlShareHandle', 'string'=>'string'], +'curl_unescape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], 'curl_version' => ['array', 'version='=>'int'], 'CURLFile::__construct' => ['void', 'filename'=>'string', 'mimetype='=>'string', 'postfilename='=>'string'], 'CURLFile::__wakeup' => ['void'], @@ -1715,7 +1716,7 @@ 'date' => ['string', 'format'=>'string', 'timestamp='=>'?int'], 'date_add' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], 'date_create' => ['DateTime|false', 'datetime='=>'string', 'timezone='=>'?DateTimeZone'], -'date_create_from_format' => ['DateTime|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?\DateTimeZone'], +'date_create_from_format' => ['DateTime|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'\DateTimeZone|null'], 'date_create_immutable' => ['DateTimeImmutable|false', 'datetime='=>'string', 'timezone='=>'?DateTimeZone'], 'date_create_immutable_from_format' => ['DateTimeImmutable|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'], 'date_date_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], @@ -1726,7 +1727,7 @@ 'date_get_last_errors' => ['array{warning_count:int,warnings:array,error_count:int,errors:array}'], 'date_interval_create_from_date_string' => ['DateInterval', 'datetime'=>'string'], 'date_interval_format' => ['string', 'object'=>'DateInterval', 'format'=>'string'], -'date_isodate_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int|mixed'], +'date_isodate_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'1|2|3|4|5|6|7'], 'date_modify' => ['DateTime|false', 'object'=>'DateTime', 'modifier'=>'string'], 'date_offset_get' => ['int|false', 'object'=>'DateTimeInterface'], 'date_parse' => ['array|false', 'datetime'=>'string'], @@ -1734,13 +1735,13 @@ 'date_sub' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], 'date_sun_info' => ['array|false', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], 'date_sunrise' => ['mixed', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'], -'date_sunset' => ['mixed', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'], -'date_time_set' => ['DateTime|false', 'object'=>'', 'hour'=>'', 'minute'=>'', 'second='=>'', 'microsecond='=>''], +'date_sunset' => ['string|int|float|false', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float|null', 'longitude='=>'float|null', 'zenith='=>'float|null', 'utcOffset='=>'float|null'], +'date_time_set' => ['DateTime|false', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], 'date_timestamp_get' => ['int', 'object'=>'DateTimeInterface'], 'date_timestamp_set' => ['DateTime|false', 'object'=>'DateTime', 'timestamp'=>'int'], 'date_timezone_get' => ['DateTimeZone|false', 'object'=>'DateTimeInterface'], 'date_timezone_set' => ['DateTime|false', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], -'datefmt_create' => ['IntlDateFormatter|false', 'locale'=>'?string', 'dateType'=>'?int', 'timeType'=>'?int', 'timezone='=>'string|DateTimeZone|IntlTimeZone|null', 'calendar='=>'int|IntlCalendar|null', 'pattern='=>'string'], +'datefmt_create' => ['IntlDateFormatter|false', 'locale'=>'?string', 'dateType'=>'int', 'timeType'=>'int', 'timezone='=>'string|DateTimeZone|IntlTimeZone|null', 'calendar='=>'int|IntlCalendar|null', 'pattern='=>'string'], 'datefmt_format' => ['string|false', 'formatter'=>'IntlDateFormatter', 'datetime'=>'DateTime|IntlCalendar|array|int'], 'datefmt_format_object' => ['string|false', 'datetime'=>'object', 'format='=>'mixed', 'locale='=>'string'], 'datefmt_get_calendar' => ['int', 'formatter'=>'IntlDateFormatter'], @@ -1754,12 +1755,12 @@ 'datefmt_get_timezone' => ['IntlTimeZone|false'], 'datefmt_get_timezone_id' => ['string', 'formatter'=>'IntlDateFormatter'], 'datefmt_is_lenient' => ['bool', 'formatter'=>'IntlDateFormatter'], -'datefmt_localtime' => ['array|false', 'formatter'=>'IntlDateFormatter', 'string='=>'string', '&rw_offset='=>'int'], -'datefmt_parse' => ['int|false', 'formatter'=>'IntlDateFormatter', 'string='=>'string', '&rw_offset='=>'int'], +'datefmt_localtime' => ['array|false', 'formatter'=>'IntlDateFormatter', 'string'=>'string', '&rw_offset='=>'int'], +'datefmt_parse' => ['int|false', 'formatter'=>'IntlDateFormatter', 'string'=>'string', '&rw_offset='=>'int'], 'datefmt_set_calendar' => ['bool', 'formatter'=>'IntlDateFormatter', 'calendar'=>'int'], 'datefmt_set_lenient' => ['?bool', 'formatter'=>'IntlDateFormatter', 'lenient'=>'bool'], 'datefmt_set_pattern' => ['bool', 'formatter'=>'IntlDateFormatter', 'pattern'=>'string'], -'datefmt_set_timezone' => ['bool', 'formatter'=>'mixed'], +'datefmt_set_timezone' => ['bool', 'formatter'=>'IntlDateFormatter'], 'datefmt_set_timezone_id' => ['bool', 'fmt'=>'IntlDateFormatter', 'zone'=>'string'], 'DateInterval::__construct' => ['void', 'spec'=>'string'], 'DateInterval::__set_state' => ['DateInterval', 'array'=>'array'], @@ -1973,7 +1974,7 @@ 'deaggregate' => ['', 'object'=>'object', 'class_name='=>'string'], 'debug_backtrace' => ['list', 'options='=>'int', 'limit='=>'int'], 'debug_print_backtrace' => ['void', 'options='=>'int', 'limit='=>'int'], -'debug_zval_dump' => ['void', '...value'=>'mixed'], +'debug_zval_dump' => ['void', 'value' => 'mixed', '...values='=>'mixed'], 'debugger_connect' => [''], 'debugger_connector_pid' => [''], 'debugger_get_server_start_time' => [''], @@ -1985,7 +1986,7 @@ 'define' => ['bool', 'constant_name'=>'string', 'value'=>'mixed', 'case_insensitive='=>'bool'], 'define_syslog_variables' => ['void'], 'defined' => ['bool', 'constant_name'=>'string'], -'deflate_add' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], +'deflate_add' => ['string|false', 'context'=>'DeflateContext', 'data'=>'string', 'flush_mode='=>'int'], 'deflate_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], 'deg2rad' => ['float', 'num'=>'float'], 'dgettext' => ['string', 'domain'=>'string', 'message'=>'string'], @@ -2046,7 +2047,7 @@ 'dl' => ['bool', 'extension_filename'=>'string'], 'dngettext' => ['string', 'domain'=>'string', 'singular'=>'string', 'plural'=>'string', 'count'=>'int'], 'dns_check_record' => ['bool', 'hostname'=>'string', 'type='=>'string'], -'dns_get_mx' => ['bool', 'hostname'=>'string', '&w_hosts'=>'array', '&w_weights'=>'array'], +'dns_get_mx' => ['bool', 'hostname'=>'string', '&w_hosts'=>'array', '&w_weights='=>'array|null'], 'dns_get_record' => ['list|false', 'hostname'=>'string', 'type='=>'int', '&w_authoritative_name_servers='=>'array', '&w_additional_records='=>'array', 'raw='=>'bool'], 'dom_document_relaxNG_validate_file' => ['bool', 'filename'=>'string'], 'dom_document_relaxNG_validate_xml' => ['bool', 'source'=>'string'], @@ -2431,8 +2432,8 @@ 'Ds\Vector::sum' => ['int|float'], 'Ds\Vector::toArray' => ['array'], 'Ds\Vector::unshift' => ['void', '...values='=>'mixed'], -'easter_date' => ['int', 'year='=>'int'], -'easter_days' => ['int', 'year='=>'int', 'mode='=>'int'], +'easter_date' => ['int', 'year='=>'int|null', 'mode=' => 'int'], +'easter_days' => ['int', 'year='=>'int|null', 'mode='=>'int'], 'echo' => ['void', 'arg1'=>'string', '...args='=>'string'], 'eio_busy' => ['resource', 'delay'=>'int', 'pri='=>'int', 'callback='=>'callable', 'data='=>'mixed'], 'eio_cancel' => ['void', 'req'=>'resource'], @@ -2535,7 +2536,7 @@ 'error_clear_last' => ['void'], 'error_get_last' => ['?array{type:int,message:string,file:string,line:int}'], 'error_log' => ['bool', 'message'=>'string', 'message_type='=>'int', 'destination='=>'string', 'additional_headers='=>'string'], -'error_reporting' => ['int', 'error_level='=>'int'], +'error_reporting' => ['int', 'error_level='=>'int|null'], 'ErrorException::__clone' => ['void'], 'ErrorException::__construct' => ['void', 'message='=>'string', 'code='=>'int', 'severity='=>'int', 'filename='=>'string', 'line='=>'int', 'previous='=>'?Throwable|?ErrorException'], 'ErrorException::__toString' => ['string'], @@ -2927,7 +2928,7 @@ 'explode' => ['list', 'separator'=>'string', 'string'=>'string', 'limit='=>'int'], 'expm1' => ['float', 'num'=>'float'], 'extension_loaded' => ['bool', 'extension'=>'string'], -'extract' => ['int', '&rw_array'=>'array', 'flags='=>'int', 'prefix='=>'?string'], +'extract' => ['int', '&rw_array'=>'array', 'flags='=>'int', 'prefix='=>'string'], 'ezmlm_hash' => ['int', 'addr'=>'string'], 'fam_cancel_monitor' => ['bool', 'fam'=>'resource', 'fam_monitor'=>'resource'], 'fam_close' => ['void', 'fam'=>'resource'], @@ -3225,12 +3226,11 @@ 'ffmpeg_movie::hasAudio' => ['bool'], 'ffmpeg_movie::hasVideo' => ['bool'], 'fgetc' => ['string|false', 'stream'=>'resource'], -'fgetcsv' => ['list|array{0: null}|false|null', 'stream'=>'resource', 'length='=>'int', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], -'fgets' => ['string|false', 'stream'=>'resource', 'length='=>'int'], -'fgetss' => ['string|false', 'fp'=>'resource', 'length='=>'int', 'allowable_tags='=>'string'], +'fgetcsv' => ['list|array{0: null}|false|null', 'stream'=>'resource', 'length='=>'int|null', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], +'fgets' => ['string|false', 'stream'=>'resource', 'length='=>'int|null'], 'file' => ['list|false', 'filename'=>'string', 'flags='=>'int', 'context='=>'resource'], 'file_exists' => ['bool', 'filename'=>'string'], -'file_get_contents' => ['string|false', 'filename'=>'string', 'use_include_path='=>'bool', 'context='=>'?resource', 'offset='=>'int', 'length='=>'int'], +'file_get_contents' => ['string|false', 'filename'=>'string', 'use_include_path='=>'bool', 'context='=>'?resource', 'offset='=>'int', 'length='=>'int|null'], 'file_put_contents' => ['int|false', 'filename'=>'string', 'data'=>'string|resource|array', 'flags='=>'int', 'context='=>'resource'], 'fileatime' => ['int|false', 'filename'=>'string'], 'filectime' => ['int|false', 'filename'=>'string'], @@ -3325,14 +3325,14 @@ 'fpm_get_status' => ['array|false'], 'fprintf' => ['int', 'stream'=>'resource', 'format'=>'string', '...values='=>'string|int|float'], 'fputcsv' => ['int|false', 'stream'=>'resource', 'fields'=>'array', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], -'fputs' => ['int|false', 'stream'=>'resource', 'data'=>'string', 'length='=>'int'], +'fputs' => ['int|false', 'stream'=>'resource', 'data'=>'string', 'length='=>'int|null'], 'fread' => ['string|false', 'stream'=>'resource', 'length'=>'int'], 'frenchtojd' => ['int', 'month'=>'int', 'day'=>'int', 'year'=>'int'], 'fribidi_log2vis' => ['string', 'string'=>'string', 'direction'=>'string', 'charset'=>'int'], 'fscanf' => ['list', 'stream'=>'resource', 'format'=>'string'], 'fscanf\'1' => ['int', 'stream'=>'resource', 'format'=>'string', '&...w_vars='=>'string|int|float'], 'fseek' => ['int', 'stream'=>'resource', 'offset'=>'int', 'whence='=>'int'], -'fsockopen' => ['resource|false', 'hostname'=>'string', 'port='=>'int', '&w_error_code='=>'int', '&w_error_message='=>'string', 'timeout='=>'float'], +'fsockopen' => ['resource|false', 'hostname'=>'string', 'port='=>'int', '&w_error_code='=>'int|null', '&w_error_message='=>'string|null', 'timeout='=>'float|null'], 'fstat' => ['array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int, 8: int, 9: int, 10: int, 11: int, 12: int, dev: int, ino: int, mode: int, nlink: int, uid: int, gid: int, rdev: int, size: int, atime: int, mtime: int, ctime: int, blksize: int, blocks: int}|false', 'stream'=>'resource'], 'ftell' => ['int|false', 'stream'=>'resource'], 'ftok' => ['int', 'filename'=>'string', 'project_id'=>'string'], @@ -3377,7 +3377,7 @@ 'func_get_args' => ['list'], 'func_num_args' => ['int'], 'function_exists' => ['bool', 'function'=>'string'], -'fwrite' => ['int|false', 'stream'=>'resource', 'data'=>'string', 'length='=>'int'], +'fwrite' => ['int|false', 'stream'=>'resource', 'data'=>'string', 'length='=>'int|null'], 'Fiber::__construct' => ['void', 'callback'=>'callable'], 'Fiber::start' => ['mixed', '...args'=>'mixed'], 'Fiber::resume' => ['mixed', 'value='=>'null|mixed'], @@ -3735,7 +3735,7 @@ 'get_defined_functions' => ['array>', 'exclude_disabled='=>'bool'], 'get_defined_vars' => ['array'], 'get_extension_funcs' => ['list|false', 'extension'=>'string'], -'get_headers' => ['array|false', 'url'=>'string', 'associative='=>'int', 'context='=>'resource'], +'get_headers' => ['array|false', 'url'=>'string', 'associative='=>'bool', 'context='=>'?resource'], 'get_html_translation_table' => ['array', 'table='=>'int', 'flags='=>'int', 'encoding='=>'string'], 'get_include_path' => ['string'], 'get_included_files' => ['list'], @@ -3751,7 +3751,7 @@ 'get_resources' => ['array', 'type='=>'string'], 'getallheaders' => ['array|false'], 'getcwd' => ['string|false'], -'getdate' => ['array{seconds: int<0, 59>, minutes: int<0, 59>, hours: int<0, 23>, mday: int<1, 31>, wday: int<0, 6>, mon: int<1, 12>, year: int, yday: int<0, 365>, weekday: "Monday"|"Tuesday"|"Wednesday"|"Thursday"|"Friday"|"Saturday"|"Sunday", month: "January"|"February"|"March"|"April"|"May"|"June"|"July"|"August"|"September"|"October"|"November"|"December", 0: int}', 'timestamp='=>'int'], +'getdate' => ['array{seconds: int<0, 59>, minutes: int<0, 59>, hours: int<0, 23>, mday: int<1, 31>, wday: int<0, 6>, mon: int<1, 12>, year: int, yday: int<0, 365>, weekday: "Monday"|"Tuesday"|"Wednesday"|"Thursday"|"Friday"|"Saturday"|"Sunday", month: "January"|"February"|"March"|"April"|"May"|"June"|"July"|"August"|"September"|"October"|"November"|"December", 0: int}', 'timestamp='=>'int|null'], 'getenv' => ['string|false', 'name'=>'string', 'local_only='=>'bool'], 'getenv\'1' => ['array'], 'gethostbyaddr' => ['string|false', 'ip'=>'string'], @@ -4106,7 +4106,7 @@ 'grapheme_strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], 'grapheme_strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], 'grapheme_strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'beforeNeedle='=>'bool'], -'grapheme_substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], +'grapheme_substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int|null'], 'gregoriantojd' => ['int', 'month'=>'int', 'day'=>'int', 'year'=>'int'], 'gridObj::set' => ['int', 'property_name'=>'string', 'new_value'=>''], 'Grpc\Call::__construct' => ['void', 'channel'=>'Grpc\Channel', 'method'=>'string', 'absolute_deadline'=>'Grpc\Timeval', 'host_override='=>'mixed'], @@ -4189,17 +4189,17 @@ 'gzeof' => ['bool|int', 'stream'=>'resource'], 'gzfile' => ['list', 'filename'=>'string', 'use_include_path='=>'int'], 'gzgetc' => ['string|false', 'stream'=>'resource'], -'gzgets' => ['string|false', 'stream'=>'resource', 'length='=>'int'], +'gzgets' => ['string|false', 'stream'=>'resource', 'length='=>'int|null'], 'gzinflate' => ['string|false', 'data'=>'string', 'max_length='=>'int'], 'gzopen' => ['resource|false', 'filename'=>'string', 'mode'=>'string', 'use_include_path='=>'int'], 'gzpassthru' => ['int|false', 'stream'=>'resource'], -'gzputs' => ['int', 'stream'=>'resource', 'data'=>'string', 'length='=>'int'], +'gzputs' => ['int', 'stream'=>'resource', 'data'=>'string', 'length='=>'int|null'], 'gzread' => ['string|false', 'stream'=>'resource', 'length'=>'int'], 'gzrewind' => ['bool', 'stream'=>'resource'], 'gzseek' => ['int', 'stream'=>'resource', 'offset'=>'int', 'whence='=>'int'], 'gztell' => ['int|false', 'stream'=>'resource'], 'gzuncompress' => ['string|false', 'data'=>'string', 'max_length='=>'int'], -'gzwrite' => ['int', 'stream'=>'resource', 'data'=>'string', 'length='=>'int'], +'gzwrite' => ['int', 'stream'=>'resource', 'data'=>'string', 'length='=>'int|null'], 'HaruAnnotation::setBorderStyle' => ['bool', 'width'=>'float', 'dash_on'=>'int', 'dash_off'=>'int'], 'HaruAnnotation::setHighlightMode' => ['bool', 'mode'=>'int'], 'HaruAnnotation::setIcon' => ['bool', 'icon'=>'int'], @@ -5283,7 +5283,7 @@ 'iconv_strlen' => ['0|positive-int|false', 'string'=>'string', 'encoding='=>'string'], 'iconv_strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'iconv_strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], -'iconv_substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int', 'encoding='=>'string'], +'iconv_substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int|null', 'encoding='=>'string|null'], 'id3_get_frame_long_name' => ['string', 'frameid'=>'string'], 'id3_get_frame_short_name' => ['string', 'frameid'=>'string'], 'id3_get_genre_id' => ['int', 'genre'=>'string'], @@ -5293,7 +5293,7 @@ 'id3_get_version' => ['int', 'filename'=>'string'], 'id3_remove_tag' => ['bool', 'filename'=>'string', 'version='=>'int'], 'id3_set_tag' => ['bool', 'filename'=>'string', 'tag'=>'array', 'version='=>'int'], -'idate' => ['int', 'format'=>'string', 'timestamp='=>'int'], +'idate' => ['int', 'format'=>'string', 'timestamp='=>'int|null'], 'idn_strerror' => ['string', 'errorcode'=>'int'], 'idn_to_ascii' => ['string|false', 'domain'=>'string', 'flags='=>'int', 'variant='=>'int', '&w_idna_info='=>'array'], 'idn_to_utf8' => ['string|false', 'domain'=>'string', 'flags='=>'int', 'variant='=>'int', '&w_idna_info='=>'array'], @@ -5337,7 +5337,7 @@ 'ifxus_write_slob' => ['int', 'bid'=>'int', 'content'=>'string'], 'igbinary_serialize' => ['string|false', 'value'=>'mixed'], 'igbinary_unserialize' => ['mixed', 'string'=>'string'], -'ignore_user_abort' => ['int', 'enable='=>'bool'], +'ignore_user_abort' => ['int', 'enable='=>'?bool'], 'iis_add_server' => ['int', 'path'=>'string', 'comment'=>'string', 'server_ip'=>'string', 'port'=>'int', 'host_name'=>'string', 'rights'=>'int', 'start_server'=>'int'], 'iis_get_dir_security' => ['int', 'server_instance'=>'int', 'virtual_path'=>'string'], 'iis_get_script_map' => ['string', 'server_instance'=>'int', 'virtual_path'=>'string', 'script_extension'=>'string'], @@ -5381,7 +5381,7 @@ 'imagecolorset' => ['void', 'image'=>'GdImage', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], 'imagecolorsforindex' => ['array|false', 'image'=>'GdImage', 'color'=>'int'], 'imagecolorstotal' => ['int|false', 'image'=>'GdImage'], -'imagecolortransparent' => ['int|false', 'image'=>'GdImage', 'color='=>'int'], +'imagecolortransparent' => ['int|false', 'image'=>'GdImage', 'color='=>'int|null'], 'imageconvolution' => ['bool', 'image'=>'GdImage', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], 'imagecopy' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'], 'imagecopymerge' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], @@ -5411,10 +5411,15 @@ 'imagefill' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'], 'imagefilledarc' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], 'imagefilledellipse' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], -'imagefilledpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color'=>'int'], +'imagefilledpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'color'=>'int'], 'imagefilledrectangle' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imagefilltoborder' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], -'imagefilter' => ['bool', 'image'=>'GdImage', 'filter'=>'int', 'args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], +'imagefilter' => ['bool', 'image' => 'GdImage', 'filter' => '0|1|5|6|7|8'], +'imagefilter\'1' => ['bool', 'image' => 'GdImage', 'filter' => '2', 'args' => 'int<-255,255>'], +'imagefilter\'2' => ['bool', 'image' => 'GdImage', 'filter' => '3|10', 'args' => 'int'], +'imagefilter\'3' => ['bool', 'image' => 'GdImage', 'filter' => '4', 'args' => 'int<0,255>', 'args2' => 'int<0,255>', 'args3' => 'int<0,255>', 'args4' => 'int<0,127>'], +'imagefilter\'4' => ['bool', 'image' => 'GdImage', 'filter' => '11', 'args' => 'int', 'args2=' => 'bool'], +'imagefilter\'5' => ['bool', 'image' => 'GdImage', 'filter' => '12', 'args' => 'int', 'args2=' => 'int', 'args3=' => 'array'], 'imageflip' => ['bool', 'image'=>'GdImage', 'mode'=>'int'], 'imagefontheight' => ['int', 'font'=>'int'], 'imagefontwidth' => ['int', 'font'=>'int'], @@ -5428,7 +5433,7 @@ 'imagegif' => ['bool', 'image'=>'GdImage', 'file='=>'string|resource|null'], 'imagegrabscreen' => ['false|GdImage'], 'imagegrabwindow' => ['false|GdImage', 'handle'=>'int', 'client_area='=>'int'], -'imageinterlace' => ['int|false', 'image'=>'GdImage', 'enable='=>'int'], +'imageinterlace' => ['int|false', 'image'=>'GdImage', 'enable='=>'bool|null'], 'imageistruecolor' => ['bool', 'image'=>'GdImage'], 'imagejpeg' => ['bool', 'image'=>'GdImage', 'file='=>'string|resource|null', 'quality='=>'int'], 'imagelayereffect' => ['bool', 'image'=>'GdImage', 'effect'=>'int'], @@ -5437,14 +5442,14 @@ 'imageObj::pasteImage' => ['void', 'srcImg'=>'imageObj', 'transparentColorHex'=>'int', 'dstX'=>'int', 'dstY'=>'int', 'angle'=>'int'], 'imageObj::saveImage' => ['int', 'filename'=>'string', 'oMap'=>'mapObj'], 'imageObj::saveWebImage' => ['string'], -'imageopenpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points'=>'int', 'color'=>'int'], +'imageopenpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'list{0: int, 1: int, 2: int, 3: int}', 'color'=>'int'], 'imagepalettecopy' => ['void', 'dst'=>'GdImage', 'src'=>'GdImage'], 'imagepalettetotruecolor' => ['bool', 'image'=>'GdImage'], 'imagepng' => ['bool', 'image'=>'GdImage', 'file='=>'string|resource|null', 'quality='=>'int', 'filters='=>'int'], -'imagepolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color'=>'int'], +'imagepolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'color'=>'int'], 'imagerectangle' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imageresolution' => ['array|bool', 'image'=>'GdImage', 'resolution_x='=>'int', 'resolution_y='=>'int'], -'imagerotate' => ['false|GdImage', 'image'=>'GdImage', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'int'], +'imageresolution' => ['array|bool', 'image'=>'GdImage', 'resolution_x='=>'int|null', 'resolution_y='=>'int|null'], +'imagerotate' => ['false|GdImage', 'image'=>'GdImage', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], 'imagesavealpha' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], 'imagescale' => ['false|GdImage', 'image'=>'GdImage', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], 'imagesetbrush' => ['bool', 'image'=>'GdImage', 'brush'=>'GdImage'], @@ -5462,9 +5467,9 @@ 'imagettfbbox' => ['false|array', 'size'=>'float', 'angle'=>'float', 'font_filename'=>'string', 'string'=>'string'], 'imagettftext' => ['false|array', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string'], 'imagetypes' => ['int'], -'imagewbmp' => ['bool', 'image'=>'GdImage', 'file='=>'string|resource|null', 'foreground_color='=>'int'], +'imagewbmp' => ['bool', 'image'=>'GdImage', 'file='=>'string|resource|null', 'foreground_color='=>'int|null'], 'imagewebp' => ['bool', 'image'=>'GdImage', 'file='=>'string|resource|null', 'quality='=>'int'], -'imagexbm' => ['bool', 'image'=>'GdImage', 'filename='=>'?string', 'foreground_color='=>'int'], +'imagexbm' => ['bool', 'image'=>'GdImage', 'filename='=>'?string', 'foreground_color='=>'?int'], 'Imagick::__construct' => ['void', 'files='=>'string|string[]'], 'Imagick::__toString' => ['string'], 'Imagick::adaptiveBlurImage' => ['bool', 'radius'=>'float', 'sigma'=>'float', 'channel='=>'int'], @@ -6112,10 +6117,10 @@ 'InfiniteIterator::next' => ['void'], 'InfiniteIterator::rewind' => ['void'], 'InfiniteIterator::valid' => ['bool'], -'inflate_add' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], -'inflate_get_read_len' => ['int|false', 'context'=>'resource'], -'inflate_get_status' => ['int|false', 'context'=>'resource'], -'inflate_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], +'inflate_add' => ['string|false', 'context'=>'InflateContext', 'data'=>'string', 'flush_mode='=>'int'], +'inflate_get_read_len' => ['int|false', 'context'=>'InflateContext'], +'inflate_get_status' => ['int|false', 'context'=>'InflateContext'], +'inflate_init' => ['InflateContext|false', 'encoding'=>'int', 'options='=>'array'], 'ingres_autocommit' => ['bool', 'link'=>'resource'], 'ingres_autocommit_state' => ['bool', 'link'=>'resource'], 'ingres_charset' => ['string', 'link'=>'resource'], @@ -6190,7 +6195,7 @@ 'intlcal_add' => ['bool', 'calendar'=>'IntlCalendar', 'field'=>'int', 'value'=>'int'], 'intlcal_after' => ['bool', 'calendar'=>'IntlCalendar', 'other'=>'IntlCalendar'], 'intlcal_before' => ['bool', 'calendar'=>'IntlCalendar', 'other'=>'IntlCalendar'], -'intlcal_clear' => ['bool', 'calendar'=>'IntlCalendar', 'field='=>'int'], +'intlcal_clear' => ['bool', 'calendar'=>'IntlCalendar', 'field='=>'int|null'], 'intlcal_create_instance' => ['IntlCalendar', 'timezone='=>'mixed', 'locale='=>'string'], 'intlcal_equals' => ['bool', 'calendar'=>'IntlCalendar', 'other'=>'IntlCalendar'], 'intlcal_field_difference' => ['int', 'calendar'=>'IntlCalendar', 'timestamp'=>'float', 'field'=>'int'], @@ -6214,12 +6219,12 @@ 'intlcal_get_time' => ['float', 'calendar'=>'IntlCalendar'], 'intlcal_get_time_zone' => ['IntlTimeZone', 'calendar'=>'IntlCalendar'], 'intlcal_get_type' => ['string', 'calendar'=>'IntlCalendar'], -'intlcal_get_weekend_transition' => ['int', 'calendar'=>'IntlCalendar', 'dayOfWeek'=>'string'], +'intlcal_get_weekend_transition' => ['int', 'calendar'=>'IntlCalendar', 'dayOfWeek'=>'1|2|3|4|5|6|7'], 'intlcal_in_daylight_time' => ['bool', 'calendar'=>'IntlCalendar'], 'intlcal_is_equivalent_to' => ['bool', 'calendar'=>'IntlCalendar', 'other'=>'IntlCalendar'], 'intlcal_is_lenient' => ['bool', 'calendar'=>'IntlCalendar'], 'intlcal_is_set' => ['bool', 'calendar'=>'IntlCalendar', 'field'=>'int'], -'intlcal_is_weekend' => ['bool', 'calendar'=>'IntlCalendar', 'timestamp='=>'float'], +'intlcal_is_weekend' => ['bool', 'calendar'=>'IntlCalendar', 'timestamp='=>'?float'], 'intlcal_roll' => ['bool', 'calendar'=>'IntlCalendar', 'field'=>'int', 'value'=>'mixed'], 'intlcal_set' => ['bool', 'calendar'=>'IntlCalendar', 'year'=>'int', 'month'=>'int'], 'intlcal_set\'1' => ['bool', 'calendar'=>'IntlCalendar', 'year'=>'int', 'month'=>'int', 'dayOfMonth='=>'int', 'hour='=>'int', 'minute='=>'int', 'second='=>'int'], @@ -6394,7 +6399,7 @@ 'IntlException::getTraceAsString' => ['string'], 'intlgregcal_create_instance' => ['IntlGregorianCalendar', 'timezoneOrYear='=>'mixed', 'localeOrMonth='=>'string'], 'intlgregcal_get_gregorian_change' => ['float', 'calendar'=>'IntlGregorianCalendar'], -'intlgregcal_is_leap_year' => ['bool', 'calendar'=>'int'], +'intlgregcal_is_leap_year' => ['bool', 'calendar'=>'IntlGregorianCalendar', 'year' => 'int'], 'intlgregcal_set_gregorian_change' => ['void', 'calendar'=>'IntlGregorianCalendar', 'timestamp'=>'float'], 'IntlGregorianCalendar::__construct' => ['void'], 'IntlGregorianCalendar::add' => ['bool', 'field'=>'int', 'amount'=>'int'], @@ -6503,11 +6508,11 @@ 'IntlTimeZone::toDateTimeZone' => ['DateTimeZone|false'], 'IntlTimeZone::useDaylightTime' => ['bool'], 'intltz_count_equivalent_ids' => ['int', 'timezoneId'=>'string'], -'intltz_create_enumeration' => ['IntlIterator', 'countryOrRawOffset'=>'mixed'], +'intltz_create_enumeration' => ['IntlIterator', 'countryOrRawOffset='=>'IntlTimeZone|string|int|float|null'], 'intltz_create_time_zone' => ['IntlTimeZone', 'timezoneId'=>'string'], 'intltz_from_date_time_zone' => ['IntlTimeZone', 'timezone'=>'DateTimeZone'], 'intltz_get_canonical_id' => ['string', 'timezoneId'=>'string', '&isSystemId'=>'bool'], -'intltz_get_display_name' => ['string', 'timezone'=>'IntlTimeZone', 'dst'=>'bool', 'style'=>'int', 'locale'=>'string'], +'intltz_get_display_name' => ['string', 'timezone'=>'IntlTimeZone', 'dst='=>'bool', 'style='=>'int', 'locale='=>'string|null'], 'intltz_get_dst_savings' => ['int', 'timezone'=>'IntlTimeZone'], 'intltz_get_equivalent_id' => ['string', 'timezoneId'=>'string', 'offset'=>'int'], 'intltz_get_error_code' => ['int', 'timezone'=>'IntlTimeZone'], @@ -6538,7 +6543,7 @@ 'is_a' => ['bool', 'object_or_class'=>'mixed', 'class'=>'string', 'allow_string='=>'bool'], 'is_array' => ['bool', 'value'=>'mixed'], 'is_bool' => ['bool', 'value'=>'mixed'], -'is_callable' => ['bool', 'value'=>'callable|mixed', 'syntax_only='=>'bool', '&w_callable_name='=>'string'], +'is_callable' => ['bool', 'value'=>'mixed', 'syntax_only='=>'bool', '&w_callable_name='=>'string'], 'is_countable' => ['bool', 'value'=>'mixed'], 'is_dir' => ['bool', 'filename'=>'string'], 'is_double' => ['bool', 'value'=>'mixed'], @@ -6573,7 +6578,7 @@ 'Iterator::next' => ['void'], 'Iterator::rewind' => ['void'], 'Iterator::valid' => ['bool'], -'iterator_apply' => ['0|positive-int', 'iterator'=>'Traversable', 'callback'=>'callable(mixed):bool', 'args='=>'array'], +'iterator_apply' => ['0|positive-int', 'iterator'=>'Traversable', 'callback'=>'callable(mixed):bool', 'args='=>'array|null'], 'iterator_count' => ['0|positive-int', 'iterator'=>'Traversable'], 'iterator_to_array' => ['array', 'iterator'=>'Traversable', 'preserve_keys='=>'bool'], 'IteratorAggregate::getIterator' => ['Traversable'], @@ -6603,7 +6608,7 @@ 'jobqueue_license_info' => ['array'], 'join' => ['string', 'separator'=>'string', 'array'=>'array'], 'join\'1' => ['string', 'separator'=>'array'], -'json_decode' => ['mixed', 'json'=>'string', 'associative='=>'bool', 'depth='=>'int', 'flags='=>'int'], +'json_decode' => ['mixed', 'json'=>'string', 'associative='=>'bool|null', 'depth='=>'int', 'flags='=>'int'], 'json_encode' => ['string|false', 'value'=>'mixed', 'flags='=>'int', 'depth='=>'int'], 'json_last_error' => ['int'], 'json_last_error_msg' => ['string'], @@ -6884,9 +6889,9 @@ 'libxml_disable_entity_loader' => ['bool', 'disable='=>'bool'], 'libxml_get_errors' => ['array'], 'libxml_get_last_error' => ['LibXMLError|false'], -'libxml_set_external_entity_loader' => ['bool', 'resolver_function'=>'callable'], +'libxml_set_external_entity_loader' => ['bool', 'resolver_function'=>'?callable'], 'libxml_set_streams_context' => ['void', 'context'=>'resource'], -'libxml_use_internal_errors' => ['bool', 'use_errors='=>'bool'], +'libxml_use_internal_errors' => ['bool', 'use_errors='=>'bool|null'], 'LimitIterator::__construct' => ['void', 'iterator'=>'Iterator', 'offset='=>'int', 'count='=>'int'], 'LimitIterator::current' => ['mixed'], 'LimitIterator::getInnerIterator' => ['Iterator'], @@ -6944,7 +6949,7 @@ 'locale_parse' => ['array', 'locale'=>'string'], 'locale_set_default' => ['bool', 'locale'=>'string'], 'localeconv' => ['array'], -'localtime' => ['array', 'timestamp='=>'int', 'associative='=>'bool'], +'localtime' => ['array', 'timestamp='=>'int|null', 'associative='=>'bool'], 'log' => ['float', 'num'=>'float', 'base='=>'float'], 'log10' => ['float', 'num'=>'float'], 'log1p' => ['float', 'num'=>'float'], @@ -6958,7 +6963,7 @@ 'LogicException::getPrevious' => ['Throwable|LogicException|null'], 'LogicException::getTrace' => ['list\',args?:array}>'], 'LogicException::getTraceAsString' => ['string'], -'long2ip' => ['string', 'ip'=>'string|int'], +'long2ip' => ['string', 'ip'=>'int'], 'lstat' => ['array{0: int, 1: int, 2: int, 3: int, 4: int, 5: int, 6: int, 7: int, 8: int, 9: int, 10: int, 11: int, 12: int, dev: int, ino: int, mode: int, nlink: int, uid: int, gid: int, rdev: int, size: int, atime: int, mtime: int, ctime: int, blksize: int, blocks: int}|false', 'filename'=>'string'], 'ltrim' => ['string', 'string'=>'string', 'characters='=>'string'], 'Lua::__call' => ['mixed', 'lua_func'=>'callable', 'args='=>'array', 'use_self='=>'int'], @@ -8165,11 +8170,11 @@ 'msession_unlock' => ['int', 'session'=>'string', 'key'=>'int'], 'msg_get_queue' => ['resource', 'key'=>'int', 'permissions='=>'int'], 'msg_queue_exists' => ['bool', 'key'=>'int'], -'msg_receive' => ['bool', 'queue'=>'resource', 'desired_message_type'=>'int', '&w_received_message_type'=>'int', 'max_message_size'=>'int', '&w_message'=>'mixed', 'unserialize='=>'bool', 'flags='=>'int', '&w_error_code='=>'int'], -'msg_remove_queue' => ['bool', 'queue'=>'resource'], -'msg_send' => ['bool', 'queue'=>'resource', 'message_type'=>'int', 'message'=>'mixed', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], -'msg_set_queue' => ['bool', 'queue'=>'resource', 'data'=>'array'], -'msg_stat_queue' => ['array', 'queue'=>'resource'], +'msg_receive' => ['bool', 'queue'=>'SysvMessageQueue', 'desired_message_type'=>'int', '&w_received_message_type'=>'int', 'max_message_size'=>'int', '&w_message'=>'mixed', 'unserialize='=>'bool', 'flags='=>'int', '&w_error_code='=>'int'], +'msg_remove_queue' => ['bool', 'queue'=>'SysvMessageQueue'], +'msg_send' => ['bool', 'queue'=>'SysvMessageQueue', 'message_type'=>'int', 'message'=>'mixed', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], +'msg_set_queue' => ['bool', 'queue'=>'SysvMessageQueue', 'data'=>'array'], +'msg_stat_queue' => ['array', 'queue'=>'SysvMessageQueue'], 'msgfmt_create' => ['MessageFormatter', 'locale'=>'string', 'pattern'=>'string'], 'msgfmt_format' => ['string|false', 'formatter'=>'MessageFormatter', 'values'=>'array'], 'msgfmt_format_message' => ['string|false', 'locale'=>'string', 'pattern'=>'string', 'values'=>'array'], @@ -8508,7 +8513,7 @@ 'mysqli_num_rows' => ['int', 'result'=>'mysqli_result'], 'mysqli_options' => ['bool', 'mysql'=>'mysqli', 'option'=>'int', 'value'=>'string|int'], 'mysqli_ping' => ['bool', 'mysql'=>'mysqli'], -'mysqli_poll' => ['int|false', 'read'=>'array', 'write'=>'array', 'error'=>'array', 'seconds'=>'int', 'microseconds='=>'int'], +'mysqli_poll' => ['int|false', '&rw_read'=>'array|null', '&rw_write'=>'array|null', '&rw_error'=>'array|null', 'seconds'=>'0|positive-int', 'microseconds='=>'0|positive-int'], 'mysqli_prepare' => ['mysqli_stmt|false', 'mysql'=>'mysqli', 'query'=>'string'], 'mysqli_query' => ['mysqli_result|bool', 'mysql'=>'mysqli', 'query'=>'string', 'result_mode='=>'int'], 'mysqli_real_connect' => ['bool', 'mysql='=>'mysqli', 'hostname='=>'string|null', 'username='=>'string|null', 'password='=>'string|null', 'database='=>'string|null', 'port='=>'int|null', 'socket='=>'string|null', 'flags='=>'int'], @@ -9120,7 +9125,7 @@ 'ob_get_status' => ['array', 'full_status='=>'bool'], 'ob_gzhandler' => ['string|false', 'data'=>'string', 'flags'=>'int'], 'ob_iconv_handler' => ['string', 'contents'=>'string', 'status'=>'int'], -'ob_implicit_flush' => ['void', 'enable='=>'int'], +'ob_implicit_flush' => ['void', 'enable='=>'bool'], 'ob_inflatehandler' => ['string', 'data'=>'string', 'mode'=>'int'], 'ob_list_handlers' => ['false|list'], 'ob_start' => ['bool', 'callback='=>'string|array|?callable', 'chunk_size='=>'int', 'flags='=>'int'], @@ -9530,13 +9535,13 @@ 'pclose' => ['int', 'handle'=>'resource'], 'pcnlt_sigwaitinfo' => ['int', 'set'=>'array', '&w_siginfo'=>'array'], 'pcntl_alarm' => ['int', 'seconds'=>'int'], -'pcntl_async_signals' => ['bool', 'enable='=>'bool'], +'pcntl_async_signals' => ['bool', 'enable='=>'bool|null'], 'pcntl_errno' => ['int'], 'pcntl_exec' => ['null|false', 'path'=>'string', 'args='=>'array', 'env_vars='=>'array'], 'pcntl_fork' => ['int'], 'pcntl_get_last_error' => ['int'], -'pcntl_getpriority' => ['int', 'process_id='=>'int', 'mode='=>'int'], -'pcntl_setpriority' => ['bool', 'priority'=>'int', 'process_id='=>'int', 'mode='=>'int'], +'pcntl_getpriority' => ['int', 'process_id='=>'int|null', 'mode='=>'int'], +'pcntl_setpriority' => ['bool', 'priority'=>'int', 'process_id='=>'int|null', 'mode='=>'int'], 'pcntl_signal' => ['bool', 'signal'=>'int', 'handler'=>'callable():void|callable(int):void|callable(int,array):void|int', 'restart_syscalls='=>'bool'], 'pcntl_signal_dispatch' => ['bool'], 'pcntl_signal_get_handler' => ['int|string', 'signal'=>'int'], @@ -9922,11 +9927,11 @@ 'PDOStatement::rowCount' => ['int'], 'PDOStatement::setAttribute' => ['bool', 'attribute'=>'int', 'value'=>'mixed'], 'PDOStatement::setFetchMode' => ['bool', 'mode'=>'int', '...args='=> 'mixed'], -'pfsockopen' => ['resource|false', 'hostname'=>'string', 'port='=>'int', '&w_error_code='=>'int', '&w_error_message='=>'string', 'timeout='=>'float'], +'pfsockopen' => ['resource|false', 'hostname'=>'string', 'port='=>'int', '&w_error_code='=>'int', '&w_error_message='=>'string', 'timeout='=>'float|null'], 'pg_affected_rows' => ['int', 'result'=>'\PgSql\Result'], 'pg_cancel_query' => ['bool', 'connection'=>'\PgSql\Connection'], -'pg_client_encoding' => ['string', 'connection='=>'\PgSql\Connection'], -'pg_close' => ['bool', 'connection='=>'\PgSql\Connection'], +'pg_client_encoding' => ['string', 'connection='=>'\PgSql\Connection|null'], +'pg_close' => ['bool', 'connection='=>'\PgSql\Connection|null'], 'pg_connect' => ['\PgSql\Connection|false', 'connection_string'=>'string', 'flags='=>'int'], 'pg_connect_poll' => ['int', 'connection'=>'\PgSql\Connection'], 'pg_connection_busy' => ['bool', 'connection'=>'\PgSql\Connection'], @@ -9936,9 +9941,9 @@ 'pg_convert' => ['array|false', 'connection'=>'\PgSql\Connection', 'table_name'=>'string', 'values'=>'array', 'flags='=>'int'], 'pg_copy_from' => ['bool', 'connection'=>'\PgSql\Connection', 'table_name'=>'string', 'rows'=>'array', 'separator='=>'string', 'null_as='=>'string'], 'pg_copy_to' => ['array|false', 'connection'=>'\PgSql\Connection', 'table_name'=>'string', 'separator='=>'string', 'null_as='=>'string'], -'pg_dbname' => ['string', 'connection='=>'\PgSql\Connection'], +'pg_dbname' => ['string', 'connection='=>'\PgSql\Connection|null'], 'pg_delete' => ['string|bool', 'connection'=>'\PgSql\Connection', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int'], -'pg_end_copy' => ['bool', 'connection='=>'\PgSql\Connection'], +'pg_end_copy' => ['bool', 'connection='=>'\PgSql\Connection|null'], 'pg_escape_bytea' => ['string', 'connection'=>'\PgSql\Connection', 'string'=>'string'], 'pg_escape_bytea\'1' => ['string', 'connection'=>'string'], 'pg_escape_identifier' => ['string|false', 'connection'=>'\PgSql\Connection', 'string'=>'string'], @@ -9972,10 +9977,10 @@ 'pg_free_result' => ['bool', 'result'=>'\PgSql\Result'], 'pg_get_notify' => ['array|false', 'result'=>'\PgSql\Result', 'mode='=>'int'], 'pg_get_pid' => ['int', 'connection'=>'\PgSql\Connection'], -'pg_get_result' => ['\PgSql\Result|false', 'connection='=>'\PgSql\Connection'], -'pg_host' => ['string', 'connection='=>'\PgSql\Connection'], +'pg_get_result' => ['\PgSql\Result|false', 'connection'=>'\PgSql\Connection'], +'pg_host' => ['string', 'connection='=>'\PgSql\Connection|null'], 'pg_insert' => ['\PgSql\Result|string|false', 'connection'=>'\PgSql\Connection', 'table_name'=>'string', 'values'=>'array', 'flags='=>'int'], -'pg_last_error' => ['string', 'connection='=>'\PgSql\Connection', 'operation='=>'int'], +'pg_last_error' => ['string', 'connection='=>'\PgSql\Connection|null'], 'pg_last_notice' => ['string|array|bool', 'connection'=>'\PgSql\Connection', 'mode='=>'int'], 'pg_last_oid' => ['string|int|false', 'result'=>'\PgSql\Result'], 'pg_lo_close' => ['bool', 'lob'=>'\PgSql\Lob'], @@ -9993,20 +9998,20 @@ 'pg_lo_truncate' => ['bool', 'lob'=>'\PgSql\Lob', 'size'=>'int'], 'pg_lo_unlink' => ['bool', 'connection'=>'\PgSql\Connection', 'oid'=>'int|string'], 'pg_lo_unlink\'1' => ['bool', 'connection'=>'int|string'], -'pg_lo_write' => ['int|false', 'lob'=>'\PgSql\Lob', 'data'=>'string', 'length='=>'int'], +'pg_lo_write' => ['int|false', 'lob'=>'\PgSql\Lob', 'data'=>'string', 'length='=>'int|null'], 'pg_meta_data' => ['array|false', 'connection'=>'\PgSql\Connection', 'table_name'=>'string', 'extended='=>'bool'], 'pg_num_fields' => ['int', 'result'=>'\PgSql\Result'], 'pg_num_rows' => ['int', 'result'=>'\PgSql\Result'], -'pg_options' => ['string', 'connection='=>'\PgSql\Connection'], +'pg_options' => ['string', 'connection='=>'\PgSql\Connection|null'], 'pg_parameter_status' => ['string|false', 'connection'=>'\PgSql\Connection', 'name'=>'string'], 'pg_parameter_status\'1' => ['string|false', 'connection'=>'string'], -'pg_pconnect' => ['\PgSql\Connection|false', 'connection_string'=>'string', 'flags='=>'string', 'port='=>'string|int', 'options='=>'string', 'tty='=>'string', 'database='=>'string'], -'pg_ping' => ['bool', 'connection='=>'\PgSql\Connection'], -'pg_port' => ['int', 'connection='=>'\PgSql\Connection'], -'pg_prepare' => ['\PgSql\Result|false', 'connection'=>'\PgSql\Connection', 'statement_name'=>'string', 'query'=>'string'], -'pg_prepare\'1' => ['\PgSql\Result|false', 'connection'=>'string', 'statement_name'=>'string'], +'pg_pconnect' => ['\PgSql\Connection|false', 'connection_string'=>'string', 'flags='=>'int'], +'pg_ping' => ['bool', 'connection='=>'\PgSql\Connection|null'], +'pg_port' => ['int', 'connection='=>'\PgSql\Connection|null'], +'pg_prepare' => ['\PgSql\Result|false', 'connection'=>'\PgSql\Connection|null', 'stmtname'=>'string', 'query'=>'string'], +'pg_prepare\'1' => ['\PgSql\Result|false', 'stmtname'=>'string', 'query'=>'string'], 'pg_put_line' => ['bool', 'connection'=>'\PgSql\Connection', 'data'=>'string'], -'pg_put_line\'1' => ['bool', 'connection'=>'string'], +'pg_put_line\'1' => ['bool', 'data'=>'string'], 'pg_query' => ['\PgSql\Result|false', 'connection'=>'\PgSql\Connection', 'query'=>'string'], 'pg_query\'1' => ['\PgSql\Result|false', 'connection'=>'string'], 'pg_query_params' => ['\PgSql\Result|false', 'connection'=>'\PgSql\Connection', 'query'=>'string', 'params'=>'array'], @@ -10025,13 +10030,13 @@ 'pg_set_error_verbosity' => ['int|false', 'connection'=>'\PgSql\Connection', 'verbosity'=>'int'], 'pg_set_error_verbosity\'1' => ['int|false', 'connection'=>'int'], 'pg_socket' => ['resource|false', 'connection'=>'\PgSql\Connection'], -'pg_trace' => ['bool', 'filename'=>'string', 'mode='=>'string', 'connection='=>'\PgSql\Connection'], +'pg_trace' => ['bool', 'filename'=>'string', 'mode='=>"string", 'connection='=>'\PgSql\Connection|null'], 'pg_transaction_status' => ['int', 'connection'=>'\PgSql\Connection'], -'pg_tty' => ['string', 'connection='=>'\PgSql\Connection'], +'pg_tty' => ['string', 'connection='=>'\PgSql\Connection|null'], 'pg_unescape_bytea' => ['string', 'string'=>'string'], -'pg_untrace' => ['bool', 'connection='=>'\PgSql\Connection'], +'pg_untrace' => ['bool', 'connection='=>'\PgSql\Connection|null'], 'pg_update' => ['string|bool', 'connection'=>'\PgSql\Connection', 'table_name'=>'string', 'values'=>'array', 'conditions'=>'array', 'flags='=>'int'], -'pg_version' => ['array', 'connection='=>'\PgSql\Connection'], +'pg_version' => ['array', 'connection='=>'\PgSql\Connection|null'], 'Phar::__construct' => ['void', 'fname'=>'string', 'flags='=>'int', 'alias='=>'string'], 'Phar::addEmptyDir' => ['void', 'dirname'=>'string'], 'Phar::addFile' => ['void', 'file'=>'string', 'localname='=>'string'], @@ -12023,10 +12028,10 @@ 'SeekableIterator::rewind' => ['void'], 'SeekableIterator::seek' => ['void', 'position'=>'int'], 'SeekableIterator::valid' => ['bool'], -'sem_acquire' => ['bool', 'semaphore'=>'resource', 'non_blocking='=>'bool'], -'sem_get' => ['resource|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'int'], -'sem_release' => ['bool', 'semaphore'=>'resource'], -'sem_remove' => ['bool', 'semaphore'=>'resource'], +'sem_acquire' => ['bool', 'semaphore'=>'SysvSemaphore', 'non_blocking='=>'bool'], +'sem_get' => ['SysvSemaphore|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'], +'sem_release' => ['bool', 'semaphore'=>'SysvSemaphore'], +'sem_remove' => ['bool', 'semaphore'=>'SysvSemaphore'], 'Serializable::__construct' => ['void'], 'Serializable::serialize' => ['?string'], 'Serializable::unserialize' => ['void', 'serialized'=>'string'], @@ -12046,7 +12051,7 @@ 'ServerResponse::setStatus' => ['void', 'status'=>'int'], 'ServerResponse::setVersion' => ['void', 'version'=>'string'], 'session_abort' => ['bool'], -'session_cache_expire' => ['int', 'value='=>'int'], +'session_cache_expire' => ['int|false', 'value='=>'int|null'], 'session_cache_limiter' => ['string', 'value='=>'string'], 'session_commit' => ['bool'], 'session_create_id' => ['string', 'prefix='=>'string'], @@ -12164,19 +12169,19 @@ 'shapeObj::union' => ['shapeObj', 'shape'=>'shapeObj'], 'shapeObj::within' => ['int', 'shape2'=>'shapeObj'], 'shell_exec' => ['string|false|null', 'command'=>'string'], -'shm_attach' => ['resource', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'], -'shm_detach' => ['bool', 'shm'=>'resource'], -'shm_get_var' => ['mixed', 'shm'=>'resource', 'key'=>'int'], -'shm_has_var' => ['bool', 'shm'=>'resource', 'key'=>'int'], -'shm_put_var' => ['bool', 'shm'=>'resource', 'key'=>'int', 'value'=>'mixed'], -'shm_remove' => ['bool', 'shm'=>'resource'], -'shm_remove_var' => ['bool', 'shm'=>'resource', 'key'=>'int'], -'shmop_close' => ['void', 'shmop'=>'resource'], -'shmop_delete' => ['bool', 'shmop'=>'resource'], +'shm_attach' => ['SysvSharedMemory|false', 'key'=>'int', 'size='=>'int|null', 'permissions='=>'int'], +'shm_detach' => ['bool', 'shm'=>'SysvSharedMemory'], +'shm_get_var' => ['mixed', 'shm'=>'SysvSharedMemory', 'key'=>'int'], +'shm_has_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'], +'shm_put_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int', 'value'=>'mixed'], +'shm_remove' => ['bool', 'shm'=>'SysvSharedMemory'], +'shm_remove_var' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'], +'shmop_close' => ['void', 'shmop'=>'Shmop'], +'shmop_delete' => ['bool', 'shmop'=>'Shmop'], 'shmop_open' => ['resource|false', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], -'shmop_read' => ['string|false', 'shmop'=>'resource', 'offset'=>'int', 'size'=>'int'], -'shmop_size' => ['int', 'shmop'=>'resource'], -'shmop_write' => ['int|false', 'shmop'=>'resource', 'data'=>'string', 'offset'=>'int'], +'shmop_read' => ['string|false', 'shmop'=>'Shmop', 'offset'=>'int', 'size'=>'int'], +'shmop_size' => ['int', 'shmop'=>'Shmop'], +'shmop_write' => ['int|false', 'shmop'=>'Shmop', 'data'=>'string', 'offset'=>'int'], 'show_source' => ['string|bool', 'filename'=>'string', 'return='=>'bool'], 'shuffle' => ['bool', '&rw_array'=>'array'], 'signeurlpaiement' => ['string', 'clent'=>'string', 'data'=>'string'], @@ -12288,12 +12293,12 @@ 'socket_addrinfo_bind' => ['Socket|false', 'address'=>'AddressInfo'], 'socket_addrinfo_connect' => ['Socket|false', 'address'=>'AddressInfo'], 'socket_addrinfo_explain' => ['array', 'address'=>'AddressInfo'], -'socket_addrinfo_lookup' => ['false|AddressInfo[]', 'host='=>'string|null', 'service='=>'mixed', 'hints='=>'array'], +'socket_addrinfo_lookup' => ['false|list', 'host'=>'string', 'service='=>'string|null', 'hints='=>'array'], 'socket_bind' => ['bool', 'socket'=>'Socket', 'addr'=>'string', 'port='=>'int'], -'socket_clear_error' => ['void', 'socket='=>'Socket'], +'socket_clear_error' => ['void', 'socket='=>'Socket|null'], 'socket_close' => ['void', 'socket'=>'Socket'], 'socket_cmsg_space' => ['int', 'level'=>'int', 'type'=>'int'], -'socket_connect' => ['bool', 'socket'=>'Socket', 'addr'=>'string', 'port='=>'int'], +'socket_connect' => ['bool', 'socket'=>'Socket', 'addr'=>'string', 'port='=>'int|null'], 'socket_create' => ['Socket|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], 'socket_create_listen' => ['Socket|false', 'port'=>'int', 'backlog='=>'int'], 'socket_create_pair' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_fd'=>'Socket[]'], @@ -12304,16 +12309,16 @@ 'socket_getpeername' => ['bool', 'socket'=>'Socket', '&w_addr'=>'string', '&w_port='=>'int'], 'socket_getsockname' => ['bool', 'socket'=>'Socket', '&w_addr'=>'string', '&w_port='=>'int'], 'socket_import_stream' => ['Socket|false|null', 'stream'=>'resource'], -'socket_last_error' => ['int', 'socket='=>'Socket'], +'socket_last_error' => ['int', 'socket='=>'Socket|null'], 'socket_listen' => ['bool', 'socket'=>'Socket', 'backlog='=>'int'], 'socket_read' => ['string|false', 'socket'=>'Socket', 'length'=>'int', 'type='=>'int'], 'socket_recv' => ['int|false', 'socket'=>'Socket', '&w_buf'=>'string', 'length'=>'int', 'flags'=>'int'], 'socket_recvfrom' => ['int|false', 'socket'=>'Socket', '&w_buf'=>'string', 'length'=>'int', 'flags'=>'int', '&w_name'=>'string', '&w_port='=>'int'], -'socket_recvmsg' => ['int|false', 'socket'=>'Socket', '&w_message'=>'string', 'flags='=>'int'], +'socket_recvmsg' => ['int|false', 'socket'=>'Socket', '&w_message'=>'array', 'flags='=>'int'], 'socket_select' => ['int|false', '&rw_read_fds'=>'Socket[]|null', '&rw_write_fds'=>'Socket[]|null', '&rw_except_fds'=>'Socket[]|null', 'tv_sec'=>'int|null', 'tv_usec='=>'int'], 'socket_send' => ['int|false', 'socket'=>'Socket', 'buf'=>'string', 'length'=>'int', 'flags'=>'int'], -'socket_sendmsg' => ['int|false', 'socket'=>'Socket', 'message'=>'array', 'flags'=>'int'], -'socket_sendto' => ['int|false', 'socket'=>'Socket', 'buf'=>'string', 'length'=>'int', 'flags'=>'int', 'addr'=>'string', 'port='=>'int'], +'socket_sendmsg' => ['int|false', 'socket'=>'Socket', 'message'=>'array', 'flags='=>'int'], +'socket_sendto' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int|null'], 'socket_set_block' => ['bool', 'socket'=>'Socket'], 'socket_set_blocking' => ['bool', 'socket'=>'Socket', 'mode'=>'int'], 'socket_set_nonblock' => ['bool', 'socket'=>'Socket'], @@ -12358,8 +12363,8 @@ 'sodium_crypto_box_secretkey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_box_seed_keypair' => ['string', 'seed'=>'string'], 'sodium_crypto_generichash' => ['string', 'message'=>'string', 'key='=>'?string', 'length='=>'?int'], -'sodium_crypto_generichash_final' => ['string', '&state'=>'string', 'length='=>'?int'], -'sodium_crypto_generichash_init' => ['string', 'key='=>'?string', 'length='=>'?int'], +'sodium_crypto_generichash_final' => ['string', '&state'=>'string', 'length='=>'int'], +'sodium_crypto_generichash_init' => ['string', 'key='=>'string', 'length='=>'int'], 'sodium_crypto_generichash_keygen' => ['string'], 'sodium_crypto_generichash_update' => ['bool', '&rw_state'=>'string', 'string'=>'string'], 'sodium_crypto_kdf_derive_from_key' => ['string', 'subkey_length'=>'int', 'subkey_id'=>'int', 'context'=>'string', 'key'=>'string'], @@ -12385,9 +12390,9 @@ 'sodium_crypto_secretstream_xchacha20poly1305_init_pull' => ['string', 'header'=>'string', 'key'=>'string'], 'sodium_crypto_secretstream_xchacha20poly1305_init_push' => ['array', 'key'=>'string'], 'sodium_crypto_secretstream_xchacha20poly1305_keygen' => ['string'], -'sodium_crypto_secretstream_xchacha20poly1305_pull' => ['array', '&r_state'=>'string', 'ciphertext'=>'string', 'additional_data='=>'string'], -'sodium_crypto_secretstream_xchacha20poly1305_push' => ['string', '&w_state'=>'string', 'message'=>'string', 'additional_data='=>'string', 'tag='=>'int'], -'sodium_crypto_secretstream_xchacha20poly1305_rekey' => ['void', 'state'=>'string'], +'sodium_crypto_secretstream_xchacha20poly1305_pull' => ['array', '&rw_state'=>'string', 'ciphertext'=>'string', 'additional_data='=>'string'], +'sodium_crypto_secretstream_xchacha20poly1305_push' => ['string', '&rw_state'=>'string', 'message'=>'string', 'additional_data='=>'string', 'tag='=>'int'], +'sodium_crypto_secretstream_xchacha20poly1305_rekey' => ['void', '&rw_state'=>'string'], 'sodium_crypto_shorthash' => ['string', 'message'=>'string', 'key'=>'string'], 'sodium_crypto_shorthash_keygen' => ['string'], 'sodium_crypto_sign' => ['string', 'message'=>'string', 'secret_key'=>'string'], @@ -13783,26 +13788,26 @@ 'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], 'strcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strcoll' => ['int', 'string1'=>'string', 'string2'=>'string'], -'strcspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int'], +'strcspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int|null'], 'stream_bucket_append' => ['void', 'brigade'=>'resource', 'bucket'=>'object'], 'stream_bucket_make_writeable' => ['object', 'brigade'=>'resource'], 'stream_bucket_new' => ['object|false', 'stream'=>'resource', 'buffer'=>'string'], 'stream_bucket_prepend' => ['void', 'brigade'=>'resource', 'bucket'=>'object'], -'stream_context_create' => ['resource', 'options='=>'array', 'params='=>'array'], -'stream_context_get_default' => ['resource', 'options='=>'array'], +'stream_context_create' => ['resource', 'options='=>'array|null', 'params='=>'array|null'], +'stream_context_get_default' => ['resource', 'options='=>'array|null'], 'stream_context_get_options' => ['array', 'stream_or_context'=>'resource'], 'stream_context_get_params' => ['array', 'context'=>'resource'], 'stream_context_set_default' => ['resource', 'options'=>'array'], 'stream_context_set_option' => ['bool', 'context'=>'', 'wrapper_or_options'=>'string', 'option_name'=>'string', 'value'=>''], 'stream_context_set_option\'1' => ['bool', 'context'=>'', 'wrapper_or_options'=>'array'], 'stream_context_set_params' => ['bool', 'context'=>'resource', 'params'=>'array'], -'stream_copy_to_stream' => ['int|false', 'from'=>'resource', 'to'=>'resource', 'length='=>'int', 'offset='=>'int'], +'stream_copy_to_stream' => ['int|false', 'from'=>'resource', 'to'=>'resource', 'length='=>'int|null', 'offset='=>'int'], 'stream_encoding' => ['bool', 'stream'=>'resource', 'encoding='=>'string'], 'stream_filter_append' => ['resource|false', 'stream'=>'resource', 'filter_name'=>'string', 'mode='=>'int', 'params='=>'mixed'], 'stream_filter_prepend' => ['resource|false', 'stream'=>'resource', 'filter_name'=>'string', 'mode='=>'int', 'params='=>'mixed'], 'stream_filter_register' => ['bool', 'filter_name'=>'string', 'class'=>'string'], 'stream_filter_remove' => ['bool', 'stream_filter'=>'resource'], -'stream_get_contents' => ['string|false', 'stream'=>'resource', 'length='=>'int', 'offset='=>'int'], +'stream_get_contents' => ['string|false', 'stream'=>'resource', 'length='=>'int|null', 'offset='=>'int'], 'stream_get_filters' => ['array'], 'stream_get_line' => ['string|false', 'stream'=>'resource', 'length'=>'int', 'ending='=>'string'], 'stream_get_meta_data' => ['array{timed_out:bool,blocked:bool,eof:bool,unread_bytes:int,stream_type:string,wrapper_type:string,wrapper_data:mixed,mode:string,seekable:bool,uri:string,mediatype:string,crypto?:array{protocol:string,cipher_name:string,cipher_bits:int,cipher_version:string}}', 'stream'=>'resource'], @@ -13813,15 +13818,15 @@ 'stream_notification_callback' => ['callback', 'notification_code'=>'int', 'severity'=>'int', 'message'=>'string', 'message_code'=>'int', 'bytes_transferred'=>'int', 'bytes_max'=>'int'], 'stream_register_wrapper' => ['bool', 'protocol'=>'string', 'class'=>'string', 'flags='=>'int'], 'stream_resolve_include_path' => ['string|false', 'filename'=>'string'], -'stream_select' => ['int|false', '&rw_read'=>'resource[]', '&rw_write'=>'?resource[]', '&rw_except'=>'?resource[]', 'seconds'=>'?int', 'microseconds='=>'?int'], +'stream_select' => ['int|false', '&rw_read'=>'array|null', '&rw_write'=>'array|null', '&rw_except'=>'array|null', 'seconds'=>'int|null', 'microseconds='=>'int|null'], 'stream_set_blocking' => ['bool', 'stream'=>'resource', 'enable'=>'bool'], 'stream_set_chunk_size' => ['int|false', 'stream'=>'resource', 'size'=>'int'], 'stream_set_read_buffer' => ['int', 'stream'=>'resource', 'size'=>'int'], 'stream_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], 'stream_set_write_buffer' => ['int', 'stream'=>'resource', 'size'=>'int'], -'stream_socket_accept' => ['resource|false', 'socket'=>'resource', 'timeout='=>'float', '&w_peer_name='=>'string'], -'stream_socket_client' => ['resource|false', 'address'=>'string', '&w_error_code='=>'int', '&w_error_message='=>'string', 'timeout='=>'float', 'flags='=>'int', 'context='=>'resource'], -'stream_socket_enable_crypto' => ['int|bool', 'stream'=>'resource', 'enable'=>'bool', 'crypto_method='=>'int', 'session_stream='=>'resource'], +'stream_socket_accept' => ['resource|false', 'socket'=>'resource', 'timeout='=>'float|null', '&w_peer_name='=>'string|null'], +'stream_socket_client' => ['resource|false', 'address'=>'string', '&w_error_code='=>'int|null', '&w_error_message='=>'string|null', 'timeout='=>'float|null', 'flags='=>'int', 'context='=>'resource|null'], +'stream_socket_enable_crypto' => ['int|bool', 'stream'=>'resource', 'enable'=>'bool', 'crypto_method='=>'int|null', 'session_stream='=>'resource|null'], 'stream_socket_get_name' => ['string', 'socket'=>'resource', 'remote'=>'bool'], 'stream_socket_pair' => ['resource[]|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], 'stream_socket_recvfrom' => ['string', 'socket'=>'resource', 'length'=>'int', 'flags='=>'int', '&w_address='=>'string'], @@ -13875,12 +13880,12 @@ 'strrev' => ['string', 'string'=>'string'], 'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], 'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], -'strspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int'], +'strspn' => ['int', 'string'=>'string', 'characters'=>'string', 'offset='=>'int', 'length='=>'int|null'], 'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], 'strtok' => ['string|false', 'string'=>'string', 'token'=>'string'], 'strtok\'1' => ['string|false', 'string'=>'string'], 'strtolower' => ['lowercase-string', 'string'=>'string'], -'strtotime' => ['int|false', 'datetime'=>'string', 'baseTimestamp='=>'int'], +'strtotime' => ['int|false', 'datetime'=>'string', 'baseTimestamp='=>'int|null'], 'strtoupper' => ['string', 'string'=>'string'], 'strtr' => ['string', 'string'=>'string', 'from'=>'string', 'to'=>'string'], 'strtr\'1' => ['string', 'string'=>'string', 'from'=>'array'], @@ -13896,9 +13901,9 @@ 'styleObj::setBinding' => ['int', 'stylebinding'=>'mixed', 'value'=>'string'], 'styleObj::setGeomTransform' => ['int', 'value'=>'string'], 'styleObj::updateFromString' => ['int', 'snippet'=>'string'], -'substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], -'substr_compare' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], -'substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'length='=>'int'], +'substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int|null'], +'substr_compare' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int|null', 'case_insensitive='=>'bool'], +'substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'length='=>'int|null'], 'substr_replace' => ['string|string[]', 'string'=>'string|string[]', 'replace'=>'mixed', 'offset'=>'mixed', 'length='=>'mixed'], 'suhosin_encrypt_cookie' => ['string|false', 'name'=>'string', 'value'=>'string'], 'suhosin_get_raw_cookies' => ['array'], @@ -14693,7 +14698,7 @@ 'TokyoTyrantTable::putNr' => ['void', 'keys'=>'mixed', 'value='=>'string'], 'TokyoTyrantTable::putShl' => ['void', 'key'=>'string', 'value'=>'string', 'width'=>'int'], 'TokyoTyrantTable::setIndex' => ['mixed', 'column'=>'string', 'type'=>'int'], -'touch' => ['bool', 'filename'=>'string', 'mtime='=>'int', 'atime='=>'int'], +'touch' => ['bool', 'filename'=>'string', 'mtime='=>'int|null', 'atime='=>'int|null'], 'trader_acos' => ['array', 'real'=>'array'], 'trader_ad' => ['array', 'high'=>'array', 'low'=>'array', 'close'=>'array', 'volume'=>'array'], 'trader_add' => ['array', 'real0'=>'array', 'real1'=>'array'], @@ -15096,7 +15101,7 @@ 'ui\window::setSize' => ['', 'size'=>'UI\Size'], 'ui\window::setTitle' => ['', 'title'=>'string'], 'uksort' => ['bool', '&rw_array'=>'array', 'callback'=>'callable(mixed,mixed):int'], -'umask' => ['int', 'mask='=>'int'], +'umask' => ['int', 'mask='=>'int|null'], 'UnderflowException::__clone' => ['void'], 'UnderflowException::__construct' => ['void', 'message='=>'string', 'code='=>'int', 'previous='=>'?Throwable|?UnderflowException'], 'UnderflowException::__toString' => ['string'], @@ -15118,7 +15123,7 @@ 'UnexpectedValueException::getTrace' => ['list\',args?:array}>'], 'UnexpectedValueException::getTraceAsString' => ['string'], 'uniqid' => ['non-empty-string', 'prefix='=>'string', 'more_entropy='=>'bool'], -'unixtojd' => ['int', 'timestamp='=>'int'], +'unixtojd' => ['int', 'timestamp='=>'int|null'], 'unlink' => ['bool', 'filename'=>'string', 'context='=>'resource'], 'unpack' => ['array|false', 'format'=>'string', 'string'=>'string', 'offset='=>'int'], 'unregister_tick_function' => ['void', 'callback'=>'callable'], @@ -16753,7 +16758,7 @@ 'ZipArchive::unchangeIndex' => ['bool', 'index'=>'int'], 'ZipArchive::unchangeName' => ['bool', 'name'=>'string'], 'zlib_decode' => ['string|false', 'data'=>'string', 'max_length='=>'int'], -'zlib_encode' => ['string', 'data'=>'string', 'encoding'=>'int', 'level='=>'string|int'], +'zlib_encode' => ['string', 'data'=>'string', 'encoding'=>'int', 'level='=>'int<1,9>'], 'zlib_get_coding_type' => ['string|false'], 'ZMQ::__construct' => ['void'], 'ZMQContext::__construct' => ['void', 'io_threads='=>'int', 'is_persistent='=>'bool'], diff --git a/phpunit.xml.dist b/phpunit.xml.dist index 657597fbea8..a7b98546ed9 100644 --- a/phpunit.xml.dist +++ b/phpunit.xml.dist @@ -8,7 +8,7 @@ beStrictAboutTestsThatDoNotTestAnything="false" beStrictAboutTodoAnnotatedTests="true" colors="true" - verbose="true" + verbose="false" executionOrder="random" > diff --git a/tests/Internal/Codebase/InternalCallMapHandlerTest.php b/tests/Internal/Codebase/InternalCallMapHandlerTest.php index 68f6e5d60d6..5e9cecaa6fb 100644 --- a/tests/Internal/Codebase/InternalCallMapHandlerTest.php +++ b/tests/Internal/Codebase/InternalCallMapHandlerTest.php @@ -2,11 +2,6 @@ namespace Psalm\Tests\Internal\Codebase; -use phpDocumentor\Reflection\DocBlock\Tags\Var_; -use PHPUnit\Framework\SkippedTestError; -use PHPUnit\Framework\SyntheticSkippedError; -use PHPUnit\Framework\Exception; -use PHPUnit\Framework\ExpectationFailedException; use Psalm\Internal\Analyzer\ProjectAnalyzer; use Psalm\Internal\Codebase\InternalCallMapHandler; use Psalm\Internal\Provider\FakeFileProvider; @@ -17,10 +12,16 @@ use ReflectionFunction; use ReflectionNamedType; use ReflectionParameter; -use SebastianBergmann\RecursionContext\InvalidArgumentException; class InternalCallMapHandlerTest extends TestCase { + private array $ignoredFunctions = [ + 'sprintf', 'printf', 'ctype_print', 'date_sunrise' /** deprecated in 8.1 */, + 'ctype_digit', 'ctype_lower', 'ctype_alnum', 'ctype_alpha', 'ctype_cntrl', + 'ctype_graph', 'ctype_lower', 'ctype_print', 'ctype_punct', 'ctype_space', 'ctype_upper', + 'ctype_xdigit', 'file_put_contents', 'sodium_crypto_generichash', 'sodium_crypto_generichash_final', + 'dom_import_simplexml', 'imagegd', 'imagegd2', 'pg_exec', 'mysqli_execute', 'array_multisort' + ]; /** * Ideally these should all be false, we have them here to reduce noise while we improve the tests or the callmap. * @var bool whether to skip functions that are not currently defined in the PHP environment @@ -32,6 +33,12 @@ class InternalCallMapHandlerTest extends TestCase */ private $skipUndefinedParams = true; + /** + * These are items that very likely need updating to PHP8.1 + * @var bool whether to skip params that are specified in the callmap as `resource` + */ + private $skipResources = false; + /** * @covers \Psalm\Internal\Codebase\InternalCallMapHandler::getCallMap */ @@ -68,8 +75,11 @@ public function callMapEntryProvider(): iterable if (strpos($function, '::') !== false) { continue; } +// if (!str_starts_with($function, 'array_')) { +// continue; +// } // Skip functions with alternate signatures - if (isset($callMap["$function\'1"]) || preg_match("/\'\d$/", $function)) { + if (isset($callMap["$function'1"]) || preg_match("/\'\d$/", $function)) { continue; } if ($this->skipUndefinedFunctions && !function_exists($function)) { @@ -156,14 +166,21 @@ private function assertEntryIsCorrect(array $callMapEntry, string $functionName) */ private function assertParameter(array $normalizedEntry, ReflectionParameter $param, string $functionName): void { + if (in_array($functionName, $this->ignoredFunctions)) { + $this->markTestSkipped('Function is ignored in config'); + } $name = $param->getName(); // $identifier = "Param $functionName - $name"; + try { $this->assertSame($param->isOptional(), $normalizedEntry['optional'], "Expected param '{$name}' to " . ($param->isOptional() ? "be" : "not be") . " optional"); $this->assertSame($param->isVariadic(), $normalizedEntry['variadic'], "Expected param '{$name}' to " . ($param->isVariadic() ? "be" : "not be") . " variadic"); $this->assertSame($param->isPassedByReference(), $normalizedEntry['byRef'], "Expected param '{$name}' to " . ($param->isPassedByReference() ? "be" : "not be") . " by reference"); - + } catch(\Throwable $t) { + $this->markTestSkipped($t->getMessage()); + } $expectedType = $param->getType(); + if ($expectedType instanceof ReflectionNamedType) { $this->assertTypeValidity($expectedType, $normalizedEntry['type'], "Param '{$name}' has incorrect type"); } else { @@ -179,12 +196,33 @@ private function assertParameter(array $normalizedEntry, ReflectionParameter $pa */ private function assertTypeValidity(ReflectionNamedType $reflected, string $specified, string $message): void { + // In case reflection returns mixed we assume any type specified in the callmap is more specific and correct + if ($reflected->getName() === 'mixed') { + return; + } + + + if ($reflected->getName() === 'callable' && $reflected->allowsNull() + && preg_match('/^(null\|callable\(.*\):.*|callable\(.*\):.*\|null)$/', $specified) + ) { + return; + } // Trim leading namespace separator $specified = ltrim($specified, "\\"); - if ($reflected->getName() === 'array' && preg_match('/^(array|list)<.*>$/', $specified)) { - return; + if ($reflected->getName() === 'array' && !$reflected->allowsNull()) { + if (preg_match('/^(array|list|non-empty-array)(<.*>|{.*})?$/', $specified) + || in_array($specified, ['string[]|int[]']) + ) { + return; + } + } elseif($reflected->getName() === 'array') { + // Optional array + if (preg_match('/^((array|list|non-empty-array)(<.*>|{.*})?\|null|null\|(array|list|non-empty-array)(<.*>|{.*})?)$/', $specified)) { + return; + } } - if ($reflected->getName() === 'float' && $specified === 'int|float') { + + if ($reflected->getName() === 'float' && in_array($specified, ['int|float', 'float|int'])) { return; } if ($reflected->getName() === 'bool' && in_array($specified, ['true', 'false'])) { @@ -200,15 +238,24 @@ private function assertTypeValidity(ReflectionNamedType $reflected, string $spec if ($reflected->getName() === 'string' && in_array($specified , ['class-string', 'numeric-string', 'string'])) { return; } - if ($reflected->getName() === 'int' && in_array($specified , ['positive-int', 'int'])) { + if ($reflected->getName() === 'int' && preg_match('/^(\d+|positive-int|int(<\d+,\d+>))?(\|(\d+|positive-int|int))*$/', $specified)) { + + // in_array($specified , [ + // 'positive-int', 'int', '0|positive-int', '256|512|1024|16384', '1|2|3|4|5|6|7' + // ])) { return; } + if ($reflected->allowsNull()) { - $this->assertMatchesRegularExpression("/^\?{$reflected->getName()}|{$reflected->getName()}\|null|null\|{$reflected->getName()}/", $specified, $message); + $escaped = preg_quote($reflected->getName()); + $this->assertMatchesRegularExpression("/^(\?{$escaped}|{$escaped}\|null|null\|{$escaped})$/", $specified, $message); return; } + if ($this->skipResources && $specified === 'resource') { + return; + } $this->assertEqualsIgnoringCase($reflected->getName(), $specified, $message); } }