From 43ec361d03c490471ebb7017d670bc4bd6481a97 Mon Sep 17 00:00:00 2001 From: hide_d Date: Tue, 12 Oct 2021 01:36:02 +0900 Subject: [PATCH] dep: update phan --- composer.lock | 14 +- vendor/composer/InstalledVersions.php | 10 +- vendor/composer/autoload_files.php | 2 +- vendor/composer/autoload_static.php | 2 +- vendor/composer/installed.json | 16 +- vendor/composer/installed.php | 10 +- vendor/phan/phan/.dockerignore | 28 + vendor/phan/phan/.phan/bin/mkfilelist | 0 vendor/phan/phan/.phan/bin/phan | 0 vendor/phan/phan/.phan/config.php | 5 + .../plugins/AddNeverReturnTypePlugin.php | 147 + .../.phan/plugins/AvoidableGetterPlugin.php | 2 +- .../.phan/plugins/DuplicateArrayKeyPlugin.php | 10 +- .../plugins/DuplicateExpressionPlugin.php | 8 +- .../plugins/EmptyStatementListPlugin.php | 16 +- .../phan/.phan/plugins/InlineHTMLPlugin.php | 2 +- .../InvokePHPNativeSyntaxCheckPlugin.php | 39 +- .../plugins/MoreSpecificElementTypePlugin.php | 3 + .../plugins/NotFullyQualifiedUsagePlugin.php | 8 +- .../NotFullyQualifiedUsagePlugin/fixers.php | 28 +- .../plugins/PHPDocInWrongCommentPlugin.php | 4 +- .../.phan/plugins/PhanSelfCheckPlugin.php | 6 +- .../.phan/plugins/PrintfCheckerPlugin.php | 4 +- vendor/phan/phan/.phan/plugins/README.md | 10 + .../plugins/RedundantAssignmentPlugin.php | 6 +- .../plugins/RemoveDebugStatementPlugin.php | 17 +- .../phan/.phan/plugins/SleepCheckerPlugin.php | 2 +- .../.phan/plugins/StrictComparisonPlugin.php | 2 +- .../plugins/SuspiciousParamOrderPlugin.php | 8 +- .../plugins/UnknownElementTypePlugin.php | 6 +- .../.phan/plugins/UnreachableCodePlugin.php | 3 +- .../phan/.phan/plugins/WhitespacePlugin.php | 6 +- vendor/phan/phan/NEWS.md | 60 + vendor/phan/phan/README.md | 5 +- vendor/phan/phan/azure-pipelines.yml | 5 - vendor/phan/phan/composer.json | 2 +- vendor/phan/phan/composer.lock | 73 +- vendor/phan/phan/phan_client | 10 +- vendor/phan/phan/prep | 0 vendor/phan/phan/src/Phan/AST/ContextNode.php | 27 +- .../src/Phan/AST/InferPureSnippetVisitor.php | 20 + .../phan/src/Phan/AST/InferPureVisitor.php | 6 +- .../Phan/AST/ScopeImpactCheckingVisitor.php | 45 +- .../TolerantASTConverter.php | 72 +- vendor/phan/phan/src/Phan/Analysis.php | 65 +- .../AssignOperatorAnalysisVisitor.php | 2 +- .../Analysis/AssignOperatorFlagVisitor.php | 2 +- .../Analysis/BinaryOperatorFlagVisitor.php | 5 +- .../Phan/Analysis/BlockExitStatusChecker.php | 35 +- .../src/Phan/Analysis/CompositionAnalyzer.php | 3 +- .../src/Phan/Analysis/ConditionVisitor.php | 52 +- .../ConditionVisitor/BinaryCondition.php | 5 + .../ConditionVisitor/ComparisonCondition.php | 60 + .../ConditionVisitor/EqualsCondition.php | 31 +- .../ConditionVisitor/HasTypeCondition.php | 6 + .../ConditionVisitor/IdenticalCondition.php | 33 +- .../ConditionVisitor/NotEqualsCondition.php | 39 +- .../ConditionVisitor/NotHasTypeCondition.php | 6 + .../NotIdenticalCondition.php | 43 +- .../Phan/Analysis/ConditionVisitorUtil.php | 27 +- .../Phan/Analysis/NegatedConditionVisitor.php | 9 +- .../Analysis/PostOrderAnalysisVisitor.php | 57 +- .../phan/src/Phan/BlockAnalysisVisitor.php | 15 +- vendor/phan/phan/src/Phan/Bootstrap.php | 1 + vendor/phan/phan/src/Phan/CLI.php | 66 +- vendor/phan/phan/src/Phan/Config.php | 10 +- vendor/phan/phan/src/Phan/Daemon/Request.php | 2 +- vendor/phan/phan/src/Phan/Issue.php | 11 +- .../src/Phan/Language/AnnotatedUnionType.php | 2 +- .../Phan/Language/Element/ClassConstant.php | 2 +- .../phan/src/Phan/Language/Element/Clazz.php | 128 +- .../phan/src/Phan/Language/Element/Func.php | 9 +- .../Language/Element/FunctionInterface.php | 8 +- .../Phan/Language/Element/FunctionTrait.php | 7 +- .../Phan/Language/Element/GlobalConstant.php | 5 +- .../Phan/Language/Element/GlobalVariable.php | 3 +- .../phan/src/Phan/Language/Element/Method.php | 48 +- .../src/Phan/Language/Element/Parameter.php | 4 +- .../src/Phan/Language/Element/Property.php | 2 +- .../src/Phan/Language/Element/Variable.php | 2 +- .../phan/src/Phan/Language/EmptyUnionType.php | 20 +- .../src/Phan/Language/FQSEN/AbstractFQSEN.php | 6 +- .../FullyQualifiedGlobalStructuralElement.php | 1 + .../Internal/FunctionSignatureMap.php | 1021 +++---- .../FunctionSignatureMapReal_php73.php | 2 +- .../FunctionSignatureMap_php70_delta.php | 386 +-- .../FunctionSignatureMap_php71_delta.php | 84 +- .../FunctionSignatureMap_php72_delta.php | 280 +- .../FunctionSignatureMap_php73_delta.php | 80 +- .../FunctionSignatureMap_php74_delta.php | 106 +- .../FunctionSignatureMap_php80_delta.php | 2572 +++++++++++------ .../FunctionSignatureMap_php81_delta.php | 14 +- .../src/Phan/Language/Scope/GlobalScope.php | 11 +- vendor/phan/phan/src/Phan/Language/Type.php | 14 +- .../Phan/Language/Type/CallableStringType.php | 2 +- .../Phan/Language/Type/ClassStringType.php | 12 + .../Type/FunctionLikeDeclarationType.php | 65 +- .../Phan/Language/Type/GenericArrayType.php | 2 +- .../Phan/Language/Type/IntersectionType.php | 89 +- .../Phan/Language/Type/LiteralFloatType.php | 7 +- .../src/Phan/Language/Type/LiteralIntType.php | 5 +- .../Phan/Language/Type/LiteralStringType.php | 22 +- .../src/Phan/Language/Type/NativeType.php | 8 +- .../Phan/Language/Type/NonEmptyStringType.php | 16 +- .../phan/phan/src/Phan/Language/UnionType.php | 108 +- .../Phan/LanguageServer/LanguageServer.php | 1 + .../phan/src/Phan/LanguageServer/Utils.php | 2 +- vendor/phan/phan/src/Phan/Library/None.php | 2 +- .../phan/phan/src/Phan/Library/StringUtil.php | 2 +- .../phan/phan/src/Phan/Parse/ParseVisitor.php | 23 +- .../phan/src/Phan/Plugin/ConfigPluginSet.php | 55 +- .../ArrayReturnTypeOverridePlugin.php | 6 +- .../Plugin/Internal/CallableParamPlugin.php | 2 +- .../Plugin/Internal/DependencyGraphPlugin.php | 75 +- .../DependentReturnTypeOverridePlugin.php | 10 +- .../Phan/Plugin/Internal/DumpPHPDocPlugin.php | 1 + ...endedDependentReturnTypeOverridePlugin.php | 2 +- .../Internal/IssueFixingPlugin/IssueFixer.php | 2 +- .../Internal/LoopVariableReuseVisitor.php | 2 +- .../Plugin/Internal/MethodSearcherPlugin.php | 5 + .../Internal/RedundantConditionVisitor.php | 8 +- .../Plugin/Internal/StringFunctionPlugin.php | 2 +- .../Plugin/Internal/UseReturnValuePlugin.php | 2 +- .../RedundantReturnVisitor.php | 2 +- .../UseReturnValueVisitor.php | 12 +- vendor/phan/phan/tool/dump_markdown_preview | 0 .../phan/tool/make_ctags_for_phan_project | 0 vendor/phan/phan/tool/make_stubs | 2 +- vendor/phan/phan/tool/pdep | 11 +- vendor/phan/phan/tool/phantasm | 1 + vendor/phan/phan/tool/phoogle | 3 +- 131 files changed, 4268 insertions(+), 2452 deletions(-) create mode 100644 vendor/phan/phan/.dockerignore mode change 100644 => 100755 vendor/phan/phan/.phan/bin/mkfilelist mode change 100644 => 100755 vendor/phan/phan/.phan/bin/phan create mode 100644 vendor/phan/phan/.phan/plugins/AddNeverReturnTypePlugin.php mode change 100644 => 100755 vendor/phan/phan/prep mode change 100644 => 100755 vendor/phan/phan/tool/dump_markdown_preview mode change 100644 => 100755 vendor/phan/phan/tool/make_ctags_for_phan_project mode change 100644 => 100755 vendor/phan/phan/tool/make_stubs mode change 100644 => 100755 vendor/phan/phan/tool/pdep mode change 100644 => 100755 vendor/phan/phan/tool/phantasm mode change 100644 => 100755 vendor/phan/phan/tool/phoogle diff --git a/composer.lock b/composer.lock index 3340defa..265d7589 100644 --- a/composer.lock +++ b/composer.lock @@ -1886,16 +1886,16 @@ }, { "name": "phan/phan", - "version": "5.0.0", + "version": "5.2.1", "source": { "type": "git", "url": "https://github.com/phan/phan.git", - "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90" + "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phan/phan/zipball/f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", - "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", + "url": "https://api.github.com/repos/phan/phan/zipball/d724bbb8fc3ba89179868bb5220ecdf6a9c1636b", + "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b", "shasum": "" }, "require": { @@ -1912,7 +1912,7 @@ "symfony/console": "^3.2|^4.0|^5.0", "symfony/polyfill-mbstring": "^1.11.0", "symfony/polyfill-php80": "^1.20.0", - "tysonandre/var_representation_polyfill": "^0.0.2" + "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0" }, "require-dev": { "phpunit/phpunit": "^8.5.0" @@ -1959,9 +1959,9 @@ ], "support": { "issues": "https://github.com/phan/phan/issues", - "source": "https://github.com/phan/phan/tree/5.0.0" + "source": "https://github.com/phan/phan/tree/5.2.1" }, - "time": "2021-08-01T18:17:28+00:00" + "time": "2021-09-15T00:08:40+00:00" }, { "name": "php-extended/php-system", diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php index 8ad2e145..acb4dd79 100644 --- a/vendor/composer/InstalledVersions.php +++ b/vendor/composer/InstalledVersions.php @@ -29,7 +29,7 @@ private static $installed = array ( 'aliases' => array ( ), - 'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', + 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278', 'name' => 'sammo-hid/sammo', ), 'versions' => @@ -315,12 +315,12 @@ private static $installed = array ( ), 'phan/phan' => array ( - 'pretty_version' => '5.0.0', - 'version' => '5.0.0.0', + 'pretty_version' => '5.2.1', + 'version' => '5.2.1.0', 'aliases' => array ( ), - 'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90', + 'reference' => 'd724bbb8fc3ba89179868bb5220ecdf6a9c1636b', ), 'php-extended/php-system' => array ( @@ -450,7 +450,7 @@ private static $installed = array ( 'aliases' => array ( ), - 'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', + 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278', ), 'scssphp/scssphp' => array ( diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php index 4a004267..650b3898 100644 --- a/vendor/composer/autoload_files.php +++ b/vendor/composer/autoload_files.php @@ -28,7 +28,7 @@ return array( 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', '6714be961f4a45ae8b9a99d5d55c5d07' => $vendorDir . '/tysonandre/var_representation_polyfill/src/var_representation.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', - '5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php', 'ef65a1626449d89d0811cf9befce46f0' => $vendorDir . '/illuminate/events/functions.php', + '5b154887902198b16314243c6e0e3e19' => $vendorDir . '/pguardiario/phpuri/phpuri.php', '870dc64919afa8b0f700701bb2c6a783' => $baseDir . '/f_config/config.php', ); diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index cee6874c..d89f49f7 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -29,8 +29,8 @@ class ComposerStaticInit67b09c83b85c3bc0027caefe5bba171a 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', '6714be961f4a45ae8b9a99d5d55c5d07' => __DIR__ . '/..' . '/tysonandre/var_representation_polyfill/src/var_representation.php', '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', - '5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php', 'ef65a1626449d89d0811cf9befce46f0' => __DIR__ . '/..' . '/illuminate/events/functions.php', + '5b154887902198b16314243c6e0e3e19' => __DIR__ . '/..' . '/pguardiario/phpuri/phpuri.php', '870dc64919afa8b0f700701bb2c6a783' => __DIR__ . '/../..' . '/f_config/config.php', ); diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json index 9657e378..1e032978 100644 --- a/vendor/composer/installed.json +++ b/vendor/composer/installed.json @@ -1948,17 +1948,17 @@ }, { "name": "phan/phan", - "version": "5.0.0", - "version_normalized": "5.0.0.0", + "version": "5.2.1", + "version_normalized": "5.2.1.0", "source": { "type": "git", "url": "https://github.com/phan/phan.git", - "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90" + "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phan/phan/zipball/f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", - "reference": "f36b6b9a2f4143a25f35ce94d712ceb0527e9d90", + "url": "https://api.github.com/repos/phan/phan/zipball/d724bbb8fc3ba89179868bb5220ecdf6a9c1636b", + "reference": "d724bbb8fc3ba89179868bb5220ecdf6a9c1636b", "shasum": "" }, "require": { @@ -1975,7 +1975,7 @@ "symfony/console": "^3.2|^4.0|^5.0", "symfony/polyfill-mbstring": "^1.11.0", "symfony/polyfill-php80": "^1.20.0", - "tysonandre/var_representation_polyfill": "^0.0.2" + "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0" }, "require-dev": { "phpunit/phpunit": "^8.5.0" @@ -1988,7 +1988,7 @@ "ext-tokenizer": "Needed for fallback/polyfill parser support and file/line-based suppressions.", "ext-var_representation": "Suggested for converting values to strings in issue messages" }, - "time": "2021-08-01T18:17:28+00:00", + "time": "2021-09-15T00:08:40+00:00", "bin": [ "phan", "phan_client", @@ -2024,7 +2024,7 @@ ], "support": { "issues": "https://github.com/phan/phan/issues", - "source": "https://github.com/phan/phan/tree/5.0.0" + "source": "https://github.com/phan/phan/tree/5.2.1" }, "install-path": "../phan/phan" }, diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index 5248015f..18beb265 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -6,7 +6,7 @@ 'aliases' => array ( ), - 'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', + 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278', 'name' => 'sammo-hid/sammo', ), 'versions' => @@ -292,12 +292,12 @@ ), 'phan/phan' => array ( - 'pretty_version' => '5.0.0', - 'version' => '5.0.0.0', + 'pretty_version' => '5.2.1', + 'version' => '5.2.1.0', 'aliases' => array ( ), - 'reference' => 'f36b6b9a2f4143a25f35ce94d712ceb0527e9d90', + 'reference' => 'd724bbb8fc3ba89179868bb5220ecdf6a9c1636b', ), 'php-extended/php-system' => array ( @@ -427,7 +427,7 @@ 'aliases' => array ( ), - 'reference' => '40a20a55d3aa08f0ab58a50b0572b17dce33de80', + 'reference' => 'cf3f40b5787b2a1aed9255775143108ef5b1f278', ), 'scssphp/scssphp' => array ( diff --git a/vendor/phan/phan/.dockerignore b/vendor/phan/phan/.dockerignore new file mode 100644 index 00000000..8c458950 --- /dev/null +++ b/vendor/phan/phan/.dockerignore @@ -0,0 +1,28 @@ +.git/ +internal/PHP_CodeSniffer +tests/docker +tests/run_all_tests_dockerized +.git +vendor +.phan/data +composer.phar +\#*# +build +report +samples +all_output.* +.vscode/ +*.joblog +*.swo +*.swp +*.zip +tags +.phan/config.local.php +nohup.out +*.md.new +.idea/ +src_copy +out/ +phpspy.* +.phpunit.result.cache +errors.txt diff --git a/vendor/phan/phan/.phan/bin/mkfilelist b/vendor/phan/phan/.phan/bin/mkfilelist old mode 100644 new mode 100755 diff --git a/vendor/phan/phan/.phan/bin/phan b/vendor/phan/phan/.phan/bin/phan old mode 100644 new mode 100755 diff --git a/vendor/phan/phan/.phan/config.php b/vendor/phan/phan/.phan/config.php index 9e3191ae..bfc393ab 100644 --- a/vendor/phan/phan/.phan/config.php +++ b/vendor/phan/phan/.phan/config.php @@ -393,12 +393,15 @@ return [ 'tool/phan_repl_helpers.php', 'internal/dump_fallback_ast.php', 'internal/dump_html_styles.php', + 'internal/emit_signature_map_for_php_version.php', 'internal/extract_arg_info.php', + 'internal/flatten_signature_map.php', 'internal/internalsignatures.php', 'internal/line_deleter.php', 'internal/package.php', 'internal/reflection_completeness_check.php', 'internal/sanitycheck.php', + 'internal/sort_signature_map.php', 'vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php', 'vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php', 'vendor/phpdocumentor/reflection-docblock/src/DocBlock.php', @@ -651,6 +654,8 @@ return [ 'RemoveDebugStatementPlugin', 'UnsafeCodePlugin', 'DeprecateAliasPlugin', + // Suggest '@return never' + '.phan/plugins/AddNeverReturnTypePlugin.php', // Still have false positives to suppress // '.phan/plugins/StaticVariableMisusePlugin.php', diff --git a/vendor/phan/phan/.phan/plugins/AddNeverReturnTypePlugin.php b/vendor/phan/phan/.phan/plugins/AddNeverReturnTypePlugin.php new file mode 100644 index 00000000..86ea64ce --- /dev/null +++ b/vendor/phan/phan/.phan/plugins/AddNeverReturnTypePlugin.php @@ -0,0 +1,147 @@ +getFQSEN() !== $method->getDefiningFQSEN()) { + // Check if this was inherited by a descendant class. + return; + } + + if ($method->getUnionType()->hasType(NeverType::instance(false))) { + return; + } + if ($method->isOverriddenByAnother()) { + return; + } + + // This modifies the nodes in place, check this last + if (!BlockExitStatusChecker::willUnconditionallyNeverReturn($stmts_list)) { + return; + } + self::emitIssue( + $code_base, + $method->getContext(), + 'PhanPluginNeverReturnMethod', + "Method {METHOD} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead", + [$method->getRepresentationForIssue(), $method->getUnionType(), 'never'] + ); + } + + /** + * @param CodeBase $code_base + * The code base in which the function exists + * + * @param Func $function + * A function or closure being analyzed + * + * @override + */ + public function analyzeFunction( + CodeBase $code_base, + Func $function + ): void { + $stmts_list = self::getStatementListToAnalyze($function); + if ($stmts_list === null) { + // check for abstract methods, generators, etc. + return; + } + + if ($function->getUnionType()->hasType(NeverType::instance(false))) { + return; + } + // This modifies the nodes in place, check this last + if (!BlockExitStatusChecker::willUnconditionallyNeverReturn($stmts_list)) { + return; + } + self::emitIssue( + $code_base, + $function->getContext(), + 'PhanPluginNeverReturnFunction', + "Function {FUNCTION} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead", + [$function->getRepresentationForIssue(), $function->getUnionType(), 'never'] + ); + } + + /** + * @param Func|Method $func + * @return ?Node - returns null if there's no statement list to analyze + */ + private static function getStatementListToAnalyze($func): ?Node + { + if (!$func->hasNode()) { + return null; + } elseif ($func->hasYield()) { + // generators always return Generator. + return null; + } + $node = $func->getNode(); + if (!$node) { + return null; + } + return $node->children['stmts']; + } +} + +// Every plugin needs to return an instance of itself at the +// end of the file in which it's defined. +return new NeverReturnPlugin(); diff --git a/vendor/phan/phan/.phan/plugins/AvoidableGetterPlugin.php b/vendor/phan/phan/.phan/plugins/AvoidableGetterPlugin.php index 2a852fc7..9f3c190d 100644 --- a/vendor/phan/phan/.phan/plugins/AvoidableGetterPlugin.php +++ b/vendor/phan/phan/.phan/plugins/AvoidableGetterPlugin.php @@ -116,7 +116,7 @@ class AvoidableGetterVisitor extends PluginAwarePostAnalysisVisitor $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), $issue_name, "Can replace {METHOD} with {PROPERTY}", [ASTReverter::toShortString($node), '$this->' . $property_name] diff --git a/vendor/phan/phan/.phan/plugins/DuplicateArrayKeyPlugin.php b/vendor/phan/phan/.phan/plugins/DuplicateArrayKeyPlugin.php index 9210a568..67961563 100644 --- a/vendor/phan/phan/.phan/plugins/DuplicateArrayKeyPlugin.php +++ b/vendor/phan/phan/.phan/plugins/DuplicateArrayKeyPlugin.php @@ -95,7 +95,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor $normalized_case_cond = is_object($case_cond) ? ASTReverter::toShortString($case_cond) : self::normalizeSwitchKey($case_cond); $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($case_node->lineno), + (clone $this->context)->withLineNumberStart($case_node->lineno), 'PhanPluginDuplicateSwitchCase', "Duplicate/Equivalent switch case({STRING_LITERAL}) detected in switch statement - the later entry will be ignored in favor of case {CODE} at line {LINE}.", [$normalized_case_cond, ASTReverter::toShortString($case_constant_set[$cond_key]->children['cond']), $case_constant_set[$cond_key]->lineno], @@ -171,7 +171,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor if ($old_index !== null) { $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($children[$i]->lineno), + (clone $this->context)->withLineNumberStart($children[$i]->lineno), 'PhanPluginDuplicateSwitchCaseLooseEquality', "Switch case({STRING_LITERAL}) is loosely equivalent (==) to an earlier case ({STRING_LITERAL}) in switch statement - the earlier entry may be chosen instead.", [self::normalizeSwitchKey($values_to_check[$i]), self::normalizeSwitchKey($values_to_check[$old_index])], @@ -227,7 +227,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor $normalized_arm_expr_cond = ASTReverter::toShortString($arm_expr_cond); $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($lineno), + (clone $this->context)->withLineNumberStart($lineno), 'PhanPluginDuplicateMatchArmExpression', "Duplicate match arm expression({STRING_LITERAL}) detected in match expression - the later entry will be ignored in favor of expression {CODE} at line {LINE}.", [$normalized_arm_expr_cond, ASTReverter::toShortString($arm_expr_constant_set[$cond_key][0]), $arm_expr_constant_set[$cond_key][1]], @@ -302,7 +302,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor if (is_string($key) && strncmp($key, self::HASH_PREFIX, strlen(self::HASH_PREFIX)) === 0) { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($entry->lineno), + (clone $this->context)->withLineNumberStart($entry->lineno), 'PhanPluginDuplicateArrayKeyExpression', "Duplicate dynamic array key expression ({CODE}) detected in array - the earlier entry at line {LINE} will be ignored if the expression had the same value.", [ASTReverter::toShortString($entry->children['key']), $old_entry->lineno], @@ -315,7 +315,7 @@ class DuplicateArrayKeyVisitor extends PluginAwarePostAnalysisVisitor $normalized_key = self::normalizeKey($key); $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($entry->lineno), + (clone $this->context)->withLineNumberStart($entry->lineno), 'PhanPluginDuplicateArrayKey', "Duplicate/Equivalent array key value({STRING_LITERAL}) detected in array - the earlier entry {CODE} at line {LINE} will be ignored.", [$normalized_key, ASTReverter::toShortString($old_entry->children['key']), $old_entry->lineno], diff --git a/vendor/phan/phan/.phan/plugins/DuplicateExpressionPlugin.php b/vendor/phan/phan/.phan/plugins/DuplicateExpressionPlugin.php index 1abc652b..366cc732 100644 --- a/vendor/phan/phan/.phan/plugins/DuplicateExpressionPlugin.php +++ b/vendor/phan/phan/.phan/plugins/DuplicateExpressionPlugin.php @@ -351,7 +351,7 @@ class RedundantNodePostAnalysisVisitor extends PluginAwarePostAnalysisVisitor if ($hash === $prev_hash) { $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($child->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($child->lineno ?? $node->lineno), 'PhanPluginDuplicateAdjacentStatement', "Statement {CODE} is a duplicate of the statement on the above line. Suppress this issue instance if there's a good reason for this.", [ASTReverter::toShortString($child)] @@ -476,7 +476,7 @@ class RedundantNodePreAnalysisVisitor extends PluginAwarePreAnalysisVisitor if (isset($condition_set[$cond_hash])) { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($cond->lineno ?? $children[$i]->lineno), + (clone $this->context)->withLineNumberStart($cond->lineno ?? $children[$i]->lineno), 'PhanPluginDuplicateIfCondition', 'Saw the same condition {CODE} in an earlier if/elseif statement', [ASTReverter::toShortString($cond)] @@ -490,7 +490,7 @@ class RedundantNodePreAnalysisVisitor extends PluginAwarePreAnalysisVisitor if (($stmts->children ?? null) && ASTHasher::hash($stmts) === ASTHasher::hash($children[$N - 2]->children['stmts'])) { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($children[$N - 1]->lineno), + (clone $this->context)->withLineNumberStart($children[$N - 1]->lineno), 'PhanPluginDuplicateIfStatements', 'The statements of the else duplicate the statements of the previous if/elseif statement with condition {CODE}', [ASTReverter::toShortString($children[$N - 2]->children['cond'])] @@ -522,7 +522,7 @@ class RedundantNodePreAnalysisVisitor extends PluginAwarePreAnalysisVisitor if ($prev_hash === $cur_hash) { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($catches[$i]->lineno), + (clone $this->context)->withLineNumberStart($catches[$i]->lineno), 'PhanPluginDuplicateCatchStatementBody', 'The implementation of catch({CODE}) and catch({CODE}) are identical, and can be combined if the application only needs to supports php 7.1 and newer', [ diff --git a/vendor/phan/phan/.phan/plugins/EmptyStatementListPlugin.php b/vendor/phan/phan/.phan/plugins/EmptyStatementListPlugin.php index fe25598d..73ad8770 100644 --- a/vendor/phan/phan/.phan/plugins/EmptyStatementListPlugin.php +++ b/vendor/phan/phan/.phan/plugins/EmptyStatementListPlugin.php @@ -111,7 +111,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($last_if_elem->children['stmts']->lineno ?? $last_if_elem->lineno), + (clone $this->context)->withLineNumberStart($last_if_elem->children['stmts']->lineno ?? $last_if_elem->lineno), 'PhanPluginEmptyStatementIf', 'Empty statement list statement detected for the last if/elseif statement', [] @@ -188,7 +188,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), 'PhanPluginEmptyStatementForLoop', 'Empty statement list statement detected for the for loop', [] @@ -216,7 +216,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($stmts_node->lineno ?? $node->lineno), 'PhanPluginEmptyStatementWhileLoop', 'Empty statement list statement detected for the while loop', [] @@ -244,7 +244,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($stmts_node->lineno), + (clone $this->context)->withLineNumberStart($stmts_node->lineno), 'PhanPluginEmptyStatementDoWhileLoop', 'Empty statement list statement detected for the do-while loop', [] @@ -273,7 +273,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($stmts_node->lineno), + (clone $this->context)->withLineNumberStart($stmts_node->lineno), 'PhanPluginEmptyStatementForeachLoop', 'Empty statement list statement detected for the foreach loop', [] @@ -292,7 +292,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor if (!$this->hasTODOComment($try_node->lineno, $node, $node->children['catches']->children[0]->lineno ?? $finally_node->lineno ?? null)) { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($try_node->lineno), + (clone $this->context)->withLineNumberStart($try_node->lineno), 'PhanPluginEmptyStatementTryBody', 'Empty statement list statement detected for the try statement\'s body', [] @@ -303,7 +303,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor if (!$this->hasTODOComment($finally_node->lineno, $node)) { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($finally_node->lineno), + (clone $this->context)->withLineNumberStart($finally_node->lineno), 'PhanPluginEmptyStatementTryFinally', 'Empty statement list statement detected for the try\'s finally body', [] @@ -348,7 +348,7 @@ final class EmptyStatementListVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), 'PhanPluginEmptyStatementSwitch', 'No side effects seen for any cases of this switch statement', [] diff --git a/vendor/phan/phan/.phan/plugins/InlineHTMLPlugin.php b/vendor/phan/phan/.phan/plugins/InlineHTMLPlugin.php index 2a8dcb73..fcab2dcc 100644 --- a/vendor/phan/phan/.phan/plugins/InlineHTMLPlugin.php +++ b/vendor/phan/phan/.phan/plugins/InlineHTMLPlugin.php @@ -126,7 +126,7 @@ class InlineHTMLPlugin extends PluginV3 implements } $this->emitIssue( $code_base, - clone($context)->withLineNumberStart($token[2]), + (clone $context)->withLineNumberStart($token[2]), $issue, $message, [StringUtil::jsonEncode(self::truncate($token[1]))] diff --git a/vendor/phan/phan/.phan/plugins/InvokePHPNativeSyntaxCheckPlugin.php b/vendor/phan/phan/.phan/plugins/InvokePHPNativeSyntaxCheckPlugin.php index e78608ec..1ee07197 100644 --- a/vendor/phan/phan/.phan/plugins/InvokePHPNativeSyntaxCheckPlugin.php +++ b/vendor/phan/phan/.phan/plugins/InvokePHPNativeSyntaxCheckPlugin.php @@ -144,7 +144,7 @@ class InvokePHPNativeSyntaxCheckPlugin extends PluginV3 implements self::emitIssue( $code_base, - clone($context)->withLineNumberStart($lineno), + (clone $context)->withLineNumberStart($lineno), 'PhanNativePHPSyntaxCheckPlugin', 'Saw error or notice for {FILE} --syntax-check: {DETAILS}', [ @@ -182,6 +182,9 @@ class InvokeExecutionPromise /** @var string the raw bytes from stdout with serialized data */ private $raw_stdout = ''; + /** @var string */ + private $fallback_error = ''; + /** @var Context has the file name being analyzed */ private $context; @@ -190,7 +193,7 @@ class InvokeExecutionPromise public function __construct(string $binary, string $file_contents, Context $context) { - $this->context = clone($context); + $this->context = clone $context; $new_file_contents = Parser::removeShebang($file_contents); // TODO: Use symfony process // Note: We might have invalid utf-8, ensure that the streams are opened in binary mode. @@ -252,7 +255,10 @@ class InvokeExecutionPromise } $this->process = $process; - self::streamPutContents($pipes[0], $new_file_contents); + error_clear_last(); + if (!self::streamPutContents($pipes[0], $new_file_contents)) { + $this->fallback_error = \error_get_last()['message'] ?? ''; + } } $this->pipes = $pipes; @@ -290,17 +296,18 @@ class InvokeExecutionPromise /** * @param resource $stream stream to write $file_contents to before fclose() * @param string $file_contents - * @return void * See https://bugs.php.net/bug.php?id=39598 */ - private static function streamPutContents($stream, string $file_contents): void + private static function streamPutContents($stream, string $file_contents): bool { try { while (strlen($file_contents) > 0) { - $bytes_written = fwrite($stream, $file_contents); + $bytes_written = with_disabled_phan_error_handler(/** @return int|false */ static function () use ($stream, $file_contents) { + return @fwrite($stream, $file_contents); + }); if ($bytes_written === false) { - error_log('failed to write in ' . __METHOD__); - return; + CLI::printWarningToStderr('failed to write in ' . __METHOD__); + return false; } if ($bytes_written === 0) { $read_streams = []; @@ -316,8 +323,8 @@ class InvokeExecutionPromise // $stream is ready to be written to? $bytes_written = fwrite($stream, $file_contents); if (!$bytes_written) { - error_log('failed to write in ' . __METHOD__ . ' but the stream should be ready'); - return; + CLI::printToStderr('failed to write in ' . __METHOD__ . ' but the stream should be ready'); + return false; } } if ($bytes_written > 0) { @@ -327,6 +334,7 @@ class InvokeExecutionPromise } finally { fclose($stream); } + return true; } /** @@ -390,6 +398,14 @@ class InvokeExecutionPromise if (!$this->done) { throw new RangeException("Called " . __METHOD__ . " too early"); } + if ($this->error === '') { + // There was an error running the process, but no output to stdout. + $result = "No output was detected. Is " . var_representation($this->binary) . " a relative or absolute path to an executable PHP binary?"; + if ($this->fallback_error !== '') { + $result .= ' Error sending file contents to syntax check: ' . $this->fallback_error; + } + return $result; + } return $this->error; } @@ -409,6 +425,9 @@ class InvokeExecutionPromise return $this->binary; } + /** + * @return never + */ public function __wakeup() { $this->tmp_path = null; diff --git a/vendor/phan/phan/.phan/plugins/MoreSpecificElementTypePlugin.php b/vendor/phan/phan/.phan/plugins/MoreSpecificElementTypePlugin.php index ae6c3db3..6b54aa94 100644 --- a/vendor/phan/phan/.phan/plugins/MoreSpecificElementTypePlugin.php +++ b/vendor/phan/phan/.phan/plugins/MoreSpecificElementTypePlugin.php @@ -111,6 +111,9 @@ class MoreSpecificElementTypePlugin extends PluginV3 implements if ($declared_return_type->isStrictSubtypeOf($code_base, $actual_type)) { return false; } + if (!$actual_type->isStrictSubtypeOf($code_base, $declared_return_type)) { + return false; + } if (!$actual_type->canCastToUnionType($declared_return_type, $code_base)) { // Don't warn here about type mismatches such as int->string or object->array, but do warn about SubClass->BaseClass. // Phan should warn elsewhere about those mismatches diff --git a/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin.php b/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin.php index d689fafd..a5324937 100644 --- a/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin.php +++ b/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin.php @@ -134,7 +134,7 @@ class NotFullyQualifiedUsageVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($expression->lineno), + (clone $this->context)->withLineNumberStart($expression->lineno), $issue_type, $issue_msg, [$function_name, $this->context->getNamespace()] @@ -167,7 +167,9 @@ class NotFullyQualifiedUsageVisitor extends PluginAwarePostAnalysisVisitor } $constant_name_lower = strtolower($constant_name); if ($constant_name_lower === 'true' || $constant_name_lower === 'false' || $constant_name_lower === 'null') { - // These are keywords and are the same in any namespace + // These are treated similarly to keywords and are either + // 1. the same in any namespace + // 2. `use somethingelse\true [as false];` return; } @@ -183,7 +185,7 @@ class NotFullyQualifiedUsageVisitor extends PluginAwarePostAnalysisVisitor { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($expression->lineno), + (clone $this->context)->withLineNumberStart($expression->lineno), self::NotFullyQualifiedGlobalConstant, 'Expected usage of {CONST} to be fully qualified or have a use statement but none were found in namespace {NAMESPACE}', [$constant_name, $this->context->getNamespace()] diff --git a/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin/fixers.php b/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin/fixers.php index ae68baaa..764d7e99 100644 --- a/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin/fixers.php +++ b/vendor/phan/phan/.phan/plugins/NotFullyQualifiedUsagePlugin/fixers.php @@ -4,6 +4,8 @@ declare(strict_types=1); use Microsoft\PhpParser\Node\Expression\CallExpression; use Microsoft\PhpParser\Node\QualifiedName; +use Microsoft\PhpParser\Node\ReservedWord; +use Microsoft\PhpParser\Token; use Phan\AST\TolerantASTConverter\NodeUtils; use Phan\CodeBase; use Phan\IssueInstance; @@ -29,15 +31,26 @@ call_user_func(static function (): void { $expected_name = $instance->getTemplateParameters()[0]; $edits = []; foreach ($contents->getNodesAtLine($line) as $node) { - if (!$node instanceof QualifiedName) { + if ($node instanceof QualifiedName) { + if ($node->globalSpecifier || $node->relativeSpecifier) { + IssueFixer::debug("skip already globally or relatively specified\n"); + // This is already qualified + continue; + } + $actual_name = (new NodeUtils($contents->getContents()))->phpParserNameToString($node); + } elseif ($node instanceof ReservedWord) { + // A reserved word in other contexts such as 'float' + $token = $node->children; + if (!$token instanceof Token) { + continue; + } + $actual_name = (new NodeUtils($contents->getContents()))->tokenToString($token); + } else { + IssueFixer::debug("skip wrong node kind " . get_class($node) . "\n"); continue; } - if ($node->globalSpecifier || $node->relativeSpecifier) { - // This is already qualified - continue; - } - $actual_name = (new NodeUtils($contents->getContents()))->phpParserNameToString($node); if ($actual_name !== $expected_name) { + IssueFixer::debug("skip '$actual_name' !== '$expected_name'\n"); continue; } $is_actual_call = $node->parent instanceof CallExpression; @@ -58,7 +71,8 @@ call_user_func(static function (): void { } else { // Don't do this if the global function this refers to doesn't exist. // TODO: Support namespaced functions - if (!$code_base->hasGlobalConstantWithFQSEN(FullyQualifiedGlobalConstantName::fromFullyQualifiedString($actual_name))) { + if (!$code_base->hasGlobalConstantWithFQSEN(FullyQualifiedGlobalConstantName::fromFullyQualifiedString($actual_name)) && + !in_array(strtolower($actual_name), ['null', 'true', 'false'], true)) { IssueFixer::debug("skip attempt to fix $actual_name because the constant was not found in the global scope\n"); return null; } diff --git a/vendor/phan/phan/.phan/plugins/PHPDocInWrongCommentPlugin.php b/vendor/phan/phan/.phan/plugins/PHPDocInWrongCommentPlugin.php index 45eabf26..45f7f8ce 100644 --- a/vendor/phan/phan/.phan/plugins/PHPDocInWrongCommentPlugin.php +++ b/vendor/phan/phan/.phan/plugins/PHPDocInWrongCommentPlugin.php @@ -55,7 +55,7 @@ class PHPDocInWrongCommentPlugin extends PluginV3 implements if ($comment_string[0] === '#' && substr($comment_string, 1, 1) !== '[') { $this->emitIssue( $code_base, - (clone($context))->withLineNumberStart($token[2]), + (clone $context)->withLineNumberStart($token[2]), 'PhanPluginPHPDocHashComment', 'Saw comment starting with {COMMENT} in {COMMENT} - consider using {COMMENT} instead to avoid confusion with php 8.0 {COMMENT} attributes', ['#', StringUtil::jsonEncode(self::truncate(trim($comment_string))), '//', '#['] @@ -76,7 +76,7 @@ class PHPDocInWrongCommentPlugin extends PluginV3 implements } $this->emitIssue( $code_base, - (clone($context))->withLineNumberStart($token[2]), + (clone $context)->withLineNumberStart($token[2]), 'PhanPluginPHPDocInWrongComment', 'Saw possible phpdoc annotation in ordinary block comment {COMMENT}. PHPDoc comments should start with "/**" (followed by whitespace), not "/*"', [StringUtil::jsonEncode(self::truncate($comment_string))] diff --git a/vendor/phan/phan/.phan/plugins/PhanSelfCheckPlugin.php b/vendor/phan/phan/.phan/plugins/PhanSelfCheckPlugin.php index 27bf534d..7563d7fa 100644 --- a/vendor/phan/phan/.phan/plugins/PhanSelfCheckPlugin.php +++ b/vendor/phan/phan/.phan/plugins/PhanSelfCheckPlugin.php @@ -60,7 +60,7 @@ class PhanSelfCheckPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil ) use ( $fmt_index, $arg_index -): void { + ): void { if (\count($args) <= $fmt_index) { return; } @@ -96,7 +96,7 @@ class PhanSelfCheckPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil ) use ( $type_index, $arg_index -): void { + ): void { if (\count($args) <= $type_index) { return; } @@ -136,7 +136,7 @@ class PhanSelfCheckPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil ) use ( $type_index, $arg_index -): void { + ): void { if (\count($args) <= $type_index) { return; } diff --git a/vendor/phan/phan/.phan/plugins/PrintfCheckerPlugin.php b/vendor/phan/phan/.phan/plugins/PrintfCheckerPlugin.php index 849dc05c..7b9aceec 100644 --- a/vendor/phan/phan/.phan/plugins/PrintfCheckerPlugin.php +++ b/vendor/phan/phan/.phan/plugins/PrintfCheckerPlugin.php @@ -706,8 +706,8 @@ class PrintfCheckerPlugin extends PluginV3 implements AnalyzeFunctionCallCapabil * @param CodeBase $code_base * @param Context $context * @param string $fmt_str - * @param ConversionSpec[][] $types_of_arg contains array of ConversionSpec for - * each position in the untranslated format string. + * @param associative-array> $types_of_arg contains array of ConversionSpec for + * each position in the untranslated format string. */ protected static function validateTranslations(CodeBase $code_base, Context $context, string $fmt_str, array $types_of_arg): void { diff --git a/vendor/phan/phan/.phan/plugins/README.md b/vendor/phan/phan/.phan/plugins/README.md index 4d4a1816..b591ac57 100644 --- a/vendor/phan/phan/.phan/plugins/README.md +++ b/vendor/phan/phan/.phan/plugins/README.md @@ -596,6 +596,16 @@ This is only useful in applications or libraries that print output in only a few Suppression comments can use the issue name `PhanPluginRemoveDebugAny` to suppress all issue types emitted by this plugin. +#### AddNeverReturnTypePlugin.php + +This plugin checks if a function or method will not return (and has no overrides). +If the function doesn't have a return type of never. +then this plugin will emit an issue. +Closures and short error functions are currently not checked + +- **PhanPluginNeverReturnMethod**: `Method {METHOD} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead` +- **PhanPluginNeverReturnFunction**: `Function {FUNCTION} never returns and has a return type of {TYPE}, but phpdoc type {TYPE} could be used instead` + ### 4. Demo plugins: These files demonstrate plugins for Phan. diff --git a/vendor/phan/phan/.phan/plugins/RedundantAssignmentPlugin.php b/vendor/phan/phan/.phan/plugins/RedundantAssignmentPlugin.php index 16c53948..24ba6034 100644 --- a/vendor/phan/phan/.phan/plugins/RedundantAssignmentPlugin.php +++ b/vendor/phan/phan/.phan/plugins/RedundantAssignmentPlugin.php @@ -121,7 +121,7 @@ class RedundantAssignmentPreAnalysisVisitor extends PluginAwarePreAnalysisVisito $issue_name = 'PhanPluginRedundantAssignment'; } if ($this->context->isInLoop()) { - $this->context->deferCheckToOutermostLoop(function (Context $context_after_loop) use ($issue_name, $var_name, $variable_type): void { + $this->context->deferCheckToOutermostLoop(function (Context $context_after_loop) use ($issue_name, $var_name, $variable_type, $var): void { $new_variable = $context_after_loop->getScope()->getVariableByNameOrNull($var_name); if (!$new_variable) { return; @@ -135,7 +135,7 @@ class RedundantAssignmentPreAnalysisVisitor extends PluginAwarePreAnalysisVisito } $this->emitPluginIssue( $this->code_base, - $this->context, + (clone $this->context)->withLineNumberStart($var->lineno), $issue_name, 'Assigning {TYPE} to variable ${VARIABLE} which already has that value', [$variable_type, $var_name] @@ -145,7 +145,7 @@ class RedundantAssignmentPreAnalysisVisitor extends PluginAwarePreAnalysisVisito } $this->emitPluginIssue( $this->code_base, - $this->context, + (clone $this->context)->withLineNumberStart($var->lineno), $issue_name, 'Assigning {TYPE} to variable ${VARIABLE} which already has that value', [$expr_type, $var_name] diff --git a/vendor/phan/phan/.phan/plugins/RemoveDebugStatementPlugin.php b/vendor/phan/phan/.phan/plugins/RemoveDebugStatementPlugin.php index 759cf599..a5daf655 100644 --- a/vendor/phan/phan/.phan/plugins/RemoveDebugStatementPlugin.php +++ b/vendor/phan/phan/.phan/plugins/RemoveDebugStatementPlugin.php @@ -38,7 +38,10 @@ class RemoveDebugStatementPlugin extends PluginV3 implements */ public function getAnalyzeFunctionCallClosures(CodeBase $code_base): array { - $warn_remove_debug_call = static function (CodeBase $code_base, Context $context, FunctionInterface $function): void { + $warn_remove_debug_call = static function (CodeBase $code_base, Context $context, FunctionInterface $function, ?Node $node): void { + if ($node) { + $context = (clone $context)->withLineNumberStart($node->lineno); + } self::emitIssue( $code_base, $context, @@ -55,12 +58,12 @@ class RemoveDebugStatementPlugin extends PluginV3 implements Context $context, Func $function, array $unused_args, - ?Node $unused_node = null + ?Node $node = null ) use ($warn_remove_debug_call): void { if (self::shouldSuppressDebugIssues($code_base, $context)) { return; } - $warn_remove_debug_call($code_base, $context, $function); + $warn_remove_debug_call($code_base, $context, $function, $node); }; /** * @param list $args the nodes for the arguments to the invocation @@ -71,7 +74,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements Context $context, Func $function, array $args, - ?Node $unused_node = null + ?Node $node = null ) use ($warn_remove_debug_call): void { if (self::shouldSuppressDebugIssues($code_base, $context)) { return; @@ -84,7 +87,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements return; } } - $warn_remove_debug_call($code_base, $context, $function); + $warn_remove_debug_call($code_base, $context, $function, $node); }; /** @@ -95,7 +98,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements Context $context, Func $function, array $args, - ?Node $unused_node = null + ?Node $node = null ) use ($warn_remove_debug_call): void { $file = $args[0] ?? null; if (!$file instanceof Node || $file->kind !== ast\AST_CONST || !in_array($file->children['name']->children['name'] ?? null, ['STDOUT', 'STDERR'], true)) { @@ -106,7 +109,7 @@ class RemoveDebugStatementPlugin extends PluginV3 implements return; } - $warn_remove_debug_call($code_base, $context, $function); + $warn_remove_debug_call($code_base, $context, $function, $node); }; return [ diff --git a/vendor/phan/phan/.phan/plugins/SleepCheckerPlugin.php b/vendor/phan/phan/.phan/plugins/SleepCheckerPlugin.php index 9cfbec3e..554e3cc6 100644 --- a/vendor/phan/phan/.phan/plugins/SleepCheckerPlugin.php +++ b/vendor/phan/phan/.phan/plugins/SleepCheckerPlugin.php @@ -149,7 +149,7 @@ class SleepCheckerVisitor extends PluginAwarePostAnalysisVisitor */ private function analyzeReturnValue($expr_node, int $lineno, array &$sleep_properties): void { - $context = clone($this->context)->withLineNumberStart($lineno); + $context = (clone $this->context)->withLineNumberStart($lineno); if (!($expr_node instanceof Node)) { $this->emitPluginIssue( $this->code_base, diff --git a/vendor/phan/phan/.phan/plugins/StrictComparisonPlugin.php b/vendor/phan/phan/.phan/plugins/StrictComparisonPlugin.php index 8dcd74b9..9d9957b3 100644 --- a/vendor/phan/phan/.phan/plugins/StrictComparisonPlugin.php +++ b/vendor/phan/phan/.phan/plugins/StrictComparisonPlugin.php @@ -60,7 +60,7 @@ class StrictComparisonPlugin extends PluginV3 implements $index, $index_name, $min_args -): void { + ): void { if (count($args) < $min_args) { return; } diff --git a/vendor/phan/phan/.phan/plugins/SuspiciousParamOrderPlugin.php b/vendor/phan/phan/.phan/plugins/SuspiciousParamOrderPlugin.php index 58a779d7..93b935c9 100644 --- a/vendor/phan/phan/.phan/plugins/SuspiciousParamOrderPlugin.php +++ b/vendor/phan/phan/.phan/plugins/SuspiciousParamOrderPlugin.php @@ -201,7 +201,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor if ($function->isPHPInternal()) { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), self::SuspiciousParamOrderInternal, 'Suspicious order for arguments named {DETAILS} - These are being passed to parameters {DETAILS} of {FUNCTION}', [ @@ -213,7 +213,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor } else { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), self::SuspiciousParamOrder, 'Suspicious order for arguments named {DETAILS} - These are being passed to parameters {DETAILS} of {FUNCTION} defined at {FILE}:{LINE}', [ @@ -280,7 +280,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor if ($function->isPHPInternal()) { $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($args[$i]->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($args[$i]->lineno ?? $node->lineno), self::SuspiciousParamPositionInternal, 'Suspicious order for argument {DETAILS} - This is getting passed to parameter {DETAILS} of {FUNCTION}', [ @@ -292,7 +292,7 @@ class SuspiciousParamOrderVisitor extends PluginAwarePostAnalysisVisitor } else { $this->emitPluginIssue( $this->code_base, - clone($this->context)->withLineNumberStart($args[$i]->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($args[$i]->lineno ?? $node->lineno), self::SuspiciousParamPosition, 'Suspicious order for argument {DETAILS} - This is getting passed to parameter {DETAILS} of {FUNCTION} defined at {FILE}:{LINE}', [ diff --git a/vendor/phan/phan/.phan/plugins/UnknownElementTypePlugin.php b/vendor/phan/phan/.phan/plugins/UnknownElementTypePlugin.php index dc7aa411..aa23b4fd 100644 --- a/vendor/phan/phan/.phan/plugins/UnknownElementTypePlugin.php +++ b/vendor/phan/phan/.phan/plugins/UnknownElementTypePlugin.php @@ -132,7 +132,8 @@ class UnknownElementTypePlugin extends PluginV3 implements $inferred_types[$i] = $combined_type; } } - } + }, + $this ); } @@ -350,7 +351,8 @@ class UnknownElementTypePlugin extends PluginV3 implements $inferred_types[$i] = $combined_type; } } - } + }, + $this ); } diff --git a/vendor/phan/phan/.phan/plugins/UnreachableCodePlugin.php b/vendor/phan/phan/.phan/plugins/UnreachableCodePlugin.php index 2932f67a..7c0a22da 100644 --- a/vendor/phan/phan/.phan/plugins/UnreachableCodePlugin.php +++ b/vendor/phan/phan/.phan/plugins/UnreachableCodePlugin.php @@ -93,7 +93,6 @@ final class UnreachableCodeVisitor extends PluginAwarePostAnalysisVisitor continue; } } - $context = clone($this->context)->withLineNumberStart($next_node->lineno); if ($this->context->isInFunctionLikeScope()) { if ($this->context->getFunctionLikeInScope($this->code_base)->checkHasSuppressIssueAndIncrementCount('PhanPluginUnreachableCode')) { // don't emit the below issue. @@ -102,7 +101,7 @@ final class UnreachableCodeVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - $context, + (clone $this->context)->withLineNumberStart($next_node->lineno), 'PhanPluginUnreachableCode', 'Unreachable statement detected', [] diff --git a/vendor/phan/phan/.phan/plugins/WhitespacePlugin.php b/vendor/phan/phan/.phan/plugins/WhitespacePlugin.php index d768671b..af81ae2c 100644 --- a/vendor/phan/phan/.phan/plugins/WhitespacePlugin.php +++ b/vendor/phan/phan/.phan/plugins/WhitespacePlugin.php @@ -54,7 +54,7 @@ class WhitespacePlugin extends PluginV3 implements if ($newline_position !== false) { self::emitIssue( $code_base, - clone($context)->withLineNumberStart(self::calculateLine($file_contents, $newline_position)), + (clone $context)->withLineNumberStart(self::calculateLine($file_contents, $newline_position)), self::CarriageReturn, 'The first occurrence of a carriage return ("\r") was seen here. Running "dos2unix" can fix that.' ); @@ -63,7 +63,7 @@ class WhitespacePlugin extends PluginV3 implements if ($tab_position !== false) { self::emitIssue( $code_base, - clone($context)->withLineNumberStart(self::calculateLine($file_contents, $tab_position)), + (clone $context)->withLineNumberStart(self::calculateLine($file_contents, $tab_position)), self::Tab, 'The first occurrence of a tab was seen here. Running "expand" can fix that.' ); @@ -71,7 +71,7 @@ class WhitespacePlugin extends PluginV3 implements if (preg_match('/[ \t]\r?$/mS', $file_contents, $match, PREG_OFFSET_CAPTURE)) { self::emitIssue( $code_base, - clone($context)->withLineNumberStart(self::calculateLine($file_contents, $match[0][1])), + (clone $context)->withLineNumberStart(self::calculateLine($file_contents, $match[0][1])), self::WhitespaceTrailing, 'The first occurrence of trailing whitespace was seen here.' ); diff --git a/vendor/phan/phan/NEWS.md b/vendor/phan/phan/NEWS.md index b4cfc429..539fb67b 100644 --- a/vendor/phan/phan/NEWS.md +++ b/vendor/phan/phan/NEWS.md @@ -1,5 +1,65 @@ Phan NEWS +Sep 14 2021, Phan 5.2.1 +----------------------- + +New Features: +- Improve analysis of conditions detecting the empty/non-empty array. (#4523) + E.g. support `if ($x === []) {...} else {...}`, `if (count($x) > 0) {...} else {...}`, etc. +- Raise severity of `PhanTypeNonVarPassByRef` to critical. It throws an Error in php 8.0+. (#3830) +- Infer from conditions such as `in_array($var, $array, true)` that $array is a non-empty array and that $var is of a type found in the elements of $array. (#2511) + +Plugins: +- Emit a proper warning when `InvokePHPNativeSyntaxCheckPlugin` is passed a path to a php binary that is missing or invalid (or if the syntax check crashed). (#4116) + Previously, Phan would crash with an error such as `fwrite(): write of 8196 bytes failed with errno=32 Broken pipe` +- Fix false positive `PhanPluginMoreSpecificActualReturnType` for phpdoc array shape return type and returned generic array. (#4531) + +Bug fixes: +- Fix type inference logic that was looking for array specializations rather than array or any array subtype (#4512) +- Fix false positive `PhanUnreferencedClosure`/`PhanUnreferencedFunction` seen when a closure/function name was passed to a function such as `uasort` that already had a plugin analyzing calls of the closure. (#4090, #4519) +- Fix false positive/negative `PhanTypeMissingReturn*` instances. (#4537) + + The check was wrong and should have been checking for a statement list that throws/exits. + Return statements can be omitted if a function unconditionally exits. + + Also, check for the real `never` return type when emitting issues +- Fix false positive `PhanPossiblyUndefinedGlobalVariable*` instance when `global $var` is used within a conditional. (#4539) +- Fix false positive `PhanPluginRedundantAssignmentInLoop` instance when a variable is modified in a catch statement with a break/continue. (#4542) +- Fix some incorrect line numbers in some plugin issues. +- Fix crash seen when parsing intersection types containing union types such as `non-empty-array&array<'a'|'b'>` (#4544) + +Maintenance: +- Fix old return type signature for `get_headers` (#3273) +- Print instructions on how to upgrade php-ast to 1.0.11+ if an outdated version is installed. (#4532) + +Aug 26 2021, Phan 5.2.0 +----------------------- + +Plugins: +- Add `AddNeverReturnTypePlugin`` which will suggest adding a phpdoc return type of `@return never`. (#4468) + +Bug fixes: +- When using the polyfill parser, properly parse nullable class property declarations as nullable. (#4492) +- Don't emit PhanIncompatibleRealPropertyType for private base property. (#4426) +- Fix false positive where a method overriding an existing method could be treated as having overrides. (#4502) +- Consistently support `numeric-string` in all phpdoc +- Fix false positive `PhanTypeMismatchPropertyDefaultReal` warning for literal integer and `float` typed property. (#4507) +- Fix false positive warnings such as `PhanImpossibleTypeComparison` about string subtypes not casting to other string subtypes (#4514) + +Maintenance: +- Change internal representation of FunctionSignatureMap delta files. +- Add a new exit status bit flag to `BlockExitStatusChecker` to indicate that a function will exit or infinitely loop (`STATUS_NORETURN`) (#4468) +- Internally represent the base function map using php 8.0 signatures instead of php 7.3 - applying deltas backwards has the same result (#4478) + +Aug 07 2021, Phan 5.1.0 +----------------------- + +New Features (Analysis): +- Support running Phan 5 with AST version 80 instead of 85 but warn about php-ast being outdated. + +Documentation: +- Update documentation of `--target-php-version` and `--minimum-target-php-version` + Aug 01 2021, Phan 5.0.0 ----------------------- diff --git a/vendor/phan/phan/README.md b/vendor/phan/phan/README.md index 2daa79b8..4b96c7ed 100644 --- a/vendor/phan/phan/README.md +++ b/vendor/phan/phan/README.md @@ -5,13 +5,12 @@ information is available or can be deduced. Phan has a good (but not comprehensi and can track values in a few use cases (e.g. arrays, integers, and strings). [![Build Status](https://dev.azure.com/tysonandre775/phan/_apis/build/status/phan.phan?branchName=v5)](https://dev.azure.com/tysonandre775/phan/_build/latest?definitionId=3&branchName=v5) +[![Build Status](https://github.com/phan/phan/actions/workflows/main.yml/badge.svg?branch=v5)](https://github.com/phan/phan/actions/workflows/main.yml?query=branch%3Av5) [![Build Status (Windows)](https://ci.appveyor.com/api/projects/status/github/phan/phan?branch=v5&svg=true)](https://ci.appveyor.com/project/TysonAndre/phan/branch/v5) [![Gitter](https://badges.gitter.im/phan/phan.svg)](https://gitter.im/phan/phan?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Latest Stable Version](https://img.shields.io/packagist/v/phan/phan.svg)](https://packagist.org/packages/phan/phan) [![License](https://img.shields.io/packagist/l/phan/phan.svg)](https://github.com/phan/phan/blob/v5/LICENSE) -This is the unstable branch for an upcoming Phan 5 release. The branch for the older stable Phan 4 release line is [here](https://github.com/phan/phan/tree/v4). - # Getting Started The easiest way to use Phan is via Composer. @@ -23,7 +22,7 @@ composer require phan/phan With Phan installed, you'll want to [create a `.phan/config.php` file](https://github.com/phan/phan/wiki/Getting-Started#creating-a-config-file) in your project to tell Phan how to analyze your source code. Once configured, you can run it via `./vendor/bin/phan`. -Phan depends on PHP 7.2+ with the [php-ast](https://github.com/nikic/php-ast) extension (1.0.14+ is preferred) and supports analyzing PHP version 7.0-8.1 syntax. +Phan 5 depends on PHP 7.2+ with the [php-ast](https://github.com/nikic/php-ast) extension (1.0.14+ is preferred) and supports analyzing PHP version 7.0-8.1 syntax. Installation instructions for php-ast can be found [here](https://github.com/nikic/php-ast#installation). (Phan can be used without php-ast by using the CLI option `--allow-polyfill-parser`, but there are slight differences in the parsing of doc comments) diff --git a/vendor/phan/phan/azure-pipelines.yml b/vendor/phan/phan/azure-pipelines.yml index 2de594c3..4d62d754 100644 --- a/vendor/phan/phan/azure-pipelines.yml +++ b/vendor/phan/phan/azure-pipelines.yml @@ -6,11 +6,6 @@ trigger: - v5 jobs: - - template: .azure/job.yml - parameters: - configurationName: PHP_72_NTS - phpVersion: 7.2 - vmImage: 'ubuntu-16.04' - template: .azure/job.yml parameters: configurationName: PHP_73_NTS diff --git a/vendor/phan/phan/composer.json b/vendor/phan/phan/composer.json index 5781780a..a3fa7811 100644 --- a/vendor/phan/phan/composer.json +++ b/vendor/phan/phan/composer.json @@ -35,7 +35,7 @@ "symfony/console": "^3.2|^4.0|^5.0", "symfony/polyfill-mbstring": "^1.11.0", "symfony/polyfill-php80": "^1.20.0", - "tysonandre/var_representation_polyfill": "^0.0.2" + "tysonandre/var_representation_polyfill": "^0.0.2|^0.1.0" }, "suggest": { "ext-ast": "Needed for parsing ASTs (unless --use-fallback-parser is used). 1.0.1+ is needed, 1.0.14+ is recommended.", diff --git a/vendor/phan/phan/composer.lock b/vendor/phan/phan/composer.lock index 1b4c998c..f69dded0 100644 --- a/vendor/phan/phan/composer.lock +++ b/vendor/phan/phan/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "cc0af707fc392b3959172556c6e575f4", + "content-hash": "9b0f8da866a879ae2b1c4847a19ea935", "packages": [ { "name": "composer/semver", @@ -616,16 +616,16 @@ }, { "name": "symfony/console", - "version": "v5.3.6", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2" + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/51b71afd6d2dc8f5063199357b9880cea8d8bfe2", - "reference": "51b71afd6d2dc8f5063199357b9880cea8d8bfe2", + "url": "https://api.github.com/repos/symfony/console/zipball/8b1008344647462ae6ec57559da166c2bfa5e16a", + "reference": "8b1008344647462ae6ec57559da166c2bfa5e16a", "shasum": "" }, "require": { @@ -695,7 +695,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.3.6" + "source": "https://github.com/symfony/console/tree/v5.3.7" }, "funding": [ { @@ -711,7 +711,7 @@ "type": "tidelift" } ], - "time": "2021-07-27T19:10:22+00:00" + "time": "2021-08-25T20:02:16+00:00" }, { "name": "symfony/deprecation-contracts", @@ -1347,16 +1347,16 @@ }, { "name": "symfony/string", - "version": "v5.3.3", + "version": "v5.3.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1" + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", - "reference": "bd53358e3eccec6a670b5f33ab680d8dbe1d4ae1", + "url": "https://api.github.com/repos/symfony/string/zipball/8d224396e28d30f81969f083a58763b8b9ceb0a5", + "reference": "8d224396e28d30f81969f083a58763b8b9ceb0a5", "shasum": "" }, "require": { @@ -1410,7 +1410,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v5.3.3" + "source": "https://github.com/symfony/string/tree/v5.3.7" }, "funding": [ { @@ -1426,20 +1426,20 @@ "type": "tidelift" } ], - "time": "2021-06-27T11:44:38+00:00" + "time": "2021-08-26T08:00:08+00:00" }, { "name": "tysonandre/var_representation_polyfill", - "version": "0.0.2", + "version": "0.1.1", "source": { "type": "git", "url": "https://github.com/TysonAndre/var_representation_polyfill.git", - "reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33" + "reference": "0a942e74e18af5514749895507bc6ca7ab96399a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/3f17999ee1f257319ddc6721dd26ebbc5d175f33", - "reference": "3f17999ee1f257319ddc6721dd26ebbc5d175f33", + "url": "https://api.github.com/repos/TysonAndre/var_representation_polyfill/zipball/0a942e74e18af5514749895507bc6ca7ab96399a", + "reference": "0a942e74e18af5514749895507bc6ca7ab96399a", "shasum": "" }, "require": { @@ -1450,6 +1450,9 @@ "phan/phan": "^4.0", "phpunit/phpunit": "^8.5.0" }, + "suggest": { + "ext-var_representation": "*" + }, "type": "library", "autoload": { "psr-4": { @@ -1468,16 +1471,16 @@ "name": "Tyson Andre" } ], - "description": "Polyfill for var_representation", + "description": "Polyfill for var_representation: convert a variable to a string in a way that fixes the shortcomings of var_export", "keywords": [ "var_export", "var_representation" ], "support": { "issues": "https://github.com/TysonAndre/var_representation_polyfill/issues", - "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.0.2" + "source": "https://github.com/TysonAndre/var_representation_polyfill/tree/0.1.1" }, - "time": "2021-06-26T18:55:02+00:00" + "time": "2021-08-16T00:12:50+00:00" }, { "name": "webmozart/assert", @@ -1779,33 +1782,33 @@ }, { "name": "phpspec/prophecy", - "version": "1.13.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/phpspec/prophecy.git", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea" + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea", - "reference": "be1996ed8adc35c3fd795488a653f4b518be70ea", + "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", "shasum": "" }, "require": { "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.1", + "php": "^7.2 || ~8.0, <8.2", "phpdocumentor/reflection-docblock": "^5.2", "sebastian/comparator": "^3.0 || ^4.0", "sebastian/recursion-context": "^3.0 || ^4.0" }, "require-dev": { - "phpspec/phpspec": "^6.0", + "phpspec/phpspec": "^6.0 || ^7.0", "phpunit/phpunit": "^8.0 || ^9.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.11.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -1840,9 +1843,9 @@ ], "support": { "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.13.0" + "source": "https://github.com/phpspec/prophecy/tree/1.14.0" }, - "time": "2021-03-17T13:42:18+00:00" + "time": "2021-09-10T09:02:12+00:00" }, { "name": "phpunit/php-code-coverage", @@ -2143,16 +2146,16 @@ }, { "name": "phpunit/phpunit", - "version": "8.5.19", + "version": "8.5.20", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "496281b64ec781856ed0a583483b5923b4033722" + "reference": "9deefba183198398a09b927a6ac6bc1feb0b7b70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/496281b64ec781856ed0a583483b5923b4033722", - "reference": "496281b64ec781856ed0a583483b5923b4033722", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9deefba183198398a09b927a6ac6bc1feb0b7b70", + "reference": "9deefba183198398a09b927a6ac6bc1feb0b7b70", "shasum": "" }, "require": { @@ -2224,7 +2227,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.19" + "source": "https://github.com/sebastianbergmann/phpunit/tree/8.5.20" }, "funding": [ { @@ -2236,7 +2239,7 @@ "type": "github" } ], - "time": "2021-07-31T15:15:06+00:00" + "time": "2021-08-31T06:44:38+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", diff --git a/vendor/phan/phan/phan_client b/vendor/phan/phan/phan_client index 560ed34b..d6e9f149 100755 --- a/vendor/phan/phan/phan_client +++ b/vendor/phan/phan/phan_client @@ -395,7 +395,7 @@ class PhanPHPLinterOpts /** * @param string $msg - optional message * @param int $exit_code - process exit code. - * @return void - exits with $exit_code + * @return never - exits with $exit_code */ public function usage($msg = '', $exit_code = 0) { @@ -537,7 +537,6 @@ EOB; } if (!is_string($value)) { $this->usage('--flycheck-file should be passed a string value', 1); - break; // unreachable } $this->temporary_file_map = [$this->file_list[0] => $value]; break; @@ -549,7 +548,6 @@ EOB; $mapping = json_decode($value, true); if (!\is_array($mapping)) { $this->usage('--temporary-file-map should be a JSON encoded map from source file to temporary file to analyze instead', 1); - break; // unreachable } $this->temporary_file_map = $mapping; @@ -574,19 +572,17 @@ EOB; if (!is_string($path)) { $this->print_usage_on_error = $print_usage_on_error; $this->usage(sprintf("Error: asked to analyze path %s which is not a string", json_encode($path) ?: 'invalid'), 1); - exit(1); } if (!file_exists($path)) { $this->print_usage_on_error = $print_usage_on_error; $this->usage(sprintf("Error: asked to analyze file %s which does not exist", json_encode($path) ?: 'invalid'), 1); - exit(1); } $this->file_list[] = $path; break; case 'h': case 'help': + // never returns $this->usage(); - break; case 'd': case 'disable-usage-on-error': $print_usage_on_error = false; @@ -604,7 +600,6 @@ EOB; case 'output-mode': if (!is_string($value) || !in_array($value, ['text', 'json', 'csv', 'codeclimate', 'checkstyle', 'pylint', 'phan_client'], true)) { $this->usage("Expected --output-mode {text,json,csv,codeclimate,checkstyle,pylint}, but got " . json_encode($value), 1); - break; // unreachable } if ($value === 'phan_client') { // We're requesting the default @@ -614,7 +609,6 @@ EOB; break; default: $this->usage("Unknown option '-$key'", 1); - break; } } try { diff --git a/vendor/phan/phan/prep b/vendor/phan/phan/prep old mode 100644 new mode 100755 diff --git a/vendor/phan/phan/src/Phan/AST/ContextNode.php b/vendor/phan/phan/src/Phan/AST/ContextNode.php index 8d0f5f56..2a85e5ea 100644 --- a/vendor/phan/phan/src/Phan/AST/ContextNode.php +++ b/vendor/phan/phan/src/Phan/AST/ContextNode.php @@ -579,8 +579,6 @@ class ContextNode return []; } - // TODO: Should this check that count($class_list) > 0 instead? Or just always check? - // TODO: Improve for intersection types if (\count($class_list) === 0) { if (!$union_type->hasTypeMatchingCallback(function (Type $type) use ($expected_type_categories): bool { if ($this->node instanceof Node) { @@ -1778,17 +1776,6 @@ class ContextNode } $code_base = $this->code_base; - - $constant_name_lower = \strtolower($constant_name); - if ($constant_name_lower === 'true' || $constant_name_lower === 'false' || $constant_name_lower === 'null') { - return $code_base->getGlobalConstantByFQSEN( - // @phan-suppress-next-line PhanThrowTypeMismatchForCall - FullyQualifiedGlobalConstantName::fromFullyQualifiedString( - $constant_name_lower - ) - ); - } - $context = $this->context; $flags = $node->children['name']->flags ?? 0; try { @@ -1834,6 +1821,18 @@ class ContextNode } catch (FQSENException $e) { throw new AssertionError("Impossible FQSENException: " . $e->getMessage()); } + + // Handle true/false/null, even for edge cases such as `use const null as somethingelse;` + $fqsen_lower = \strtolower($fqsen->__toString()); + if (\in_array($fqsen_lower, ['\true', '\false', '\null'], true)) { + return $code_base->getGlobalConstantByFQSEN( + // @phan-suppress-next-line PhanThrowTypeMismatchForCall + FullyQualifiedGlobalConstantName::fromFullyQualifiedString( + $fqsen_lower + ) + ); + } + // This is either a fully qualified constant, // or a relative constant for which nothing was found in the namespace @@ -1884,7 +1883,7 @@ class ContextNode /** * @throws IssueException - * @return no-return + * @return never */ private function throwUndeclaredGlobalConstantIssueException(CodeBase $code_base, Context $context, FullyQualifiedGlobalConstantName $fqsen): void { diff --git a/vendor/phan/phan/src/Phan/AST/InferPureSnippetVisitor.php b/vendor/phan/phan/src/Phan/AST/InferPureSnippetVisitor.php index 510a48f0..ebc36953 100644 --- a/vendor/phan/phan/src/Phan/AST/InferPureSnippetVisitor.php +++ b/vendor/phan/phan/src/Phan/AST/InferPureSnippetVisitor.php @@ -57,6 +57,10 @@ class InferPureSnippetVisitor extends InferPureVisitor } } + /** + * @override + * @return never + */ public function visitReturn(Node $node): void { throw new NodeException($node); @@ -79,17 +83,29 @@ class InferPureSnippetVisitor extends InferPureVisitor } } + /** + * @override + * @return never + */ public function visitYield(Node $node): void { throw new NodeException($node); } + /** + * @override + * @return never + */ public function visitYieldFrom(Node $node): void { throw new NodeException($node); } // TODO(optional) track actual goto labels + /** + * @override + * @return never + */ public function visitGoto(Node $node): void { throw new NodeException($node); @@ -97,6 +113,10 @@ class InferPureSnippetVisitor extends InferPureVisitor // NOTE: Checks of assignment, increment or decrement are deferred to --unused-variable-detection + /** + * @override + * @return never + */ public function visitUnset(Node $node): void { throw new NodeException($node); diff --git a/vendor/phan/phan/src/Phan/AST/InferPureVisitor.php b/vendor/phan/phan/src/Phan/AST/InferPureVisitor.php index c5213ea1..96d8141d 100644 --- a/vendor/phan/phan/src/Phan/AST/InferPureVisitor.php +++ b/vendor/phan/phan/src/Phan/AST/InferPureVisitor.php @@ -105,6 +105,10 @@ class InferPureVisitor extends AnalysisVisitor // visitEcho // visitPrint // visitIncludeOrExec + /** + * @override + * @return never + */ public function visit(Node $node): void { throw new NodeException($node); @@ -681,7 +685,7 @@ class InferPureVisitor extends AnalysisVisitor public function visitClosure(Node $node): void { $closure_fqsen = FullyQualifiedFunctionName::fromClosureInContext( - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), $node ); if (!$this->code_base->hasFunctionWithFQSEN($closure_fqsen)) { diff --git a/vendor/phan/phan/src/Phan/AST/ScopeImpactCheckingVisitor.php b/vendor/phan/phan/src/Phan/AST/ScopeImpactCheckingVisitor.php index 3905fc62..4111cada 100644 --- a/vendor/phan/phan/src/Phan/AST/ScopeImpactCheckingVisitor.php +++ b/vendor/phan/phan/src/Phan/AST/ScopeImpactCheckingVisitor.php @@ -67,32 +67,55 @@ class ScopeImpactCheckingVisitor extends InferPureVisitor } } - /** @override */ + /** + * @override + * @return never + */ public function visitContinue(Node $node): void { throw new NodeException($node); } + /** + * @override + * @return never + */ public function visitBreak(Node $node): void { throw new NodeException($node); } + /** + * @override + * @return never + */ public function visitPreInc(Node $node): void { throw new NodeException($node); } + /** + * @override + * @return never + */ public function visitPreDec(Node $node): void { throw new NodeException($node); } + /** + * @override + * @return never + */ public function visitPostInc(Node $node): void { throw new NodeException($node); } + /** + * @override + * @return never + */ public function visitPostDec(Node $node): void { throw new NodeException($node); @@ -110,25 +133,37 @@ class ScopeImpactCheckingVisitor extends InferPureVisitor $this->visitVar($var); } - /** @override */ + /** + * @override + * @return never + */ public function visitGoto(Node $node): void { throw new NodeException($node); } - /** @override */ + /** + * @override + * @return never + */ public function visitAssignOp(Node $node): void { throw new NodeException($node); } - /** @override */ + /** + * @override + * @return never + */ public function visitAssign(Node $node): void { throw new NodeException($node); } - /** @override */ + /** + * @override + * @return never + */ public function visitReturn(Node $node): void { throw new NodeException($node); diff --git a/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php b/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php index 7592d140..6dff449d 100644 --- a/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php +++ b/vendor/phan/phan/src/Phan/AST/TolerantASTConverter/TolerantASTConverter.php @@ -65,7 +65,18 @@ Shim::load(); * each time they are invoked, * so it's possible to have multiple callers use this without affecting each other. * - * Compatibility: PHP 7.0-7.4 + * Compatibility: PHP 7.0-8.1 + * + * XXX: This aims to match the line numbers that php-ast would generate (for compatibility) where reasonable, + * even when counterintuitive. See https://github.com/phan/phan/issues/4520 + * + * - The way php (and as a result php-ast) is getting the line number for anything + * that has 1 or more children is to use the line number of the first non-null child. + * (skipping most tokens such as `[`, `return`, etc, and having a line number for literal + * values (php-ast does not wrap the AST_ZVAL type php uses internally in a Node) + * - If there are no non-null child nodes, then php uses the current line number of the lexer. + * + * which are the line numbers php uses in * * ---------------------------------------------------------------------------- * @@ -114,7 +125,7 @@ class TolerantASTConverter public const AST_VERSION = 85; // The versions that this supports - public const SUPPORTED_AST_VERSIONS = [self::AST_VERSION]; + public const SUPPORTED_AST_VERSIONS = [80, self::AST_VERSION]; private const _IGNORED_STRING_TOKEN_KIND_SET = [ TokenKind::OpenBraceDollarToken => true, @@ -449,7 +460,7 @@ class TolerantASTConverter } if (!\is_int($lineno)) { foreach ($parser_nodes as $parser_node) { - $child_node_line = static::getEndLine($parser_node); + $child_node_line = static::getStartLine($parser_node); if ($child_node_line > 0) { $lineno = $child_node_line; break; @@ -871,12 +882,14 @@ class TolerantASTConverter return $str; }, /** + * @return never * @throws InvalidNodeException */ 'Microsoft\PhpParser\MissingToken' => static function (PhpParser\MissingToken $unused_node, int $_): void { throw new InvalidNodeException(); }, /** + * @return never * @throws InvalidNodeException */ 'Microsoft\PhpParser\SkippedToken' => static function (PhpParser\SkippedToken $unused_node, int $_): void { @@ -1003,11 +1016,12 @@ class TolerantASTConverter return new ast\Node($type, 0, ['var' => static::phpParserNodeToAstNode($n->operand)], $start_line); }, 'Microsoft\PhpParser\Node\Expression\PrintIntrinsicExpression' => static function (PhpParser\Node\Expression\PrintIntrinsicExpression $n, int $start_line): ast\Node { + $expr_node = static::phpParserNodeToAstNode($n->expression); return new ast\Node( ast\AST_PRINT, 0, - ['expr' => static::phpParserNodeToAstNode($n->expression)], - $start_line + ['expr' => $expr_node], + $expr_node->lineno ?? (self::getStartLine($n->expression) ?: $start_line) ); }, /** @return ?ast\Node */ @@ -1076,14 +1090,17 @@ class TolerantASTConverter $ast_expr = ($element_value !== null && !($element_value instanceof MissingToken)) ? static::phpParserNodeToAstNode($array_element->elementValue) : null; if ($kind === \ast\AST_YIELD) { $element_key = $array_element->elementKey ?? null; + $key = $element_key !== null ? static::phpParserNodeToAstNode($element_key) : null; $children = [ 'value' => $ast_expr, - 'key' => $element_key !== null ? static::phpParserNodeToAstNode($element_key) : null, + 'key' => $key, ]; + $start_line = $key->lineno ?? $ast_expr->lineno ?? $start_line; } else { $children = [ 'expr' => $ast_expr, ]; + $start_line = $ast_expr->lineno ?? $start_line; } return new ast\Node( $kind, @@ -1233,6 +1250,7 @@ class TolerantASTConverter $kind = $n->breakOrContinueKeyword->kind === TokenKind::ContinueKeyword ? ast\AST_CONTINUE : ast\AST_BREAK; $breakout_level = $n->breakoutLevel; if ($breakout_level !== null) { + $start_line = self::getStartLine($breakout_level); $breakout_level = static::phpParserNodeToAstNode($breakout_level); if (!\is_int($breakout_level)) { $breakout_level = null; @@ -1254,8 +1272,8 @@ class TolerantASTConverter $catch_list_node, $variableName !== null ? static::variableTokenToString($variableName) : null, // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. - static::phpParserStmtlistToAstNode($n->compoundStatement, $start_line, false), - $start_line + static::phpParserStmtlistToAstNode($n->compoundStatement, self::getStartLine($n->compoundStatement) ?: $start_line, false), + $variableName !== null ? self::getStartLine($variableName) : $start_line ); }, 'Microsoft\PhpParser\Node\Statement\InterfaceDeclaration' => static function (PhpParser\Node\Statement\InterfaceDeclaration $n, int $start_line): ast\Node { @@ -1421,10 +1439,12 @@ class TolerantASTConverter if ($expr instanceof Token && $expr->kind === TokenKind::CommaToken) { continue; } + $expr_node = static::phpParserNodeToAstNode($expr); + $start_line = ($expr_node->lineno ?? self::getStartLine($expr)) ?: $start_line; $ast_echos[] = new ast\Node( ast\AST_ECHO, 0, - ['expr' => static::phpParserNodeToAstNode($expr)], + ['expr' => $expr_node], $start_line ); } @@ -1525,7 +1545,7 @@ class TolerantASTConverter ast\AST_ECHO, 0, ['expr' => static::tokenToRawString($n->text)], - $start_line + self::getStartLine($n->text) ?: $start_line ); }, /** @suppress PhanTypeMismatchArgument TODO: Make ForStatement have more accurate docs? */ @@ -1586,7 +1606,7 @@ class TolerantASTConverter 'Microsoft\PhpParser\Node\Statement\ReturnStatement' => static function (PhpParser\Node\Statement\ReturnStatement $n, int $start_line): ast\Node { $e = $n->expression; $expr_node = $e !== null ? static::phpParserNodeToAstNode($e) : null; - return new ast\Node(ast\AST_RETURN, 0, ['expr' => $expr_node], $start_line); + return new ast\Node(ast\AST_RETURN, 0, ['expr' => $expr_node], $expr_node->lineno ?? $start_line); }, /** @return ast\Node|ast\Node[] */ 'Microsoft\PhpParser\Node\Statement\FunctionStaticDeclaration' => static function (PhpParser\Node\Statement\FunctionStaticDeclaration $n, int $start_line) { @@ -1712,8 +1732,8 @@ class TolerantASTConverter return static::astNodeTry( // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. static::phpParserStmtlistToAstNode($n->compoundStatement, $start_line, false), // $n->try - static::phpParserCatchlistToAstCatchlist($n->catchClauses ?? [], $start_line), - $finally_clause !== null ? static::phpParserStmtlistToAstNode($finally_clause->compoundStatement, self::getStartLine($finally_clause), false) : null, + static::phpParserCatchlistToAstCatchlist($n->catchClauses ?? [], self::getEndLine($n->compoundStatement) ?: $start_line), + $finally_clause !== null ? static::phpParserStmtlistToAstNode($finally_clause->compoundStatement, self::getStartLine($finally_clause->compoundStatement), false) : null, $start_line ); }, @@ -1824,7 +1844,7 @@ class TolerantASTConverter foreach ($catches as $parser_catch) { $children[] = static::phpParserNonValueNodeToAstNode($parser_catch); } - return new ast\Node(ast\AST_CATCH_LIST, 0, $children, $children[0]->lineno ?? $lineno); + return new ast\Node(ast\AST_CATCH_LIST, 0, $children, $lineno); } /** @@ -2405,11 +2425,12 @@ class TolerantASTConverter if (!$expression) { throw new InvalidNodeException(); } + $expr_node = static::phpParserNodeToAstNode($expression); return new ast\Node( ast\AST_THROW, 0, - ['expr' => static::phpParserNodeToAstNode($expression)], - $start_line + ['expr' => $expr_node], + $expr_node->lineno ?? $start_line ); } @@ -2630,21 +2651,23 @@ class TolerantASTConverter private static function phpParserIfStmtToAstIfStmt(PhpParser\Node\Statement\IfStatementNode $node, int $start_line): ast\Node { + $if_elem_expr = static::phpParserNodeToAstNode($node->expression); $if_elem = static::astIfElem( - static::phpParserNodeToAstNode($node->expression), + $if_elem_expr, // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. static::phpParserStmtlistToAstNode( $node->statements, self::getStartLineOfStatementOrStatements($node->statements) ?: $start_line, false ), - $start_line + $if_elem_expr->lineno ?? (self::getStartLine($node->expression) ?: $start_line) ); $if_elems = [$if_elem]; foreach ($node->elseIfClauses as $else_if) { - $if_elem_line = self::getStartLine($else_if); + $else_if_node = static::phpParserNodeToAstNode($else_if->expression); + $if_elem_line = $else_if_node->lineno ?? (self::getStartLine($else_if->expression) ?: $start_line); $if_elem = static::astIfElem( - static::phpParserNodeToAstNode($else_if->expression), + $else_if_node, // @phan-suppress-next-line PhanTypeMismatchArgumentNullable return_null_on_empty is false. static::phpParserStmtlistToAstNode( $else_if->statements, @@ -2664,7 +2687,7 @@ class TolerantASTConverter $parser_else_line ); } - return new ast\Node(ast\AST_IF, 0, $if_elems, $start_line); + return new ast\Node(ast\AST_IF, 0, $if_elems, $if_elems[0]->lineno); } /** @@ -2843,8 +2866,13 @@ class TolerantASTConverter $line = $prop_elems[0]->lineno ?? (self::getStartLine($n) ?: $start_line); $prop_decl = new ast\Node(ast\AST_PROP_DECL, 0, $prop_elems, $line); $type_line = static::getEndLine($n->typeDeclarationList) ?: $start_line; + + $type = static::phpParserUnionTypeToAstNode($n->typeDeclarationList, $type_line); + if ($n->questionToken !== null && $type !== null) { + $type = new ast\Node(ast\AST_NULLABLE_TYPE, 0, ['type' => $type], $start_line); + } return new ast\Node(ast\AST_PROP_GROUP, $flags, [ - 'type' => static::phpParserUnionTypeToAstNode($n->typeDeclarationList, $type_line), + 'type' => $type, 'props' => $prop_decl, 'attributes' => static::phpParserAttributeGroupsToAstAttributeList($n->attributes), ], $line); diff --git a/vendor/phan/phan/src/Phan/Analysis.php b/vendor/phan/phan/src/Phan/Analysis.php index 2325a046..268a3ad8 100644 --- a/vendor/phan/phan/src/Phan/Analysis.php +++ b/vendor/phan/phan/src/Phan/Analysis.php @@ -412,42 +412,47 @@ class Analysis } } - foreach ($plugin_set->getAnalyzeFunctionCallClosures($code_base) as $fqsen_string => $closure) { - try { - if (\strpos($fqsen_string, '::') !== false) { - // This is an override of a method. - [$class, $method_name] = \explode('::', $fqsen_string, 2); - $class_fqsen = FullyQualifiedClassName::fromFullyQualifiedString($class); - if (!$code_base->hasClassWithFQSEN($class_fqsen)) { - continue; - } - $class = $code_base->getClassByFQSEN($class_fqsen); - // Note: This is used because it will create methods such as __construct if they do not exist. - if ($class->hasMethodWithName($code_base, $method_name, false)) { - $method = $class->getMethodByName($code_base, $method_name); - $method->addFunctionCallAnalyzer($closure); - - $methods_by_defining_fqsen = $methods_by_defining_fqsen ?? $code_base->getMethodsMapGroupedByDefiningFQSEN(); - $fqsen = FullyQualifiedMethodName::fromFullyQualifiedString($fqsen_string); - if (!$methods_by_defining_fqsen->offsetExists($fqsen)) { + // To fix issues such as https://github.com/phan/phan/issues/4090, this (1) always calls addFunctionCallAnalyzer, + // and (2) automatically loads definitions for functions and methods by calling hasFunctionWithFQSEN (etc.), so that internal function definitions used by previous plugins can be iterated over by the next plugin being called (e.g. if getFunctionSet is called). + // @phan-suppress-next-line PhanAccessMethodInternal + foreach ($plugin_set->getAnalyzeFunctionCallPluginSet() as $plugin) { + foreach ($plugin->getAnalyzeFunctionCallClosures($code_base) as $fqsen_string => $closure) { + try { + if (\strpos($fqsen_string, '::') !== false) { + // This is an override of a method. + [$class, $method_name] = \explode('::', $fqsen_string, 2); + $class_fqsen = FullyQualifiedClassName::fromFullyQualifiedString($class); + if (!$code_base->hasClassWithFQSEN($class_fqsen)) { continue; } + $class = $code_base->getClassByFQSEN($class_fqsen); + // Note: This is used because it will create methods such as __construct if they do not exist. + if ($class->hasMethodWithName($code_base, $method_name, false)) { + $method = $class->getMethodByName($code_base, $method_name); + $method->addFunctionCallAnalyzer($closure, $plugin); - foreach ($methods_by_defining_fqsen->offsetGet($fqsen) as $child_method) { - $child_method->addFunctionCallAnalyzer($closure); + $methods_by_defining_fqsen = $methods_by_defining_fqsen ?? $code_base->getMethodsMapGroupedByDefiningFQSEN(); + $fqsen = FullyQualifiedMethodName::fromFullyQualifiedString($fqsen_string); + if (!$methods_by_defining_fqsen->offsetExists($fqsen)) { + continue; + } + + foreach ($methods_by_defining_fqsen->offsetGet($fqsen) as $child_method) { + $child_method->addFunctionCallAnalyzer($closure, $plugin); + } + } + } else { + // This is a function. + $fqsen = FullyQualifiedFunctionName::fromFullyQualifiedString($fqsen_string); + if ($code_base->hasFunctionWithFQSEN($fqsen)) { + $function = $code_base->getFunctionByFQSEN($fqsen); + $function->addFunctionCallAnalyzer($closure, $plugin); } } - } else { - // This is an override of a function. - $fqsen = FullyQualifiedFunctionName::fromFullyQualifiedString($fqsen_string); - if ($code_base->hasFunctionWithFQSEN($fqsen)) { - $function = $code_base->getFunctionByFQSEN($fqsen); - $function->setFunctionCallAnalyzer($closure); - } + } catch (FQSENException | InvalidArgumentException $e) { + // @phan-suppress-next-line PhanPluginRemoveDebugCall + \fprintf(STDERR, "getAnalyzeFunctionCallClosures returned an invalid FQSEN %s: %s\n", $fqsen_string, $e->getMessage()); } - } catch (FQSENException | InvalidArgumentException $e) { - // @phan-suppress-next-line PhanPluginRemoveDebugCall - \fprintf(STDERR, "getAnalyzeFunctionCallClosures returned an invalid FQSEN %s: %s\n", $fqsen_string, $e->getMessage()); } } } diff --git a/vendor/phan/phan/src/Phan/Analysis/AssignOperatorAnalysisVisitor.php b/vendor/phan/phan/src/Phan/Analysis/AssignOperatorAnalysisVisitor.php index a04c0d7e..e1a59662 100644 --- a/vendor/phan/phan/src/Phan/Analysis/AssignOperatorAnalysisVisitor.php +++ b/vendor/phan/phan/src/Phan/Analysis/AssignOperatorAnalysisVisitor.php @@ -330,7 +330,7 @@ class AssignOperatorAnalysisVisitor extends FlagVisitorImplementation // If both left and right are arrays, then this is array // concatenation. - if ($left->isGenericArray() && $right->isGenericArray()) { + if ($left->isArray() && $right->isArray()) { BinaryOperatorFlagVisitor::checkInvalidArrayShapeCombination($code_base, $context, $node, $left, $right); if ($left->isEqualTo($right)) { return $left; diff --git a/vendor/phan/phan/src/Phan/Analysis/AssignOperatorFlagVisitor.php b/vendor/phan/phan/src/Phan/Analysis/AssignOperatorFlagVisitor.php index a7927173..6bf12b2f 100644 --- a/vendor/phan/phan/src/Phan/Analysis/AssignOperatorFlagVisitor.php +++ b/vendor/phan/phan/src/Phan/Analysis/AssignOperatorFlagVisitor.php @@ -283,7 +283,7 @@ class AssignOperatorFlagVisitor extends FlagVisitorImplementation // If both left and right are arrays, then this is array // concatenation. - if ($left->isGenericArray() && $right->isGenericArray()) { + if ($left->isArray() && $right->isArray()) { if ($left->isEqualTo($right)) { return $left; } diff --git a/vendor/phan/phan/src/Phan/Analysis/BinaryOperatorFlagVisitor.php b/vendor/phan/phan/src/Phan/Analysis/BinaryOperatorFlagVisitor.php index 1d4b1c47..721b5f6b 100644 --- a/vendor/phan/phan/src/Phan/Analysis/BinaryOperatorFlagVisitor.php +++ b/vendor/phan/phan/src/Phan/Analysis/BinaryOperatorFlagVisitor.php @@ -89,10 +89,11 @@ final class BinaryOperatorFlagVisitor extends FlagVisitorImplementation /** * @throws AssertionError * @suppress PhanUnreferencedPrivateMethod this is referenced by __invoke + * @return never */ private function handleMissing(Node $node): void { - throw new AssertionError("All flags must match. Found kind=" . Debug::nodeName($node) . ', flags=' . Element::flagDescription($node) . ' raw flags=' . $node->flags . ' at ' . $this->context->withLineNumberStart((int)$node->lineno)); + throw new AssertionError("All flags must match. Found kind=" . Debug::nodeName($node) . ', flags=' . Element::flagDescription($node) . ' raw flags=' . $node->flags . ' at ' . (clone $this->context)->withLineNumberStart((int)$node->lineno)); } /** @@ -751,7 +752,7 @@ final class BinaryOperatorFlagVisitor extends FlagVisitorImplementation // If both left and right union types are arrays, then this is array // concatenation. (`$left + $right`) - if ($left->isGenericArray() && $right->isGenericArray()) { + if ($left->isArray() && $right->isArray()) { self::checkInvalidArrayShapeCombination($code_base, $context, $node, $left, $right); if ($left->isEqualTo($right)) { return $left; diff --git a/vendor/phan/phan/src/Phan/Analysis/BlockExitStatusChecker.php b/vendor/phan/phan/src/Phan/Analysis/BlockExitStatusChecker.php index eecbdbdd..7bc48ce3 100644 --- a/vendor/phan/phan/src/Phan/Analysis/BlockExitStatusChecker.php +++ b/vendor/phan/phan/src/Phan/Analysis/BlockExitStatusChecker.php @@ -44,11 +44,17 @@ final class BlockExitStatusChecker extends KindVisitorImplementation public const STATUS_CONTINUE = (1 << 22); // At least one branch leads to a continue statement public const STATUS_BREAK = (1 << 23); // At least one branch leads to a break statement public const STATUS_THROW = (1 << 24); // At least one branch leads to a throw statement - public const STATUS_RETURN = (1 << 25); // At least one branch leads to a return/exit() statement (or an infinite loop) + public const STATUS_RETURN = (1 << 25); // At least one branch leads to a return statement + public const STATUS_NORETURN = (1 << 26); // At least one branch leads to a exit() statement (or an infinite loop) public const STATUS_THROW_OR_RETURN_BITMASK = self::STATUS_THROW | - self::STATUS_RETURN; + self::STATUS_RETURN | + self::STATUS_NORETURN; + + public const STATUS_NOT_RETURN_BITMASK = + self::STATUS_THROW | + self::STATUS_NORETURN; // Any status which doesn't lead to proceeding. public const STATUS_NOT_PROCEED_BITMASK = @@ -56,7 +62,8 @@ final class BlockExitStatusChecker extends KindVisitorImplementation self::STATUS_CONTINUE | self::STATUS_BREAK | self::STATUS_THROW | - self::STATUS_RETURN; + self::STATUS_RETURN | + self::STATUS_NORETURN; public const STATUS_BITMASK = self::STATUS_PROCEED | @@ -475,7 +482,7 @@ final class BlockExitStatusChecker extends KindVisitorImplementation { $status = $inner_status & ~self::UNEXITABLE_LOOP_INNER_STATUS; if ($status === 0) { - return self::STATUS_RETURN; // this is an infinite loop, it didn't contain break/throw/return statements? + return self::STATUS_NORETURN; // this is an infinite loop, it didn't contain break/throw/return statements? } if (($status & self::STATUS_BREAK) !== 0) { // if the inside of "while (true) {} contains a break statement, @@ -500,7 +507,7 @@ final class BlockExitStatusChecker extends KindVisitorImplementation */ public function visitExit(Node $node): int { - return self::STATUS_RETURN; + return self::STATUS_NORETURN; } /** @@ -628,10 +635,14 @@ final class BlockExitStatusChecker extends KindVisitorImplementation return self::STATUS_PROCEED; } // The returned code for exit() is 'return', e.g. E_USER_ERROR makes trigger_error emit an error then abort execution. - if (\in_array($name, ['E_ERROR', 'E_PARSE', 'E_CORE_ERROR', 'E_COMPILE_ERROR', 'E_USER_ERROR'], true)) { - return self::STATUS_RETURN; + // NOTE: Native errors either emit a notice about being invalid error types to pass to this function (e.g. E_ERROR). + // must be one of E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE, or E_USER_DEPRECATED + if ($name === 'E_USER_ERROR') { + // Fatal error + return self::STATUS_NORETURN; } - if ($name === 'E_RECOVERABLE_ERROR') { + if (!\in_array($name, ['E_USER_WARNING', 'E_USER_NOTICE', 'E_USER_DEPRECATED'], true)) { + // Newer php versions throw a ValueError for invalid types. return self::STATUS_THROW; } @@ -804,6 +815,14 @@ final class BlockExitStatusChecker extends KindVisitorImplementation return ((new self())->__invoke($node) & ~self::STATUS_THROW_OR_RETURN_BITMASK) === 0; } + /** + * Will the node $node unconditionally throw or exit (or infinitely loop) + */ + public static function willUnconditionallyNeverReturn(Node $node): bool + { + return ((new self())->__invoke($node) & ~self::STATUS_NOT_RETURN_BITMASK) === 0; + } + /** * Will the node $node unconditionally proceed (no break/continue, throw, or goto) */ diff --git a/vendor/phan/phan/src/Phan/Analysis/CompositionAnalyzer.php b/vendor/phan/phan/src/Phan/Analysis/CompositionAnalyzer.php index 82114220..6f58e906 100644 --- a/vendor/phan/phan/src/Phan/Analysis/CompositionAnalyzer.php +++ b/vendor/phan/phan/src/Phan/Analysis/CompositionAnalyzer.php @@ -87,7 +87,8 @@ class CompositionAnalyzer } catch (IssueException $_) { $inherited_property_union_type = UnionType::empty(); } - if (!$property->isDynamicOrFromPHPDoc()) { + // Don't complain about incompatible types if the base property is private, #4426 + if (!$property->isDynamicOrFromPHPDoc() && !$inherited_property->isPrivate()) { $real_property_type = $property->getRealUnionType()->asNormalizedTypes(); $real_inherited_property_type = $inherited_property->getRealUnionType()->asNormalizedTypes(); if (!$real_property_type->isEqualTo($real_inherited_property_type)) { diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor.php index 21a61d60..481fa405 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor.php @@ -879,7 +879,7 @@ class ConditionVisitor extends KindVisitorImplementation implements ConditionVis $method = new ReflectionMethod(UnionType::class, $extract_types); /** * @param list $args - * @suppress PhanPluginUnknownObjectMethodCall can't analye ReflectionMethod + * @suppress PhanPluginUnknownObjectMethodCall can't analyze ReflectionMethod */ return static function (CodeBase $code_base, Context $context, Variable $variable, array $args) use ($method, $default_if_empty, $allow_undefined): void { // Change the type to match the is_a relationship @@ -1052,6 +1052,9 @@ class ConditionVisitor extends KindVisitorImplementation implements ConditionVis case 'array_key_exists': // @phan-suppress-next-line PhanPartialTypeMismatchArgument return $this->analyzeArrayKeyExists($args); + case 'in_array': + // @phan-suppress-next-line PhanPartialTypeMismatchArgument + return $this->analyzeInArray($args); case 'defined': // @phan-suppress-next-line PhanPartialTypeMismatchArgument return $this->analyzeDefined($args); @@ -1148,6 +1151,53 @@ class ConditionVisitor extends KindVisitorImplementation implements ConditionVis ); } + /** + * @param list $args + */ + private function analyzeInArray(array $args): Context + { + $context = $this->context; + if (\count($args) < 2) { + return $context; + } + // in_array($var, $array, [bool]) asserts that $var is a type found in the elements of $array + // It also asserts $array is not empty + $array_node = $args[1]; + if (!$array_node instanceof Node) { + return $context; + } + if (\in_array($array_node->kind, [ast\AST_VAR, ast\AST_PROP, ast\AST_DIM], true)) { + // in_array implies the array has at least one element, implying it is not falsey. + $context = $this->updateVariableWithConditionalFilter( + $array_node, + $context, + static function (UnionType $_): bool { + return true; + }, + static function (UnionType $type): UnionType { + return $type->arrayTypesStrictCast()->nonFalseyClone(); + }, + true, + false + ); + } + + $var_node = $args[0]; + if (!($var_node instanceof Node)) { + return $context; + } + $array_value = UnionTypeVisitor::unionTypeFromNode($this->code_base, $this->context, $array_node)->arrayTypesStrictCastAllowEmpty(); + if ($array_value->isEmptyOrMixed()) { + return $context; + } + $element_type = $array_value->genericArrayElementTypes(true, $this->code_base); + if ($element_type->isEmptyOrMixed()) { + return $context; + } + $is_strict = isset($args[2]) && UnionTypeVisitor::checkCondUnconditionalTruthiness($args[2]) === true; + return $this->updateVariableWithNewType($var_node, $context, $element_type, true, $is_strict); + } + /** * @param list $args */ diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/BinaryCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/BinaryCondition.php index cf3acd6e..2668e357 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/BinaryCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/BinaryCondition.php @@ -44,4 +44,9 @@ interface BinaryCondition * @param Node|string|int|float $expr a node with a constant value */ public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context; + + /** + * @return static the same operation but to analyze flipped operand orders + */ + public function withFlippedOperands(): self; } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/ComparisonCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/ComparisonCondition.php index 083168fc..cda2b0e0 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/ComparisonCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/ComparisonCondition.php @@ -4,8 +4,12 @@ declare(strict_types=1); namespace Phan\Analysis\ConditionVisitor; +use ast; use ast\Node; use Phan\Analysis\ConditionVisitorInterface; +use Phan\Analysis\ConditionVisitor; +use Phan\Analysis\NegatedConditionVisitor; +use Phan\AST\UnionTypeVisitor; use Phan\Language\Context; /** @@ -50,9 +54,49 @@ class ComparisonCondition implements BinaryCondition */ public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context { + $function_name = ConditionVisitor::getFunctionName($call_node); + if (\is_string($function_name) && \strcasecmp($function_name, 'count') === 0) { + $code_base = $visitor->getCodeBase(); + $context = $visitor->getContext(); + $value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf(); + if (\is_object($value) || $value < 0) { + return null; + } + if ($this->assertsPositiveNumber($value)) { + // e.g. `if (is_string($x) === true)` + return (new ConditionVisitor($code_base, $context))->visitCall($call_node); + } elseif ($this->assertsZeroOrLess($value)) { + return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node); + } + } return null; } + /** + * @param bool|int|float|string|null $value + */ + private function assertsPositiveNumber($value): bool { + if ($this->flags === ast\flags\BINARY_IS_GREATER) { + return $value > 0; + } elseif ($this->flags === ast\flags\BINARY_IS_GREATER_OR_EQUAL) { + return $value >= 0; + } + return false; + } + + /** + * @param bool|int|float|string|null $value + */ + private function assertsZeroOrLess($value): bool { + if ($this->flags === ast\flags\BINARY_IS_SMALLER) { + return $value > 0 && $value <= 1; + } elseif ($this->flags === ast\flags\BINARY_IS_SMALLER_OR_EQUAL) { + // @phan-suppress-next-line PhanPluginComparisonNotStrictForScalar, PhanSuspiciousTruthyString + return $value == 0 && $value <= 0; + } + return false; + } + /** * @suppress PhanUnusedPublicMethodParameter */ @@ -60,4 +104,20 @@ class ComparisonCondition implements BinaryCondition { return null; } + + private const FLIP_OPERANDS = [ + ast\flags\BINARY_IS_GREATER => ast\flags\BINARY_IS_SMALLER, + ast\flags\BINARY_IS_GREATER_OR_EQUAL => ast\flags\BINARY_IS_SMALLER_OR_EQUAL, + ast\flags\BINARY_IS_SMALLER => ast\flags\BINARY_IS_GREATER, + ast\flags\BINARY_IS_SMALLER_OR_EQUAL => ast\flags\BINARY_IS_GREATER_OR_EQUAL, + ]; + + /** + * @return static + */ + public function withFlippedOperands(): BinaryCondition + { + $flipped = self::FLIP_OPERANDS[$this->flags] ?? null; + return isset($flipped) ? new self($flipped) : $this; + } } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/EqualsCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/EqualsCondition.php index ef82e62b..5d73cb8f 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/EqualsCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/EqualsCondition.php @@ -39,7 +39,7 @@ class EqualsCondition implements BinaryCondition return $visitor->analyzeClassAssertion($object, $expr) ?? $visitor->getContext(); } - public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context + public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr, bool $negate = false): ?Context { $code_base = $visitor->getCodeBase(); $context = $visitor->getContext(); @@ -48,20 +48,27 @@ class EqualsCondition implements BinaryCondition return null; } // Skip check for `if is_bool`, allow weaker comparisons such as `is_string($x) == 1` - if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $call_node)->isExclusivelyBoolTypes()) { + $function_name = ConditionVisitor::getFunctionName($call_node); + if (\is_string($function_name) && \strcasecmp($function_name, 'count') === 0) { + if ($negate && $expr_type->containsTruthy()) { + // Currently can't infer anything from `if (count($x) != 2)` + return null; + } + // Fall through + } elseif (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $call_node)->isExclusivelyBoolTypes()) { return null; } - if (!$expr_type->containsFalsey()) { - // e.g. `if (is_string($x) === true)` + if ($negate ? !$expr_type->containsTruthy() : !$expr_type->containsFalsey()) { + // e.g. `if (is_string($x) == true)`, or negated equals check such as `if (is_string($x) != false)` return (new ConditionVisitor($code_base, $context))->visitCall($call_node); - } elseif (!$expr_type->containsTruthy()) { - // e.g. `if (is_string($x) === false)` + } elseif ($negate ? !$expr_type->containsFalsey() : !$expr_type->containsTruthy()) { + // e.g. `if (is_string($x) == false)` return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node); } return null; } - public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context + public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr, bool $negate = false): ?Context { $code_base = $visitor->getCodeBase(); $context = $visitor->getContext(); @@ -69,13 +76,19 @@ class EqualsCondition implements BinaryCondition if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $complex_node)->isExclusivelyBoolTypes()) { return null; } - if (!$expr_type->containsFalsey()) { + if ($negate ? !$expr_type->containsTruthy() : !$expr_type->containsFalsey()) { // e.g. `if (($x instanceof Xyz) == true)` return (new ConditionVisitor($code_base, $context))->__invoke($complex_node); - } elseif (!$expr_type->containsTruthy()) { + } elseif ($negate ? !$expr_type->containsFalsey() : !$expr_type->containsTruthy()) { // e.g. `if (($x instanceof Xyz) == false)` return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node); } return null; } + + /** @return static */ + public function withFlippedOperands(): BinaryCondition + { + return $this; + } } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/HasTypeCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/HasTypeCondition.php index a558316f..5dbe3c76 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/HasTypeCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/HasTypeCondition.php @@ -87,4 +87,10 @@ class HasTypeCondition implements BinaryCondition // TODO: Could analyze get_class($array['field']) === stdClass::class (e.g. with AssignmentVisitor) return null; } + + /** @return static */ + public function withFlippedOperands(): BinaryCondition + { + return $this; + } } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/IdenticalCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/IdenticalCondition.php index 9be1fbd5..b6eb34d7 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/IdenticalCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/IdenticalCondition.php @@ -10,6 +10,7 @@ use Phan\Analysis\ConditionVisitorInterface; use Phan\Analysis\NegatedConditionVisitor; use Phan\AST\UnionTypeVisitor; use Phan\Language\Context; +use Phan\Language\UnionType; /** * This represents an identical assertion implementation acting on two sides of a condition (===) @@ -39,19 +40,27 @@ class IdenticalCondition implements BinaryCondition return $visitor->analyzeClassAssertion($object, $expr) ?? $visitor->getContext(); } - public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context + public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr, bool $negate = false): ?Context { - if (!$expr instanceof Node) { - // Cannot be false/true. - return null; - } $code_base = $visitor->getCodeBase(); $context = $visitor->getContext(); $value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf(); - if (!\is_bool($value)) { + if ($value instanceof UnionType) { return null; } - if ($value) { + $function_name = ConditionVisitor::getFunctionName($call_node); + if (\is_string($function_name) && \strcasecmp($function_name, 'count') === 0) { + if (!\is_int($value)) { + return null; + } + if ($negate && $value !== 0) { + // Phan currently can't infer anything from `count($x) !== 2`. + return null; + } + } elseif (!\is_bool($value)) { + return null; + } + if ($value xor $negate) { // logical xor // e.g. `if (is_string($x) === true)` return (new ConditionVisitor($code_base, $context))->visitCall($call_node); } else { @@ -60,7 +69,7 @@ class IdenticalCondition implements BinaryCondition } } - public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context + public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr, bool $negate = false): ?Context { if (!$expr instanceof Node) { return null; @@ -71,7 +80,7 @@ class IdenticalCondition implements BinaryCondition if (!\is_bool($value)) { return null; } - if ($value) { + if ($value xor $negate) { // logical xor // e.g. `if (is_string($x) === true)` return (new ConditionVisitor($code_base, $context))->__invoke($complex_node); } else { @@ -79,4 +88,10 @@ class IdenticalCondition implements BinaryCondition return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node); } } + + /** @return static */ + public function withFlippedOperands(): BinaryCondition + { + return $this; + } } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotEqualsCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotEqualsCondition.php index 54d7b086..f5dadc20 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotEqualsCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotEqualsCondition.php @@ -5,10 +5,7 @@ declare(strict_types=1); namespace Phan\Analysis\ConditionVisitor; use ast\Node; -use Phan\Analysis\ConditionVisitor; use Phan\Analysis\ConditionVisitorInterface; -use Phan\Analysis\NegatedConditionVisitor; -use Phan\AST\UnionTypeVisitor; use Phan\Language\Context; /** @@ -43,37 +40,17 @@ class NotEqualsCondition implements BinaryCondition public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context { - $code_base = $visitor->getCodeBase(); - $context = $visitor->getContext(); - $expr_type = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr); - if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $call_node)->isExclusivelyBoolTypes()) { - return null; - } - if (!$expr_type->containsFalsey()) { - // e.g. `if (is_string($x) != true)` - return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node); - } elseif (!$expr_type->containsTruthy()) { - // e.g. `if (is_string($x) != false)` - return (new ConditionVisitor($code_base, $context))->visitCall($call_node); - } - return null; + return (new EqualsCondition())->analyzeCall($visitor, $call_node, $expr, true); } public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context { - $code_base = $visitor->getCodeBase(); - $context = $visitor->getContext(); - $expr_type = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr); - if (!$expr_type->isExclusivelyBoolTypes() && !UnionTypeVisitor::unionTypeFromNode($code_base, $context, $complex_node)->isExclusivelyBoolTypes()) { - return null; - } - if (!$expr_type->containsFalsey()) { - // e.g. `if (($x instanceof Xyz) != true)` - return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node); - } elseif (!$expr_type->containsTruthy()) { - // e.g. `if (($x instanceof Xyz) != false)` - return (new ConditionVisitor($code_base, $context))->__invoke($complex_node); - } - return null; + return (new EqualsCondition())->analyzeComplexCondition($visitor, $complex_node, $expr, true); + } + + /** @return static */ + public function withFlippedOperands(): BinaryCondition + { + return $this; } } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotHasTypeCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotHasTypeCondition.php index 72c1e9b6..e775918e 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotHasTypeCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotHasTypeCondition.php @@ -89,4 +89,10 @@ class NotHasTypeCondition implements BinaryCondition // TODO: Could analyze get_class($array['field']) === stdClass::class (e.g. with AssignmentVisitor) return null; } + + /** @return static */ + public function withFlippedOperands(): BinaryCondition + { + return $this; + } } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotIdenticalCondition.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotIdenticalCondition.php index 5af6bd7b..85b0c183 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotIdenticalCondition.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitor/NotIdenticalCondition.php @@ -5,10 +5,7 @@ declare(strict_types=1); namespace Phan\Analysis\ConditionVisitor; use ast\Node; -use Phan\Analysis\ConditionVisitor; use Phan\Analysis\ConditionVisitorInterface; -use Phan\Analysis\NegatedConditionVisitor; -use Phan\AST\UnionTypeVisitor; use Phan\Language\Context; /** @@ -42,41 +39,17 @@ class NotIdenticalCondition implements BinaryCondition public function analyzeCall(ConditionVisitorInterface $visitor, Node $call_node, $expr): ?Context { - if (!$expr instanceof Node) { - return null; - } - $code_base = $visitor->getCodeBase(); - $context = $visitor->getContext(); - $value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf(); - if (!\is_bool($value)) { - return null; - } - if ($value) { - // e.g. `if (!(is_string($x) === true))` - return (new NegatedConditionVisitor($code_base, $context))->visitCall($call_node); - } else { - // e.g. `if (!(is_string($x) === false))` - return (new ConditionVisitor($code_base, $context))->visitCall($call_node); - } + return (new IdenticalCondition())->analyzeCall($visitor, $call_node, $expr, true); } public function analyzeComplexCondition(ConditionVisitorInterface $visitor, Node $complex_node, $expr): ?Context { - if (!$expr instanceof Node) { - return null; - } - $code_base = $visitor->getCodeBase(); - $context = $visitor->getContext(); - $value = UnionTypeVisitor::unionTypeFromNode($code_base, $context, $expr)->asSingleScalarValueOrNullOrSelf(); - if (!\is_bool($value)) { - return null; - } - if ($value) { - // e.g. `if (($x instanceof Xyz) !== true)` - return (new NegatedConditionVisitor($code_base, $context))->__invoke($complex_node); - } else { - // e.g. `if (($x instanceof Xyz) !== false)` - return (new ConditionVisitor($code_base, $context))->__invoke($complex_node); - } + return (new IdenticalCondition())->analyzeComplexCondition($visitor, $complex_node, $expr, true); + } + + /** @return static */ + public function withFlippedOperands(): BinaryCondition + { + return $this; } } diff --git a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitorUtil.php b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitorUtil.php index 055272ad..847ca49a 100644 --- a/vendor/phan/phan/src/Phan/Analysis/ConditionVisitorUtil.php +++ b/vendor/phan/phan/src/Phan/Analysis/ConditionVisitorUtil.php @@ -30,6 +30,7 @@ use Phan\Language\Element\Variable; use Phan\Language\FQSEN\FullyQualifiedClassName; use Phan\Language\Type; use Phan\Language\Type\ArrayShapeType; +use Phan\Language\Type\ArrayType; use Phan\Language\Type\FalseType; use Phan\Language\Type\IntType; use Phan\Language\Type\IterableType; @@ -392,6 +393,24 @@ trait ConditionVisitorUtil ); } + final protected function removeEmptyArrayFromVariable(Node $var_node, Context $context): Context + { + return $this->updateVariableWithConditionalFilter( + $var_node, + $context, + static function (UnionType $type): bool { + return $type->hasArray(); + }, + static function (UnionType $type): UnionType { + return $type->asMappedUnionType(static function (Type $type): Type { + return $type instanceof ArrayType ? $type->asNonFalseyType() : $type; + }); + }, + true, + false + ); + } + /** * Returns the type after removing all types that are empty or don't support property or array access * @param 1|2|3|4 $access_type ConditionVisitor::ACCESS_IS_* @@ -1034,6 +1053,8 @@ trait ConditionVisitorUtil return $this->removeTrueFromVariable($var_node, $context); } elseif ($value === null) { return $this->removeNullFromVariable($var_node, $context, false); + } elseif ($value === []) { + return $this->removeEmptyArrayFromVariable($var_node, $context); } } else { return $this->removeLiteralScalarFromVariable($var_node, $context, $expr, true); @@ -1070,6 +1091,8 @@ trait ConditionVisitorUtil return $this->removeFalseyFromVariable($var_node, $context, false); } elseif ($expr === true) { return $this->removeTrueFromVariable($var_node, $context); + } elseif ($expr === []) { + return $this->removeEmptyArrayFromVariable($var_node, $context); } } // Remove all of the types which are loosely equal @@ -1149,7 +1172,7 @@ trait ConditionVisitorUtil } } if ($right instanceof Node) { - $result = $this->analyzeBinaryConditionSide($right, $left, $condition); + $result = $this->analyzeBinaryConditionSide($right, $left, $condition->withFlippedOperands()); if ($result !== null) { return $result; } @@ -1398,6 +1421,8 @@ trait ConditionVisitorUtil /** * Fetches the function name. Does not check for function uses or namespaces. + * + * TODO: Check for function uses * @param Node $node a node of kind ast\AST_CALL * @return ?string (null if function name could not be found) */ diff --git a/vendor/phan/phan/src/Phan/Analysis/NegatedConditionVisitor.php b/vendor/phan/phan/src/Phan/Analysis/NegatedConditionVisitor.php index b6b6041a..8ac15848 100644 --- a/vendor/phan/phan/src/Phan/Analysis/NegatedConditionVisitor.php +++ b/vendor/phan/phan/src/Phan/Analysis/NegatedConditionVisitor.php @@ -23,6 +23,7 @@ use Phan\Language\Type; use Phan\Language\Type\ArrayType; use Phan\Language\Type\FloatType; use Phan\Language\Type\GenericArrayType; +use Phan\Language\Type\IntersectionType; use Phan\Language\Type\IntType; use Phan\Language\Type\IterableType; use Phan\Language\Type\MixedType; @@ -633,10 +634,12 @@ class NegatedConditionVisitor extends KindVisitorImplementation implements Condi })->asNormalizedTypes()); }; /** @param list $unused_args */ - $zero_count_callback = static function (CodeBase $unused_code_base, Context $unused_context, Variable $variable, array $unused_args): void { - $variable->setUnionType($variable->getUnionType()->asMappedListUnionType(/** @return list */ static function (Type $type): array { + $zero_count_callback = static function (CodeBase $code_base, Context $context, Variable $variable, array $unused_args): void { + $variable->setUnionType($variable->getUnionType()->asMappedListUnionType(/** @return list */ static function (Type $type) use ($code_base, $context): array { if ($type->isPossiblyObject()) { - // TODO: Could cast iterable to Traversable|array{} + if ($type->isObject()) { + return [IntersectionType::createFromTypes([$type, Type::countableInstance()], $code_base, $context)]; + } return [$type]; } if (!$type->isPossiblyFalsey()) { diff --git a/vendor/phan/phan/src/Phan/Analysis/PostOrderAnalysisVisitor.php b/vendor/phan/phan/src/Phan/Analysis/PostOrderAnalysisVisitor.php index 188a9f23..bc76294b 100644 --- a/vendor/phan/phan/src/Phan/Analysis/PostOrderAnalysisVisitor.php +++ b/vendor/phan/phan/src/Phan/Analysis/PostOrderAnalysisVisitor.php @@ -40,7 +40,6 @@ use Phan\Language\Element\Variable; use Phan\Language\FQSEN\FullyQualifiedClassName; use Phan\Language\FQSEN\FullyQualifiedGlobalConstantName; use Phan\Language\Type; -use Phan\Language\Type\ArrayType; use Phan\Language\Type\FalseType; use Phan\Language\Type\GenericArrayType; use Phan\Language\Type\IntType; @@ -298,7 +297,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor } return $type; }); - $variable = clone($variable); + $variable = clone $variable; $context->addScopeVariable($variable); $variable->setUnionType($union_type); /* @@ -308,7 +307,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor $union_type = $union_type->withoutType($type)->withType( GenericArrayType::fromElementType($type->genericArrayElementType(), false, $type->getKeyType()) ); - $variable = clone($variable); + $variable = clone $variable; $context->addScopeVariable($variable); $variable->setUnionType($union_type); } @@ -509,10 +508,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor ); if (!$type->hasPrintableScalar()) { - if ($type->isType(ArrayType::instance(false)) - || $type->isType(ArrayType::instance(true)) - || $type->isGenericArray() - ) { + if ($type->isArray()) { $this->emitIssue( Issue::TypeConversionFromArray, $expr_node->lineno, @@ -615,12 +611,15 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor } else { $scope = $this->context->getScope(); if (!$scope->hasGlobalVariableWithName($variable_name)) { - $this->context->addGlobalScopeVariable(clone $variable); + $actual_global_variable = clone $variable; + $this->context->addGlobalScopeVariable($actual_global_variable); + } else { + // TODO: Support @global? + $actual_global_variable = $scope->getGlobalVariableByName($variable_name); } - // TODO: Support @global? - $actual_global_variable = $scope->getGlobalVariableByName($variable_name); - $scope_global_variable = $actual_global_variable instanceof GlobalVariable ? clone($actual_global_variable) : new GlobalVariable($actual_global_variable); - $scope_global_variable->setUnionType($actual_global_variable->getUnionType()->eraseRealTypeSetRecursively()); + $scope_global_variable = $actual_global_variable instanceof GlobalVariable ? (clone $actual_global_variable) : new GlobalVariable($actual_global_variable); + // Importing an undefined global by reference will make an undefined value a reference to null. + $scope_global_variable->setUnionType($actual_global_variable->getUnionType()->eraseRealTypeSetRecursively()->withIsPossiblyUndefined(false)); } // Note that we're not creating a new scope, just @@ -660,6 +659,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor } // NOTE: Phan can't be sure that the type the static type starts with is the same as what it has later. Avoid false positive PhanRedundantCondition. + // This should never be undefined with current limits on expressions found in static variables. $variable->setUnionType($default_type->eraseRealTypeSetRecursively()); // TODO: Probably not true in a loop? // TODO: Expand this to assigning to variables? (would need to make references invalidate that, and skip this in the global scope) @@ -706,10 +706,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor ); if (!$type->hasPrintableScalar()) { - if ($type->isType(ArrayType::instance(false)) - || $type->isType(ArrayType::instance(true)) - || $type->isGenericArray() - ) { + if ($type->isArray()) { $this->emitIssue( Issue::TypeConversionFromArray, $expr_node->lineno ?? $node->lineno, @@ -1250,7 +1247,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor } catch (IssueException | NodeException $_) { return $this->context; } - $variable = clone($variable); + $variable = clone $variable; $variable->setUnionType($new_type); $this->context->addScopeVariable($variable); return $this->context; @@ -1505,10 +1502,9 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor if (!$return_type->isEmpty() && !$func->hasReturn() - && !self::declOnlyThrows($node) - && !$return_type->hasType(VoidType::instance(false)) - && !$return_type->hasType(NullType::instance(false)) - && !$return_type->hasType(NeverType::instance(false)) + && !self::declNeverReturns($node) + && !$return_type->isNull() + && !$return_type->isNeverType() ) { $this->warnTypeMissingReturn($func, $node); } @@ -2001,7 +1997,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor RedundantCondition::emitInstance( $expr, $this->code_base, - (clone($this->context))->withLineNumberStart($expr->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($expr->lineno ?? $node->lineno), Issue::EmptyYieldFrom, [(string)$yield_from_type], Closure::fromCallable([BlockAnalysisVisitor::class, 'isEmptyIterable']) @@ -3029,9 +3025,10 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor && !$has_interface_class && !$return_type->isEmpty() && !$method->hasReturn() - && !self::declOnlyThrows($node) + && !self::declNeverReturns($node) && !$return_type->hasType(VoidType::instance(false)) && !$return_type->hasType(NullType::instance(false)) + && !$return_type->hasType(NeverType::instance(false)) ) { $this->warnTypeMissingReturn($method, $node); } @@ -3091,7 +3088,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor if (!$return_type->isEmpty() && !$function->hasReturn() - && !self::declOnlyThrows($node) + && !self::declNeverReturns($node) && !$return_type->hasType(VoidType::instance(false)) && !$return_type->hasType(NullType::instance(false)) ) { @@ -4204,7 +4201,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor if ($variable) { $set_variable_type = static function (UnionType $new_type) use ($code_base, $context, $variable, $argument): void { if ($variable instanceof Variable) { - $variable = clone($variable); + $variable = clone $variable; AssignmentVisitor::analyzeSetUnionTypeInContext($code_base, $context, $variable, $new_type, $argument); $context->addScopeVariable($variable); } else { @@ -4349,12 +4346,12 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor } $original_method_scope = $method->getInternalScope(); - $method->setInternalScope(clone($original_method_scope)); + $method->setInternalScope(clone $original_method_scope); try { // Even though we don't modify the parameter list, we still need to know the types // -- as an optimization, we don't run quick mode again if the types didn't change? $parameter_list = \array_map(static function (Parameter $parameter): Parameter { - return clone($parameter); + return clone $parameter; }, $method->getParameterList()); foreach ($parameter_list as $i => $parameter_clone) { @@ -4436,7 +4433,7 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor ): void { $method = $this->findDefiningMethod($method); $original_method_scope = $method->getInternalScope(); - $method->setInternalScope(clone($original_method_scope)); + $method->setInternalScope(clone $original_method_scope); $method_context = $method->getContext(); try { @@ -5046,12 +5043,12 @@ class PostOrderAnalysisVisitor extends AnalysisVisitor * @return bool * True when the decl can only throw an exception or return or exit() */ - private static function declOnlyThrows(Node $node): bool + private static function declNeverReturns(Node $node): bool { // Work around fallback parser generating methods without statements list. // Otherwise, 'stmts' would always be a Node due to preconditions. $stmts_node = $node->children['stmts']; - return $stmts_node instanceof Node && BlockExitStatusChecker::willUnconditionallyThrowOrReturn($stmts_node); + return $stmts_node instanceof Node && BlockExitStatusChecker::willUnconditionallyNeverReturn($stmts_node); } /** diff --git a/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php b/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php index ad66744b..4db76212 100644 --- a/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php +++ b/vendor/phan/phan/src/Phan/BlockAnalysisVisitor.php @@ -1177,7 +1177,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor RedundantCondition::emitInstance( $node->children['expr'], $this->code_base, - (clone($this->context))->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno), Issue::EmptyForeach, [(string)$union_type], Closure::fromCallable([self::class, 'isEmptyIterable']) @@ -1188,7 +1188,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor RedundantCondition::emitInstance( $node->children['expr'], $this->code_base, - (clone($this->context))->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno), + (clone $this->context)->withLineNumberStart($node->children['expr']->lineno ?? $node->lineno), Issue::EmptyForeachBody, [(string)$union_type], Closure::fromCallable([self::class, 'isDefinitelyNotObject']) @@ -2535,6 +2535,13 @@ class BlockAnalysisVisitor extends AnalysisVisitor // Step into each catch node and get an // updated context for the node $catch_context = $this->analyzeAndGetUpdatedContext($catch_context, $node, $catch_node); + $catch_stmts_node = $catch_node->children['stmts']; + if ($catch_stmts_node instanceof Node && BlockExitStatusChecker::willUnconditionallySkipRemainingStatements($catch_stmts_node)) { + // e.g. "} catch (Exception $e) { break; }" + if (!BlockExitStatusChecker::willUnconditionallyThrowOrReturn($catch_stmts_node)) { + $this->recordLoopContextForBreakOrContinue($catch_context); + } + } // NOTE: We let ContextMergeVisitor->mergeCatchContext decide if the block exit status is valid. $catch_context_list[] = $catch_context; } @@ -2891,7 +2898,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor RedundantCondition::emitInstance( $left_node, $this->code_base, - (clone($context))->withLineNumberStart($node->lineno), + (clone $context)->withLineNumberStart($node->lineno), Issue::CoalescingNeverNull, [ ASTReverter::toShortString($left_node), @@ -2907,7 +2914,7 @@ class BlockAnalysisVisitor extends AnalysisVisitor RedundantCondition::emitInstance( $left_node, $this->code_base, - (clone($context))->withLineNumberStart($node->lineno), + (clone $context)->withLineNumberStart($node->lineno), Issue::CoalescingAlwaysNull, [ ASTReverter::toShortString($left_node), diff --git a/vendor/phan/phan/src/Phan/Bootstrap.php b/vendor/phan/phan/src/Phan/Bootstrap.php index 10e167ab..dc4abf71 100644 --- a/vendor/phan/phan/src/Phan/Bootstrap.php +++ b/vendor/phan/phan/src/Phan/Bootstrap.php @@ -214,6 +214,7 @@ if (!extension_loaded('filter') && !function_exists('filter_var')) { /** * Print more of the backtrace than is done by default * @suppress PhanAccessMethodInternal + * @return never */ set_exception_handler(static function (Throwable $throwable): void { fwrite(STDERR, "ERROR: $throwable\n"); diff --git a/vendor/phan/phan/src/Phan/CLI.php b/vendor/phan/phan/src/Phan/CLI.php index 52a73f1f..df472cd4 100644 --- a/vendor/phan/phan/src/Phan/CLI.php +++ b/vendor/phan/phan/src/Phan/CLI.php @@ -52,6 +52,7 @@ use function min; use function phpversion; use function printf; use function shell_exec; +use function sprintf; use function str_repeat; use function strcasecmp; use function strlen; @@ -82,7 +83,7 @@ class CLI /** * This should be updated to x.y.z-dev after every release, and x.y.z before a release. */ - public const PHAN_VERSION = '5.0.0'; + public const PHAN_VERSION = '5.2.1'; /** * List of short flags passed to getopt @@ -518,7 +519,7 @@ class CLI case 'output-mode': if (!is_string($value) || !in_array($value, $factory->getTypes(), true)) { throw new UsageException( - \sprintf( + sprintf( 'Unknown output mode %s. Known values are [%s]', StringUtil::jsonEncode($value), \implode(',', $factory->getTypes()) @@ -614,7 +615,7 @@ class CLI case 'o': case 'output': if (!is_string($value)) { - throw new UsageException(\sprintf("Invalid arguments to --output: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); + throw new UsageException(sprintf("Invalid arguments to --output: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); } $output_file = \fopen($value, 'w'); if (!$output_file) { @@ -646,7 +647,7 @@ class CLI case 'processes': $processes = \filter_var($value, FILTER_VALIDATE_INT); if ($processes <= 0) { - throw new UsageException(\sprintf("Invalid arguments to --processes: %s (expected a positive integer)\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); + throw new UsageException(sprintf("Invalid arguments to --processes: %s (expected a positive integer)\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); } Config::setValue('processes', $processes); break; @@ -690,7 +691,7 @@ class CLI break; case 'native-syntax-check': if ($value === '') { - throw new UsageException(\sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); + throw new UsageException(sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($value)), EXIT_FAILURE); } if (!is_array($value)) { $value = [$value]; @@ -741,11 +742,11 @@ class CLI case 'daemonize-socket': self::checkCanDaemonize('unix', $key); if (!is_string($value)) { - throw new UsageException(\sprintf("Invalid arguments to --daemonize-socket: args=%s", StringUtil::jsonEncode($value)), EXIT_FAILURE); + throw new UsageException(sprintf("Invalid arguments to --daemonize-socket: args=%s", StringUtil::jsonEncode($value)), EXIT_FAILURE); } $socket_dirname = \realpath(\dirname($value)); if (!is_string($socket_dirname) || !\file_exists($socket_dirname) || !\is_dir($socket_dirname)) { - $msg = \sprintf( + $msg = sprintf( 'Requested to create Unix socket server in %s, but folder %s does not exist', StringUtil::jsonEncode($value), StringUtil::jsonEncode($socket_dirname) @@ -1010,7 +1011,7 @@ class CLI $resolved_binaries = []; foreach ($binaries as $binary) { if ($binary === '') { - throw new UsageException(\sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($binaries)), EXIT_FAILURE); + throw new UsageException(sprintf("Invalid arguments to --native-syntax-check: args=%s\n", StringUtil::jsonEncode($binaries)), EXIT_FAILURE); } if (DIRECTORY_SEPARATOR === '\\') { $cmd = 'where ' . escapeshellarg($binary); @@ -1019,10 +1020,10 @@ class CLI } $resolved = trim((string) shell_exec($cmd)); if ($resolved === '') { - throw new UsageException(\sprintf("Could not find PHP binary for --native-syntax-check: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE); + throw new UsageException(sprintf("Could not find PHP binary for --native-syntax-check: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE); } if (!is_executable($resolved)) { - throw new UsageException(\sprintf("PHP binary for --native-syntax-check is not executable: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE); + throw new UsageException(sprintf("PHP binary for --native-syntax-check is not executable: arg=%s\n", StringUtil::jsonEncode($binary)), EXIT_FAILURE); } $resolved_binaries[] = $resolved; } @@ -1124,7 +1125,7 @@ class CLI } if ($valid_files === 0) { // TODO convert this to an error in Phan 5. - $error_message = \sprintf( + $error_message = sprintf( "None of the files to analyze in %s exist - This will be an error in future Phan releases." . PHP_EOL, Config::getProjectRootDirectory() ); @@ -1223,7 +1224,7 @@ class CLI $details = ' (Referenced as ' . StringUtil::jsonEncode($plugin_path_or_name) . ')'; $details .= self::getPluginSuggestionText($plugin_path_or_name); } - self::printErrorToStderr(\sprintf( + self::printErrorToStderr(sprintf( "Phan %s could not find plugin %s%s\n", CLI::PHAN_VERSION, StringUtil::jsonEncode($plugin_file_name), @@ -1531,13 +1532,13 @@ $init_help -b, --backward-compatibility-checks Check for potential PHP 5 -> PHP 7 BC issues - --target-php-version {7.0,7.1,7.2,7.3,7.4,8.0,native} + --target-php-version {5.6,7.0,7.1,7.2,7.3,7.4,8.0,8.1,native} The PHP version that the codebase will be checked for compatibility against. For best results, the PHP binary used to run Phan should have the same PHP version. (Phan relies on Reflection for some param counts and checks for undefined classes/methods/functions) - --minimum-target-php-version {7.0,7.1,7.2,7.3,7.4,8.0,native} + --minimum-target-php-version {5.6,7.0,7.1,7.2,7.3,7.4,8.0,8.1,native} The PHP version that will be used for feature/syntax compatibility warnings. -i, --ignore-undeclared @@ -1945,7 +1946,7 @@ EOB */ public static function colorizeHelpSectionIfSupported(string $section): string { - if (Config::getValue('color_issue_messages') ?? (!self::hasNoColorEnv() && self::supportsColor(\STDOUT))) { + if (Config::getValue('color_issue_messages') ?? (!self::hasNoColorEnv() && \defined('STDOUT') && self::supportsColor(\STDOUT))) { $section = self::colorizeHelpSection($section); } return $section; @@ -2138,7 +2139,7 @@ EOB } if (!$file_info->isReadable()) { $file_path = $file_info->getRealPath(); - CLI::printErrorToStderr("Unable to read file $file_path: SplFileInfo->isReadable() is false, getPerms()=" . \sprintf("%o(octal)", @$file_info->getPerms()) . "\n"); + CLI::printErrorToStderr("Unable to read file $file_path: SplFileInfo->isReadable() is false, getPerms()=" . sprintf("%o(octal)", @$file_info->getPerms()) . "\n"); return false; } @@ -2148,7 +2149,7 @@ EOB return false; } } catch (Exception $e) { - CLI::printErrorToStderr(\sprintf("Unexpected error checking if %s should be parsed: %s %s\n", $file_info->getPathname(), \get_class($e), $e->getMessage())); + CLI::printErrorToStderr(sprintf("Unexpected error checking if %s should be parsed: %s %s\n", $file_info->getPathname(), \get_class($e), $e->getMessage())); return false; } @@ -2357,15 +2358,15 @@ EOB $columns = self::getColumns(); $left_side = \str_pad($msg, 10, ' ', STR_PAD_LEFT) . ' '; if ($columns - (60 + 10) > 19) { - $percent_progress = \sprintf('%1$ 5.1f', (int)(1000 * $p) / 10); + $percent_progress = sprintf('%1$ 5.1f', (int)(1000 * $p) / 10); } else { - $percent_progress = \sprintf("%1$ 3d", (int)(100 * $p)); + $percent_progress = sprintf("%1$ 3d", (int)(100 * $p)); } // Don't make the current memory usage in the progress bar shorter (avoid showing "MBB") $width = \max(2, strlen((string)(int)$peak)); $right_side = " " . $percent_progress . "%" . - \sprintf(' %' . $width . 'dMB/%' . $width . 'dMB', (int)$memory, (int)$peak); + sprintf(' %' . $width . 'dMB/%' . $width . 'dMB', (int)$memory, (int)$peak); // @phan-suppress-previous-line PhanPluginPrintfVariableFormatString // strlen(" 99% 999MB/999MB") == 17 @@ -2415,7 +2416,7 @@ EOB */ public static function debugProgress(string $msg, float $p, $details): void { - $pct = \sprintf("%d%%", (int)(100 * self::boundPercentage($p))); + $pct = sprintf("%d%%", (int)(100 * self::boundPercentage($p))); if ($details === null) { return; @@ -2578,7 +2579,7 @@ EOB $buf .= str_repeat(" ", self::PROGRESS_WIDTH - $mod); } // @phan-suppress-next-line PhanPluginPrintfVariableFormatString - $buf .= " " . \sprintf( + $buf .= " " . sprintf( "%" . strlen((string)(int)$count) . "d / %d (%3d%%) %.0fMB" . PHP_EOL, min(self::$current_progress_offset_long_progress, $count), (int)$count, @@ -2593,7 +2594,7 @@ EOB $buf .= self::colorizeProgressBarSegment(str_repeat($chr, $offset - self::$current_progress_offset_long_progress)); self::$current_progress_offset_long_progress = $offset; if (self::$current_progress_offset_long_progress === self::PROGRESS_WIDTH) { - $buf .= ' ' . \sprintf("%.0fMB" . PHP_EOL, $memory); + $buf .= ' ' . sprintf("%.0fMB" . PHP_EOL, $memory); } } } @@ -2650,7 +2651,7 @@ EOB if ($config_file_name !== false) { throw new UsageException("Could not find a config file at '$config_file_name', but --require-config-exists was set", EXIT_FAILURE, UsageException::PRINT_EXTENDED); } else { - $msg = \sprintf( + $msg = sprintf( "Could not figure out the path for config file %s, but --require-config-exists was set", StringUtil::encodeValue($this->config_file) ); @@ -2739,20 +2740,27 @@ EOB if (\version_compare($ast_version, '1.0.0') <= 0) { if ($ast_version === '') { // Seen in php 7.3 with file_cache when ast is initially enabled but later disabled, due to the result of extension_loaded being assumed to be a constant by opcache. - fwrite(STDERR, "ERROR: extension_loaded('ast') is true, but phpversion('ast') is the empty string. You probably need to clear opcache (opcache.file_cache='" . \ini_get('opcache.file_cache') . "')" . PHP_EOL); + CLI::printErrorToStderr("ERROR: extension_loaded('ast') is true, but phpversion('ast') is the empty string. You probably need to clear opcache (opcache.file_cache='" . \ini_get('opcache.file_cache') . "')" . PHP_EOL); } // NOTE: We haven't loaded the autoloader yet, so these issue messages can't be colorized. - \fprintf( - STDERR, - "ERROR: Phan 5.x requires php-ast %s+ because it depends on AST version 85. php-ast '%s' is installed." . PHP_EOL, + CLI::printErrorToStderr(sprintf( + "Phan 5.x requires php-ast %s+ because it depends on AST version 85. php-ast '%s' is installed." . PHP_EOL, Config::MINIMUM_AST_EXTENSION_VERSION, $ast_version - ); + )); require_once __DIR__ . '/Bootstrap.php'; \phan_output_ast_installation_instructions(); \fwrite(STDERR, "Exiting without analyzing files." . PHP_EOL); exit(1); } + if (\version_compare($ast_version, '1.0.11') < 0) { + CLI::printWarningToStderr(sprintf("php-ast %s is being used with Phan 5. php-ast 1.0.11 or newer is recommended for compatibility with plugins and support for AST version 85.\n", $ast_version)); + // Reuse PHAN_SUPPRESS_AST_DEPRECATION for this purpose as well. + if (!getenv('PHAN_SUPPRESS_AST_DEPRECATION')) { + \phan_output_ast_installation_instructions(); + fwrite(STDERR, "(Set PHAN_SUPPRESS_AST_DEPRECATION=1 to suppress this message)" . PHP_EOL); + } + } } /** diff --git a/vendor/phan/phan/src/Phan/Config.php b/vendor/phan/phan/src/Phan/Config.php index 1609e306..58947f32 100644 --- a/vendor/phan/phan/src/Phan/Config.php +++ b/vendor/phan/phan/src/Phan/Config.php @@ -22,6 +22,10 @@ use const PHP_EOL; use const PHP_VERSION; use const STDERR; +/** @internal hack to use dynamic configuration in class constant */ + +\define('Phan\AST_VERSION', \version_compare(\phpversion('ast') ?: '1.0.14', '1.0.11') >= 0 || \PHP_VERSION_ID >= 80100 ? 85 : 80); + /** * Program configuration. * @@ -41,12 +45,12 @@ class Config * The version of the AST (defined in php-ast) that we're using. * @see https://github.com/nikic/php-ast#ast-versioning */ - public const AST_VERSION = 85; + public const AST_VERSION = namespace\AST_VERSION; /** * The minimum AST extension version in the oldest php version supported by Phan. */ - public const MINIMUM_AST_EXTENSION_VERSION = '1.0.11'; + public const MINIMUM_AST_EXTENSION_VERSION = namespace\AST_VERSION === 85 ? '1.0.11' : '1.0.7'; /** * The version of the Phan plugin system. @@ -57,7 +61,7 @@ class Config * New features increment minor versions, and bug fixes increment patch versions. * @suppress PhanUnreferencedPublicClassConstant */ - public const PHAN_PLUGIN_VERSION = '3.4.0'; + public const PHAN_PLUGIN_VERSION = '3.5.0'; /** * @var string|null diff --git a/vendor/phan/phan/src/Phan/Daemon/Request.php b/vendor/phan/phan/src/Phan/Daemon/Request.php index d667c42d..f1e613dc 100644 --- a/vendor/phan/phan/src/Phan/Daemon/Request.php +++ b/vendor/phan/phan/src/Phan/Daemon/Request.php @@ -170,7 +170,7 @@ class Request } /** - * @return void (unreachable) + * @return never * @throws ExitException to imitate an exit without actually exiting */ public function exit(int $exit_code): void diff --git a/vendor/phan/phan/src/Phan/Issue.php b/vendor/phan/phan/src/Phan/Issue.php index ac0ea162..618c7cdb 100644 --- a/vendor/phan/phan/src/Phan/Issue.php +++ b/vendor/phan/phan/src/Phan/Issue.php @@ -650,6 +650,7 @@ class Issue public const CommentDuplicateMagicMethod = 'PhanCommentDuplicateMagicMethod'; public const CommentDuplicateMagicProperty = 'PhanCommentDuplicateMagicProperty'; public const CommentObjectInClassConstantType = 'PhanCommentObjectInClassConstantType'; + public const CommentUnsupportedUnionType = 'PhanCommentUnsupportedUnionType'; // phpcs:enable Generic.NamingConventions.UpperCaseConstantName.ClassConstantNotUpperCase // end of issue name constants @@ -2082,7 +2083,7 @@ class Issue new Issue( self::TypeNonVarPassByRef, self::CATEGORY_TYPE, - self::SEVERITY_NORMAL, + self::SEVERITY_CRITICAL, "Only variables can be passed by reference at argument {INDEX} of {FUNCTIONLIKE}", self::REMEDIATION_B, 10018 @@ -5586,6 +5587,14 @@ class Issue self::REMEDIATION_B, 16021 ), + new Issue( + self::CommentUnsupportedUnionType, + self::CATEGORY_COMMENT, + self::SEVERITY_LOW, + "Saw a union type {TYPE} with more than 1 type in a location that does not support union types", + self::REMEDIATION_B, + 16027 + ), ]; // phpcs:enable Generic.Files.LineLength diff --git a/vendor/phan/phan/src/Phan/Language/AnnotatedUnionType.php b/vendor/phan/phan/src/Phan/Language/AnnotatedUnionType.php index 567c4cc4..31c6efe4 100644 --- a/vendor/phan/phan/src/Phan/Language/AnnotatedUnionType.php +++ b/vendor/phan/phan/src/Phan/Language/AnnotatedUnionType.php @@ -121,7 +121,7 @@ class AnnotatedUnionType extends UnionType { $result = parent::__toString(); if ($this->is_possibly_undefined) { - return $result . '='; + return ($result !== '' ? $result : 'mixed') . '='; } return $result; } diff --git a/vendor/phan/phan/src/Phan/Language/Element/ClassConstant.php b/vendor/phan/phan/src/Phan/Language/Element/ClassConstant.php index 0f8ae8b7..88fe6368 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/ClassConstant.php +++ b/vendor/phan/phan/src/Phan/Language/Element/ClassConstant.php @@ -168,7 +168,7 @@ class ClassConstant extends ClassElement implements ConstantInterface // show public class constants as 'const', not 'public const'. // Also, PHP modules probably won't have private/protected constants. $string .= 'const ' . $this->name . ' = '; - $fqsen = $this->getFQSEN()->__toString(); + $fqsen = $this->fqsen->__toString(); if (\defined($fqsen)) { // TODO: Could start using $this->getNodeForValue()? // NOTE: This is used by tool/make_stubs, which is why it uses reflection instead of getting a node. diff --git a/vendor/phan/phan/src/Phan/Language/Element/Clazz.php b/vendor/phan/phan/src/Phan/Language/Element/Clazz.php index c5c82003..fbe0c811 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/Clazz.php +++ b/vendor/phan/phan/src/Phan/Language/Element/Clazz.php @@ -14,8 +14,8 @@ use Phan\Analysis\ClassInheritanceAnalyzer; use Phan\Analysis\CompositionAnalyzer; use Phan\Analysis\DuplicateClassAnalyzer; use Phan\Analysis\ParentConstructorCalledAnalyzer; -use Phan\Analysis\PropertyTypesAnalyzer; use Phan\Analysis\PostOrderAnalysisVisitor; +use Phan\Analysis\PropertyTypesAnalyzer; use Phan\AST\ASTReverter; use Phan\AST\UnionTypeVisitor; use Phan\CodeBase; @@ -71,6 +71,7 @@ use function strtolower; * * @phan-file-suppress PhanPluginDescriptionlessCommentOnPublicMethod * @phan-file-suppress PhanPluginNoCommentOnPublicMethod TODO: Add comments + * @property FullyQualifiedClassName $fqsen */ class Clazz extends AddressableElement { @@ -807,7 +808,7 @@ class Clazz extends AddressableElement } $property_fqsen = FullyQualifiedPropertyName::make( - $this->getFQSEN(), + $this->fqsen, $property_name ); @@ -817,7 +818,7 @@ class Clazz extends AddressableElement $property = clone($property); $property->setFQSEN($property_fqsen); if ($property->hasStaticInUnionType()) { - $property->inheritStaticUnionType($original_property_fqsen->getFullyQualifiedClassName(), $this->getFQSEN()); + $property->inheritStaticUnionType($original_property_fqsen->getFullyQualifiedClassName(), $this->fqsen); } // Private properties of traits are accessible from the class that used that trait @@ -918,7 +919,7 @@ class Clazz extends AddressableElement if (count($magic_property_map) === 0) { return true; // Vacuously true. } - $class_fqsen = $this->getFQSEN(); + $class_fqsen = $this->fqsen; $context = $this->internal_context; foreach ($magic_property_map as $comment_parameter) { // $phan_flags can be used to indicate if something is property-read or property-write @@ -931,7 +932,7 @@ class Clazz extends AddressableElement $original_union_type = $comment_parameter->getUnionType(); $union_type = $original_union_type->withStaticResolvedInContext($context); $property = new Property( - (clone($context))->withLineNumberStart($comment_parameter->getLine()), + (clone $context)->withLineNumberStart($comment_parameter->getLine()), $property_name, $union_type, 0, @@ -961,7 +962,7 @@ class Clazz extends AddressableElement if (count($magic_method_map) === 0) { return true; // Vacuously true. } - $class_fqsen = $this->getFQSEN(); + $class_fqsen = $this->fqsen; $context = $this->internal_context; $is_pure = $this->isPure(); foreach ($magic_method_map as $comment_method) { @@ -980,7 +981,7 @@ class Clazz extends AddressableElement $class_fqsen, $method_name ); - $method_context = (clone($context))->withLineNumberStart($comment_method->getLine()); + $method_context = (clone $context)->withLineNumberStart($comment_method->getLine()); $real_parameter_list = \array_map(static function (\Phan\Language\Element\Comment\Parameter $parameter) use ($method_context): Parameter { return $parameter->asRealParameter($method_context); }, $comment_method->getParameterList()); @@ -1012,7 +1013,7 @@ class Clazz extends AddressableElement ): bool { return $code_base->hasPropertyWithFQSEN( FullyQualifiedPropertyName::make( - $this->getFQSEN(), + $this->fqsen, $name ) ); @@ -1028,7 +1029,7 @@ class Clazz extends AddressableElement ): Property { return $code_base->getPropertyByFQSEN( FullyQualifiedPropertyName::make( - $this->getFQSEN(), + $this->fqsen, $name ) ); @@ -1066,7 +1067,7 @@ class Clazz extends AddressableElement // Get the FQSEN of the property we're looking for $property_fqsen = FullyQualifiedPropertyName::make( - $this->getFQSEN(), + $this->fqsen, $name ); @@ -1233,7 +1234,7 @@ class Clazz extends AddressableElement Issue::fromType(Issue::UndeclaredProperty)( $context->getFile(), $context->getLineNumberStart(), - [$this->getFQSEN() . ($is_static ? '::$' : '->') . $name], + [$this->fqsen . ($is_static ? '::$' : '->') . $name], IssueFixSuggester::suggestSimilarProperty($code_base, $context, $this, $name, $is_static) ) ); @@ -1461,7 +1462,7 @@ class Clazz extends AddressableElement public function getPropertyMap(CodeBase $code_base): array { return $code_base->getPropertyMapByFullyQualifiedClassName( - $this->getFQSEN() + $this->fqsen ); } @@ -1473,7 +1474,7 @@ class Clazz extends AddressableElement ClassConstant $constant ): void { $constant_fqsen = FullyQualifiedClassConstantName::make( - $this->getFQSEN(), + $this->fqsen, $constant->getName() ); @@ -1498,7 +1499,7 @@ class Clazz extends AddressableElement $this->getContext(), Issue::CommentAbstractOnInheritedConstant, $this->getContext()->getLineNumberStart(), - $this->getFQSEN(), + $this->fqsen, $constant->getRealDefiningFQSEN(), $constant->getContext()->getFile(), $constant->getContext()->getLineNumberStart(), @@ -1604,7 +1605,7 @@ class Clazz extends AddressableElement $enum_case->setEnumCaseValue($value); $old_name = $this->enum_case_map[$value] ?? null; if (is_string($old_name)) { - $old_enum_case_fqsen = FullyQualifiedClassConstantName::make($this->getFQSEN(), $old_name); + $old_enum_case_fqsen = FullyQualifiedClassConstantName::make($this->fqsen, $old_name); $old_enum_case = $code_base->getClassConstantByFQSEN($old_enum_case_fqsen); Issue::maybeEmit( $code_base, @@ -1650,7 +1651,7 @@ class Clazz extends AddressableElement ClassConstant $constant ): void { $constant_fqsen = FullyQualifiedClassConstantName::make( - $this->getFQSEN(), + $this->fqsen, $constant->getName() ); @@ -1675,7 +1676,7 @@ class Clazz extends AddressableElement ): bool { if ($code_base->hasClassConstantWithFQSEN( FullyQualifiedClassConstantName::make( - $this->getFQSEN(), + $this->fqsen, $name ) )) { @@ -1686,7 +1687,7 @@ class Clazz extends AddressableElement } return $code_base->hasClassConstantWithFQSEN( FullyQualifiedClassConstantName::make( - $this->getFQSEN(), + $this->fqsen, $name ) ); @@ -1718,7 +1719,7 @@ class Clazz extends AddressableElement ): ClassConstant { $constant_fqsen = FullyQualifiedClassConstantName::make( - $this->getFQSEN(), + $this->fqsen, $name ); @@ -1728,7 +1729,7 @@ class Clazz extends AddressableElement $context->getFile(), $context->getLineNumberStart(), [ - $this->getFQSEN() . '::' . $constant_fqsen + $this->fqsen . '::' . $constant_fqsen ], IssueFixSuggester::suggestSimilarClassConstant($code_base, $context, $constant_fqsen) ) @@ -1787,7 +1788,7 @@ class Clazz extends AddressableElement public function getConstantMap(CodeBase $code_base): array { return $code_base->getClassConstantMapByFullyQualifiedClassName( - $this->getFQSEN() + $this->fqsen ); } @@ -1810,7 +1811,7 @@ class Clazz extends AddressableElement Option $type_option ): void { $method_fqsen = FullyQualifiedMethodName::make( - $this->getFQSEN(), + $this->fqsen, $method->getName(), $method->getFQSEN()->getAlternateId() ); @@ -1824,6 +1825,9 @@ class Clazz extends AddressableElement // TODO: Consider all permutations of abstract and real methods on classes, interfaces, and traits. $existing_method = $code_base->getMethodByFQSEN($method_fqsen); + if ($existing_method->getRealDefiningFQSEN() === $method->getRealDefiningFQSEN()) { + return; + } $existing_method_defining_fqsen = $existing_method->getDefiningFQSEN(); // Note: For private/protected methods, the defining FQSEN is set to the FQSEN of the inheriting class. // So, when multiple traits are inherited, they may have identical defining FQSENs, but some may be abstract, and others may be implemented. @@ -1831,26 +1835,21 @@ class Clazz extends AddressableElement if ($method->isAbstract() === $existing_method->isAbstract()) { return; } - } else { - self::markMethodAsOverridden($code_base, $existing_method_defining_fqsen); } - if ($existing_method->getRealDefiningFQSEN() === $method->getRealDefiningFQSEN()) { - return; - } if ($existing_method->getRealDefiningFQSEN() === $method_fqsen || $method->isAbstract() || !$existing_method->isAbstract() || $existing_method->isNewConstructor()) { // TODO: What if both of these are abstract, and those get combined into an abstract class? // Should phan check compatibility of the abstract methods it inherits? $existing_method->setIsOverride(true); // TODO: What happens for protected methods and traits with getDefiningFQSEN - self::markMethodAsOverridden($code_base, $method->getDefiningFQSEN()); + self::markMethodAsOverridden($code_base, $method->getDefiningFQSEN(), $method_fqsen); // Don't add the method since it was already added return; } elseif ($method->getRealDefiningFQSEN() === $method_fqsen) { $method->setIsOverride(true); // TODO: What happens for traits with getDefiningFQSEN - self::markMethodAsOverridden($code_base, $existing_method->getDefiningFQSEN()); + self::markMethodAsOverridden($code_base, $existing_method->getDefiningFQSEN(), $method_fqsen); } } @@ -1944,7 +1943,7 @@ class Clazz extends AddressableElement } $method_fqsen = FullyQualifiedMethodName::make( - $this->getFQSEN(), + $this->fqsen, $name ); @@ -1968,7 +1967,7 @@ class Clazz extends AddressableElement string $name ): Method { $method_fqsen = FullyQualifiedMethodName::make( - $this->getFQSEN(), + $this->fqsen, $name ); @@ -1989,7 +1988,7 @@ class Clazz extends AddressableElement throw new CodeBaseException( $method_fqsen, - "Method with name $name does not exist for class {$this->getFQSEN()}." + "Method with name $name does not exist for class {$this->fqsen}." ); } @@ -2003,7 +2002,7 @@ class Clazz extends AddressableElement public function getMethodMap(CodeBase $code_base): array { return $code_base->getMethodMapByFullyQualifiedClassName( - $this->getFQSEN() + $this->fqsen ); } @@ -2381,7 +2380,7 @@ class Clazz extends AddressableElement if ($this->isEnum()) { return true; } - return array_key_exists(strtolower($this->getFQSEN()->__toString()), self::IMMUTABLE_CLASS_SET); + return array_key_exists(strtolower($this->fqsen->__toString()), self::IMMUTABLE_CLASS_SET); } /** @@ -2669,7 +2668,7 @@ class Clazz extends AddressableElement // Treat it as if all of the properties were added, with their real and phpdoc union types. // TODO: Finalize behavior for edge cases such as `static` and templates in union types $new_property = clone($property); - $new_property->setFQSEN(FullyQualifiedPropertyName::make($this->getFQSEN(), $name)); + $new_property->setFQSEN(FullyQualifiedPropertyName::make($this->fqsen, $name)); $new_property->setPhanFlags($new_property->getPhanFlags() | Flags::IS_FROM_PHPDOC); $this->addProperty($code_base, $new_property, None::instance()); } @@ -2692,7 +2691,7 @@ class Clazz extends AddressableElement return; } - if ($this->getParentClassFQSEN() === $this->getFQSEN()) { + if ($this->getParentClassFQSEN() === $this->fqsen) { return; } @@ -2728,7 +2727,7 @@ class Clazz extends AddressableElement return; } - if ($this->getParentClassFQSEN() === $this->getFQSEN()) { + if ($this->getParentClassFQSEN() === $this->fqsen) { return; } @@ -2930,7 +2929,7 @@ class Clazz extends AddressableElement $this->getContext(), Issue::CommentAbstractOnInheritedProperty, $this->getContext()->getLineNumberStart(), - $this->getFQSEN(), + $this->fqsen, $property->getRealDefiningFQSEN(), $property->getContext()->getFile(), $property->getContext()->getLineNumberStart(), @@ -2998,7 +2997,7 @@ class Clazz extends AddressableElement $old_type = $parameter->getNonVariadicUnionType(); $type = $old_type->withSelfResolvedInContext($context); if ($type->hasStaticType()) { - $type = $type->withType($this->getFQSEN()->asType()); + $type = $type->withType($this->fqsen->asType()); } if ($old_type !== $type) { $changed = true; @@ -3017,7 +3016,7 @@ class Clazz extends AddressableElement $old_type = $parameter->getNonVariadicUnionType(); $type = $old_type->withSelfResolvedInContext($context); if ($type->hasStaticType()) { - $type = $type->withType($this->getFQSEN()->asType()); + $type = $type->withType($this->fqsen->asType()); } if ($old_type !== $type) { $changed = true; @@ -3061,7 +3060,7 @@ class Clazz extends AddressableElement $this->getContext(), Issue::UndeclaredAliasedMethodOfTrait, $original_trait_alias_source->getAliasLineno(), // TODO: Track line number in TraitAdaptation - \sprintf('%s::%s', (string)$this->getFQSEN(), $alias_method_name), + \sprintf('%s::%s', (string)$this->fqsen, $alias_method_name), \sprintf('%s::%s', (string)$class->getFQSEN(), $source_method_name), $class->getName() ); @@ -3100,7 +3099,7 @@ class Clazz extends AddressableElement $this->getContext(), $issue_type, $this->getContext()->getLineNumberStart(), - $this->getFQSEN(), + $this->fqsen, $inherited_class->__toString(), $first_context->getFile(), $first_context->getLineNumberStart(), @@ -3192,7 +3191,7 @@ class Clazz extends AddressableElement $string .= 'Class '; } - $string .= (string)$this->getFQSEN()->getCanonicalFQSEN(); + $string .= (string)$this->fqsen->getCanonicalFQSEN(); return $string; } @@ -3220,7 +3219,7 @@ class Clazz extends AddressableElement $string .= 'class '; } - $string .= $this->getFQSEN()->getName(); + $string .= $this->fqsen->getName(); $extend_types = []; $implements_types = []; @@ -3253,7 +3252,7 @@ class Clazz extends AddressableElement public function getMarkupDescription(): string { - $fqsen = $this->getFQSEN(); + $fqsen = $this->fqsen; $string = ''; $namespace = \ltrim($fqsen->getNamespace(), '\\'); if ($namespace !== '') { @@ -3327,7 +3326,7 @@ class Clazz extends AddressableElement return $property->toStub(); }, $property_map)); } - $reflection_class = new \ReflectionClass((string)$this->getFQSEN()); + $reflection_class = new \ReflectionClass((string)$this->fqsen); $method_map = \array_filter($this->getMethodMap($code_base), static function (Method $method) use ($reflection_class): bool { if ($method->getFQSEN()->isAlternate()) { return false; @@ -3345,7 +3344,7 @@ class Clazz extends AddressableElement } $stub .= "\n}\n\n"; - $namespace = \ltrim($this->getFQSEN()->getNamespace(), '\\'); + $namespace = \ltrim($this->fqsen->getNamespace(), '\\'); return [$namespace, $stub]; } @@ -3360,7 +3359,7 @@ class Clazz extends AddressableElement } // Create the 'class' constant - $class_constant_value = \ltrim($this->getFQSEN()->__toString(), '\\'); + $class_constant_value = \ltrim($this->fqsen->__toString(), '\\'); $class_constant = new ClassConstant( $this->getContext(), 'class', @@ -3370,7 +3369,7 @@ class Clazz extends AddressableElement )->asRealUnionType(), 0, FullyQualifiedClassConstantName::make( - $this->getFQSEN(), + $this->fqsen, 'class' ) ); @@ -3538,7 +3537,7 @@ class Clazz extends AddressableElement $this->getContext(), Issue::CommentAbstractOnInheritedMethod, $this->getContext()->getLineNumberStart(), - $this->getFQSEN(), + $this->fqsen, $method->getRealDefiningFQSEN(), $method->getContext()->getFile(), $method->getContext()->getLineNumberStart(), @@ -3784,7 +3783,7 @@ class Clazz extends AddressableElement Issue::GenericConstructorTypes, $constructor_method->getContext()->getLineNumberStart(), $template_type, - $this->getFQSEN() + $this->fqsen ); } /** @param list<\ast\Node|mixed> $unused_arg_list */ @@ -3837,13 +3836,22 @@ class Clazz extends AddressableElement return null; } - private static function markMethodAsOverridden(CodeBase $code_base, FullyQualifiedMethodName $method_fqsen): void - { + private static function markMethodAsOverridden( + CodeBase $code_base, + FullyQualifiedMethodName $method_fqsen, + FullyQualifiedMethodName $overriding_method_fqsen + ): void { if (!$code_base->hasMethodWithFQSEN($method_fqsen)) { return; } $method = $code_base->getMethodByFQSEN($method_fqsen); - $method->setIsOverriddenByAnother(true); + /* + if ($method->getName() === 'getBaz') { + echo "Marking $method_fqsen as overridden by $overriding_method_fqsen\n"; + debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + } + */ + $method->setIsOverriddenByAnother(true, $overriding_method_fqsen); } /** @@ -3968,7 +3976,7 @@ class Clazz extends AddressableElement // Inherit properties from traits $this->hydrate($code_base); - $fqsen = $this->getFQSEN(); + $fqsen = $this->fqsen; foreach ($this->getPropertyMap($code_base) as $property) { $context = $property->getRealDefiningFQSEN()->getFullyQualifiedClassName() === $fqsen ? $property->getContext() : $this->getContext(); Issue::maybeEmit( @@ -3976,7 +3984,7 @@ class Clazz extends AddressableElement $context, Issue::EnumCannotHaveProperties, $context->getLineNumberStart(), - $this->getFQSEN(), + $this->fqsen, $property->getName(), $property->getContext()->getFile(), $property->getContext()->getLineNumberStart() @@ -3994,7 +4002,7 @@ class Clazz extends AddressableElement $context, Issue::EnumForbiddenMagicMethod, $context->getLineNumberStart(), - $this->getFQSEN(), + $this->fqsen, $method->getName() . '()', $method->getContext()->getFile(), $method->getContext()->getLineNumberStart() @@ -4009,7 +4017,7 @@ class Clazz extends AddressableElement $context, Issue::InstanceMethodWithNoEnumCases, $context->getLineNumberStart(), - $this->getFQSEN(), + $this->fqsen, $method->getName() . '()', $method->getContext()->getFile(), $method->getContext()->getLineNumberStart() @@ -4041,7 +4049,7 @@ class Clazz extends AddressableElement 'name', $string_type, ast\flags\MODIFIER_PUBLIC, - FullyQualifiedPropertyName::make($this->getFQSEN(), 'name'), + FullyQualifiedPropertyName::make($this->fqsen, 'name'), $string_type ); $name_property->setPhanFlags(Flags::IS_READ_ONLY | Flags::IS_ENUM_PROPERTY); @@ -4053,7 +4061,7 @@ class Clazz extends AddressableElement 'value', $value_type, ast\flags\MODIFIER_PUBLIC, - FullyQualifiedPropertyName::make($this->getFQSEN(), 'name'), + FullyQualifiedPropertyName::make($this->fqsen, 'name'), $value_type ); $value_property->setPhanFlags(Flags::IS_READ_ONLY | Flags::IS_ENUM_PROPERTY); diff --git a/vendor/phan/phan/src/Phan/Language/Element/Func.php b/vendor/phan/phan/src/Phan/Language/Element/Func.php index 53345f14..41087d99 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/Func.php +++ b/vendor/phan/phan/src/Phan/Language/Element/Func.php @@ -29,6 +29,7 @@ use Phan\Memoize; * Phan's representation of a closure or global function. * * @phan-file-suppress PhanPartialTypeMismatchArgument + * @property FullyQualifiedFunctionName $fqsen */ class Func extends AddressableElement implements FunctionInterface { @@ -334,7 +335,7 @@ class Func extends AddressableElement implements FunctionInterface public function alternateGenerator(CodeBase $code_base): \Generator { $alternate_id = 0; - $fqsen = $this->getFQSEN(); + $fqsen = $this->fqsen; while ($code_base->hasFunctionWithFQSEN($fqsen)) { yield $code_base->getFunctionByFQSEN($fqsen); @@ -394,7 +395,7 @@ class Func extends AddressableElement implements FunctionInterface */ public function isClosure(): bool { - return $this->getFQSEN()->isClosure(); + return $this->fqsen->isClosure(); } /** @@ -411,7 +412,7 @@ class Func extends AddressableElement implements FunctionInterface public function getMarkupDescription(): string { - $fqsen = $this->getFQSEN(); + $fqsen = $this->fqsen; $namespace = \ltrim($fqsen->getNamespace(), '\\'); $stub = ''; if (StringUtil::isNonZeroLengthString($namespace)) { @@ -438,7 +439,7 @@ class Func extends AddressableElement implements FunctionInterface */ public function toStubInfo(): array { - $fqsen = $this->getFQSEN(); + $fqsen = $this->fqsen; $stub = ''; if (self::shouldAddDescriptionsToStubs()) { $description = (string)MarkupDescription::extractDescriptionFromDocComment($this); diff --git a/vendor/phan/phan/src/Phan/Language/Element/FunctionInterface.php b/vendor/phan/phan/src/Phan/Language/Element/FunctionInterface.php index 356bfba3..6bd777b5 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/FunctionInterface.php +++ b/vendor/phan/phan/src/Phan/Language/Element/FunctionInterface.php @@ -15,6 +15,7 @@ use Phan\Language\Type; use Phan\Language\Type\FunctionLikeDeclarationType; use Phan\Language\Type\TemplateType; use Phan\Language\UnionType; +use Phan\PluginV3; /** * Interface defining the behavior of both Methods and Functions @@ -360,14 +361,17 @@ interface FunctionInterface extends AddressableElementInterface /** * Make additional analysis logic of this function/method use $closure - * If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures or use addFunctionCallAnalyzer. + * If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures with addFunctionCallAnalyzer and the plugin that created the closure. + * @suppress PhanUnreferencedPublicMethod + * @deprecated */ public function setFunctionCallAnalyzer(Closure $closure): void; /** * If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures. + * @param ?PluginV3 $plugin @phan-mandatory-param */ - public function addFunctionCallAnalyzer(Closure $closure): void; + public function addFunctionCallAnalyzer(Closure $closure, ?PluginV3 $plugin = null): void; /** * Initialize the inner scope of this method with variables created from the parameters. diff --git a/vendor/phan/phan/src/Phan/Language/Element/FunctionTrait.php b/vendor/phan/phan/src/Phan/Language/Element/FunctionTrait.php index 42a355e8..a743f58e 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/FunctionTrait.php +++ b/vendor/phan/phan/src/Phan/Language/Element/FunctionTrait.php @@ -40,6 +40,7 @@ use Phan\Language\Type\TrueType; use Phan\Language\Type\VoidType; use Phan\Language\UnionType; use Phan\Plugin\ConfigPluginSet; +use Phan\PluginV3; use function count; use function end; @@ -1151,6 +1152,7 @@ trait FunctionTrait /** * Make additional analysis logic of this function/method use $closure * If callers need to invoke multiple closures, they should pass in a closure to invoke multiple closures or use addFunctionCallAnalyzer. + * @suppress PhanUnreferencedPublicMethod */ public function setFunctionCallAnalyzer(Closure $closure): void { @@ -1163,10 +1165,11 @@ trait FunctionTrait /** * Make additional analysis logic of this function/method use $closure in addition to any other closures. + * @param ?PluginV3 $plugin @phan-mandatory-param */ - public function addFunctionCallAnalyzer(Closure $closure): void + public function addFunctionCallAnalyzer(Closure $closure, PluginV3 $plugin = null): void { - $closure_id = spl_object_id($closure); + $closure_id = spl_object_id($plugin ?? $closure); if (isset($this->function_call_analyzer_callback_set[$closure_id])) { return; } diff --git a/vendor/phan/phan/src/Phan/Language/Element/GlobalConstant.php b/vendor/phan/phan/src/Phan/Language/Element/GlobalConstant.php index b8006760..d418d3d7 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/GlobalConstant.php +++ b/vendor/phan/phan/src/Phan/Language/Element/GlobalConstant.php @@ -15,6 +15,7 @@ use Phan\Library\StringUtil; /** * Phan's representation of a global constant + * @property FullyQualifiedGlobalConstantName $fqsen */ class GlobalConstant extends AddressableElement implements ConstantInterface { @@ -137,7 +138,7 @@ class GlobalConstant extends AddressableElement implements ConstantInterface /** @return array{0:string,1:string} [string $namespace, string $text] */ public function toStubInfo(): array { - $fqsen = (string)$this->getFQSEN(); + $fqsen = (string)$this->fqsen; $pos = \strrpos($fqsen, '\\'); if ($pos !== false) { $name = (string)\substr($fqsen, $pos + 1); @@ -153,7 +154,7 @@ class GlobalConstant extends AddressableElement implements ConstantInterface $repr = 'null'; $comment = ' // could not find'; } - $namespace = \ltrim($this->getFQSEN()->getNamespace(), '\\'); + $namespace = \ltrim($this->fqsen->getNamespace(), '\\'); if (\preg_match('@^[a-zA-Z_\x7f-\xff\\\][a-zA-Z0-9_\x7f-\xff\\\]*$@D', $name)) { $string = "const $name = $repr;$comment\n"; } else { diff --git a/vendor/phan/phan/src/Phan/Language/Element/GlobalVariable.php b/vendor/phan/phan/src/Phan/Language/Element/GlobalVariable.php index dc61e588..9c5211c3 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/GlobalVariable.php +++ b/vendor/phan/phan/src/Phan/Language/Element/GlobalVariable.php @@ -23,6 +23,7 @@ class GlobalVariable extends Variable { $this->type = $type; // Always merge the type on the actual global. - $this->element->setUnionType($this->element->getUnionType()->withUnionType($type->eraseRealTypeSetRecursively())); + // Convert undefined to null before merging in the type. + $this->element->setUnionType($this->element->getUnionType()->withUnionType($type->eraseRealTypeSetRecursively())->withIsPossiblyUndefined(false)); } } diff --git a/vendor/phan/phan/src/Phan/Language/Element/Method.php b/vendor/phan/phan/src/Phan/Language/Element/Method.php index 43b07f76..32900d8c 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/Method.php +++ b/vendor/phan/phan/src/Phan/Language/Element/Method.php @@ -19,6 +19,7 @@ use Phan\Language\Scope\ClassScope; use Phan\Language\Scope\FunctionLikeScope; use Phan\Language\Scope\GlobalScope; use Phan\Language\UnionType; +use Phan\Library\Set; use Phan\Memoize; /** @@ -26,6 +27,7 @@ use Phan\Memoize; * * @phan-file-suppress PhanPartialTypeMismatchArgument * @method FullyQualifiedMethodName getDefiningFQSEN() @phan-suppress-current-line PhanParamSignaturePHPDocMismatchReturnType + * @property FullyQualifiedMethodName $fqsen */ class Method extends ClassElement implements FunctionInterface { @@ -49,6 +51,11 @@ class Method extends ClassElement implements FunctionInterface */ private $defining_method_for_type_fetching; + /** + * @var Set FQSENs of methods potentially overriding this one. + */ + private $method_overrides; + /** * @param Context $context * The context in which the structural element lives @@ -110,6 +117,8 @@ class Method extends ClassElement implements FunctionInterface $this->setParameterList($parameter_list); } $this->checkForTemplateTypes(); + + $this->method_overrides = new Set(); } public function __clone() @@ -166,19 +175,52 @@ class Method extends ClassElement implements FunctionInterface return $this->getPhanFlagsHasState(Flags::IS_OVERRIDDEN_BY_ANOTHER); } + /** + * Returns a (possibly incomplete) list of methods overriding this one. + * @param CodeBase $code_base + * @return list + * @suppress PhanUnreferencedPublicMethod May be called by plugins (#4502) + */ + public function getPossibleOverrides(CodeBase $code_base): array + { + $ret = []; + foreach ($this->method_overrides as $fqsen) { + // Consistency checks, mostly for language server mode. + /** @var FullyQualifiedMethodName $fqsen */ + if (!$code_base->hasMethodWithFQSEN($fqsen)) { + continue; + } + $method = $code_base->getMethodByFQSEN($fqsen); + if ($method->getDefiningFQSEN() !== $fqsen) { + continue; + } + $subclassExpanded = $method->getClassFQSEN()->asType()->asExpandedTypes($code_base); + $thisClassType = $this->getClassFQSEN()->asType(); + if ($subclassExpanded->hasType($thisClassType)) { + $ret[] = $method; + } + } + return $ret; + } + /** * Sets whether this method is overridden by another method * * @param bool $is_overridden_by_another * True if this method is overridden by another method + * @param FullyQualifiedMethodName|null $fqsen + * FQSEN of the overriding method, if available and $is_overridden_by_another is true. */ - public function setIsOverriddenByAnother(bool $is_overridden_by_another): void + public function setIsOverriddenByAnother(bool $is_overridden_by_another, FullyQualifiedMethodName $fqsen = null): void { $this->setPhanFlags(Flags::bitVectorWithState( $this->getPhanFlags(), Flags::IS_OVERRIDDEN_BY_ANOTHER, $is_overridden_by_another )); + if ($is_overridden_by_another && $fqsen) { + $this->method_overrides->attach($fqsen); + } } /** @@ -675,7 +717,7 @@ class Method extends ClassElement implements FunctionInterface // If the type contains 'static', add this method's class // to the return type. - $scope = new ClassScope(new GlobalScope(), $this->getFQSEN()->getFullyQualifiedClassName(), 0); + $scope = new ClassScope(new GlobalScope(), $this->fqsen->getFullyQualifiedClassName(), 0); $new_union_type = $union_type->withStaticResolvedInContext((clone $this->getContext())->withScope($scope)); if ($new_union_type !== $union_type) { $union_type = $union_type->withUnionType($new_union_type); @@ -704,7 +746,7 @@ class Method extends ClassElement implements FunctionInterface { // Workaround so that methods of generic classes will have the resolved template types yield $this; - $fqsen = $this->getFQSEN(); + $fqsen = $this->fqsen; $alternate_id = $fqsen->getAlternateId() + 1; $fqsen = $fqsen->withAlternateId($alternate_id); diff --git a/vendor/phan/phan/src/Phan/Language/Element/Parameter.php b/vendor/phan/phan/src/Phan/Language/Element/Parameter.php index 4f67d762..68e6c627 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/Parameter.php +++ b/vendor/phan/phan/src/Phan/Language/Element/Parameter.php @@ -382,7 +382,7 @@ class Parameter extends Variable ); } $parameter = Parameter::create( - (clone($context))->withLineNumberStart($node->lineno), + (clone $context)->withLineNumberStart($node->lineno), $parameter_name, $union_type, $node->flags @@ -448,7 +448,7 @@ class Parameter extends Variable if (!$has_error) { $parameter->setDefaultValueFutureType(new FutureUnionType( $code_base, - (clone($context))->withLineNumberStart($default_node->lineno ?? 0), + (clone $context)->withLineNumberStart($default_node->lineno ?? 0), $default_node )); } diff --git a/vendor/phan/phan/src/Phan/Language/Element/Property.php b/vendor/phan/phan/src/Phan/Language/Element/Property.php index e9482524..a8dde194 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/Property.php +++ b/vendor/phan/phan/src/Phan/Language/Element/Property.php @@ -473,7 +473,7 @@ class Property extends ClassElement try { $union_type = $future_union_type->get(); if (!$this->real_union_type->isEmpty() - && !$union_type->canStrictCastToUnionType($future_union_type->getCodeBase(), $this->real_union_type)) { + && !$union_type->canCastToUnionType($this->real_union_type, $future_union_type->getCodeBase())) { Issue::maybeEmit( $future_union_type->getCodeBase(), $future_union_type->getContext(), diff --git a/vendor/phan/phan/src/Phan/Language/Element/Variable.php b/vendor/phan/phan/src/Phan/Language/Element/Variable.php index 717d7ad4..1741e44d 100644 --- a/vendor/phan/phan/src/Phan/Language/Element/Variable.php +++ b/vendor/phan/phan/src/Phan/Language/Element/Variable.php @@ -290,7 +290,7 @@ class Variable extends UnaddressableTypedElement implements TypedElementInterfac { $string = ''; - if (!$this->type->isEmpty()) { + if (!$this->type->isEmpty() || $this->type->isPossiblyUndefined()) { $string .= "{$this->type->getDebugRepresentation()} "; } diff --git a/vendor/phan/phan/src/Phan/Language/EmptyUnionType.php b/vendor/phan/phan/src/Phan/Language/EmptyUnionType.php index fc5fa919..16216daa 100644 --- a/vendor/phan/phan/src/Phan/Language/EmptyUnionType.php +++ b/vendor/phan/phan/src/Phan/Language/EmptyUnionType.php @@ -979,13 +979,31 @@ final class EmptyUnionType extends UnionType /** * @return bool - * True if this is exclusively generic types + * True if this is non-empty and exclusively generic array types */ public function isGenericArray(): bool { return false; // empty } + /** + * @return bool + * True if this is non-empty and exclusively array types. + */ + public function isArray(): bool + { + return false; // empty + } + + /** + * @return bool + * True if this is non-empty and exclusively object types. + */ + public function isObject(): bool + { + return false; // empty + } + /** * @return bool * True if any of the types in this UnionType made $matcher_callback return true diff --git a/vendor/phan/phan/src/Phan/Language/FQSEN/AbstractFQSEN.php b/vendor/phan/phan/src/Phan/Language/FQSEN/AbstractFQSEN.php index d29f85ea..72346361 100644 --- a/vendor/phan/phan/src/Phan/Language/FQSEN/AbstractFQSEN.php +++ b/vendor/phan/phan/src/Phan/Language/FQSEN/AbstractFQSEN.php @@ -98,6 +98,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable abstract public function __toString(): string; /** + * @return never * @throws Error to prevent accidentally calling this */ public function __clone() @@ -108,6 +109,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable /** * @throws Error to prevent accidentally calling this + * @return never */ public function serialize(): string { @@ -117,6 +119,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable /** * @param string $serialized + * @return never * @throws Error to prevent accidentally calling this */ public function unserialize($serialized): void @@ -127,7 +130,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable /** * @throws Error to prevent accidentally calling this - * @return array TODO: Switch to phpdoc never + * @return never */ public function __serialize(): array { @@ -138,6 +141,7 @@ abstract class AbstractFQSEN implements FQSEN, Serializable * @unused-param $data * @param array $data * @throws Error to prevent accidentally calling this + * @return never */ public function __unserialize(array $data): void { diff --git a/vendor/phan/phan/src/Phan/Language/FQSEN/FullyQualifiedGlobalStructuralElement.php b/vendor/phan/phan/src/Phan/Language/FQSEN/FullyQualifiedGlobalStructuralElement.php index 7a71357e..df39b7d6 100644 --- a/vendor/phan/phan/src/Phan/Language/FQSEN/FullyQualifiedGlobalStructuralElement.php +++ b/vendor/phan/phan/src/Phan/Language/FQSEN/FullyQualifiedGlobalStructuralElement.php @@ -264,6 +264,7 @@ abstract class FullyQualifiedGlobalStructuralElement extends AbstractFQSEN $key, /** * @throws FQSENException + * @return never */ static function (): self { // Reuse the exception to save time generating an unused stack trace. diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php index 0ead95bd..5a9dd70e 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap.php @@ -40,7 +40,7 @@ namespace Phan\Language\Internal; * 1. '&rw_name' indicates that a parameter with a value is expected to be passed in, and may be modified. * 2. '&w_name' indicates that a parameter is expected to be passed in, and the value will be ignored, and may be overwritten. * - * This file contains the signatures for the most recent minor release of PHP supported by phan (php 7.2) + * This file contains the signatures for the most recent minor release of PHP supported by phan (php 8.0) * * Changes: * @@ -245,7 +245,7 @@ return [ 'apache_getenv' => ['string|false', 'variable'=>'string', 'walk_to_top='=>'bool'], 'apache_lookup_uri' => ['object', 'filename'=>'string'], 'apache_note' => ['string|false', 'note_name'=>'string', 'note_value='=>'string'], -'apache_request_headers' => ['array|false'], +'apache_request_headers' => ['array'], 'apache_reset_timeout' => ['bool'], 'apache_response_headers' => ['array'], 'apache_setenv' => ['bool', 'variable'=>'string', 'value'=>'string', 'walk_to_top='=>'bool'], @@ -359,7 +359,7 @@ return [ 'array_change_key_case' => ['associative-array', 'array'=>'array', 'case='=>'int'], 'array_chunk' => ['list', 'array'=>'array', 'length'=>'int', 'preserve_keys='=>'bool'], 'array_column' => ['array', 'array'=>'array', 'column_key'=>'?int|?string', 'index_key='=>'?int|?string'], -'array_combine' => ['associative-array|false', 'keys'=>'string[]|int[]', 'values'=>'array'], +'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'], @@ -379,7 +379,7 @@ return [ '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_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|list', 'array'=>'array', 'filter_value='=>'mixed', 'strict='=>'bool'], @@ -518,8 +518,8 @@ return [ 'bbcode_set_flags' => ['bool', 'bbcode_container'=>'resource', 'flags'=>'int', 'mode='=>'int'], 'bcadd' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bccomp' => ['int', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], -'bcdiv' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], -'bcmod' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], +'bcdiv' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], +'bcmod' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bcmul' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], 'bcompiler_load' => ['bool', 'filename'=>'string'], 'bcompiler_load_exe' => ['bool', 'filename'=>'string'], @@ -535,7 +535,7 @@ return [ 'bcompiler_write_header' => ['bool', 'filehandle'=>'resource', 'write_ver='=>'string'], 'bcompiler_write_included_filename' => ['bool', 'filehandle'=>'resource', 'filename'=>'string'], 'bcpow' => ['string', 'num'=>'string', 'exponent'=>'string', 'scale='=>'int'], -'bcpowmod' => ['?string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], +'bcpowmod' => ['string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], 'bcscale' => ['int', 'scale='=>'int'], 'bcsqrt' => ['string', 'num'=>'string', 'scale='=>'int'], 'bcsub' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], @@ -1105,7 +1105,7 @@ return [ 'collator_get_error_message' => ['string', 'object'=>'collator'], 'collator_get_locale' => ['string', 'object'=>'collator', 'type'=>'int'], 'collator_get_sort_key' => ['string', 'object'=>'collator', 'string'=>'string'], -'collator_get_strength' => ['int|false', 'object'=>'collator'], +'collator_get_strength' => ['int', 'object'=>'collator'], 'collator_set_attribute' => ['bool', 'object'=>'collator', 'attribute'=>'int', 'value'=>'int'], 'collator_set_strength' => ['bool', 'object'=>'collator', 'strength'=>'int'], 'collator_sort' => ['bool', 'object'=>'collator', '&rw_array'=>'array', 'flags='=>'int'], @@ -1123,7 +1123,7 @@ return [ 'com_event_sink' => ['bool', 'variant'=>'variant', 'sink_object'=>'object', 'sink_interface='=>'?array|?string'], 'com_get_active_object' => ['variant', 'prog_id'=>'string', 'codepage='=>'int'], 'com_isenum' => ['bool', 'com_module'=>'variant'], -'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'bool'], +'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'true'], 'com_message_pump' => ['bool', 'timeout_milliseconds='=>'int'], 'com_print_typeinfo' => ['bool', 'variant'=>'variant|string', 'dispatch_interface='=>'string', 'display_sink='=>'bool'], 'commonmark\cql::__invoke' => ['', 'root'=>'CommonMark\Node', 'handler'=>'callable'], @@ -1540,7 +1540,7 @@ return [ 'Couchbase\zlibCompress' => ['string', 'data'=>'string'], 'Couchbase\zlibDecompress' => ['string', 'data'=>'string'], 'count' => ['int', 'value'=>'Countable|array|SimpleXMLElement|ResourceBundle', 'mode='=>'int'], -'count_chars' => ['array|false|string', 'string'=>'string', 'mode='=>'int'], +'count_chars' => ['array|string', 'string'=>'string', 'mode='=>'int'], 'Countable::count' => ['int'], 'crack_check' => ['bool', 'dictionary'=>'', 'password'=>'string'], 'crack_closedict' => ['bool', 'dictionary='=>'resource'], @@ -1548,7 +1548,6 @@ return [ 'crack_opendict' => ['resource|false', 'dictionary'=>'string'], 'crash' => [''], 'crc32' => ['int', 'string'=>'string'], -'create_function' => ['string', 'args'=>'string', 'code'=>'string'], 'crypt' => ['string', 'string'=>'string', 'salt'=>'string'], 'Crypto\Base64::__construct' => ['void'], 'Crypto\Base64::decode' => ['string', 'data'=>'string'], @@ -1734,37 +1733,37 @@ return [ 'cubrid_set_query_timeout' => ['bool', 'req_identifier'=>'resource', 'timeout'=>'int'], 'cubrid_unbuffered_query' => ['resource', 'query'=>'string', 'conn_identifier='=>''], 'cubrid_version' => ['string'], -'curl_close' => ['void', 'handle'=>'resource'], -'curl_copy_handle' => ['resource', 'handle'=>'resource'], -'curl_errno' => ['int', 'handle'=>'resource'], -'curl_error' => ['string', 'handle'=>'resource'], -'curl_escape' => ['string|false', 'handle'=>'resource', 'string'=>'string'], -'curl_exec' => ['bool|string', 'handle'=>'resource'], +'curl_close' => ['void', 'handle'=>'CurlHandle'], +'curl_copy_handle' => ['CurlHandle', 'handle'=>'CurlHandle'], +'curl_errno' => ['int', 'handle'=>'CurlHandle'], +'curl_error' => ['string', 'handle'=>'CurlHandle'], +'curl_escape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], +'curl_exec' => ['bool|string', 'handle'=>'CurlHandle'], 'curl_file_create' => ['CURLFile', 'filename'=>'string', 'mime_type='=>'string', 'posted_filename='=>'string'], -'curl_getinfo' => ['mixed', 'handle'=>'resource', 'option='=>'int'], -'curl_init' => ['resource|false', 'url='=>'string'], -'curl_multi_add_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], -'curl_multi_close' => ['void', 'multi_handle'=>'resource'], -'curl_multi_errno' => ['int', 'multi_handle'=>'resource'], -'curl_multi_exec' => ['int', 'multi_handle'=>'resource', '&w_still_running'=>'int'], -'curl_multi_getcontent' => ['string', 'handle'=>'resource'], -'curl_multi_info_read' => ['array|false', 'multi_handle'=>'resource', '&w_queued_messages='=>'int'], -'curl_multi_init' => ['resource'], -'curl_multi_remove_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], -'curl_multi_select' => ['int', 'multi_handle'=>'resource', 'timeout='=>'float'], -'curl_multi_setopt' => ['bool', 'multi_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], +'curl_getinfo' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int'], +'curl_init' => ['CurlHandle|false', 'url='=>'string'], +'curl_multi_add_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], +'curl_multi_close' => ['void', 'multi_handle'=>'CurlMultiHandle'], +'curl_multi_errno' => ['int', 'multi_handle'=>'CurlMultiHandle'], +'curl_multi_exec' => ['int', 'multi_handle'=>'CurlMultiHandle', '&w_still_running'=>'int'], +'curl_multi_getcontent' => ['string', 'handle'=>'CurlHandle'], +'curl_multi_info_read' => ['array|false', 'multi_handle'=>'CurlMultiHandle', '&w_queued_messages='=>'int'], +'curl_multi_init' => ['CurlMultiHandle'], +'curl_multi_remove_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], +'curl_multi_select' => ['int', 'multi_handle'=>'CurlMultiHandle', 'timeout='=>'float'], +'curl_multi_setopt' => ['bool', 'multi_handle'=>'CurlMultiHandle', 'option'=>'int', 'value'=>'mixed'], 'curl_multi_strerror' => ['?string', 'error_code'=>'int'], -'curl_pause' => ['int', 'handle'=>'resource', 'flags'=>'int'], -'curl_reset' => ['void', 'handle'=>'resource'], -'curl_setopt' => ['bool', 'handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], -'curl_setopt_array' => ['bool', 'handle'=>'resource', 'options'=>'array'], -'curl_share_close' => ['void', 'share_handle'=>'resource'], -'curl_share_errno' => ['int', 'share_handle'=>'resource'], -'curl_share_init' => ['resource'], -'curl_share_setopt' => ['bool', 'share_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], +'curl_pause' => ['int', 'handle'=>'CurlHandle', 'flags'=>'int'], +'curl_reset' => ['void', 'handle'=>'CurlHandle'], +'curl_setopt' => ['bool', 'handle'=>'CurlHandle', 'option'=>'int', 'value'=>'mixed'], +'curl_setopt_array' => ['bool', 'handle'=>'CurlHandle', 'options'=>'array'], +'curl_share_close' => ['void', 'share_handle'=>'CurlShareHandle'], +'curl_share_errno' => ['int', 'share_handle'=>'CurlShareHandle'], +'curl_share_init' => ['CurlShareHandle'], +'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'=>'resource', 'string'=>'string'], +'curl_unescape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], 'curl_version' => ['array', 'version='=>'int'], 'CURLFile::__construct' => ['void', 'filename'=>'string', 'mime_type='=>'string', 'posted_filename='=>'string'], 'CURLFile::__wakeup' => ['void'], @@ -1781,33 +1780,33 @@ return [ 'cyrus_query' => ['array', 'connection'=>'resource', 'query'=>'string'], 'cyrus_unbind' => ['bool', 'connection'=>'resource', 'trigger_name'=>'string'], 'date' => ['string', 'format'=>'string', 'timestamp='=>'int'], -'date_add' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], +'date_add' => ['DateTime', '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_immutable' => ['DateTimeImmutable|false', 'datetime='=>'string', 'timezone='=>'?DateTimeZone'], 'date_create_immutable_from_format' => ['DateTimeImmutable', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'], -'date_date_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], +'date_date_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], 'date_default_timezone_get' => ['string'], 'date_default_timezone_set' => ['bool', 'timezoneId'=>'string'], -'date_diff' => ['DateInterval|false', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], -'date_format' => ['string|false', 'object'=>'DateTimeInterface', 'format'=>'string'], +'date_diff' => ['DateInterval', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], +'date_format' => ['string', 'object'=>'DateTimeInterface', 'format'=>'string'], 'date_get_last_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'], +'date_isodate_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], 'date_modify' => ['DateTime|false', 'object'=>'DateTime', 'modifier'=>'string'], 'date_offset_get' => ['int', 'object'=>'DateTimeInterface'], -'date_parse' => ['array|false', 'datetime'=>'string'], +'date_parse' => ['array', 'datetime'=>'string'], 'date_parse_from_format' => ['array', 'format'=>'string', 'datetime'=>'string'], -'date_sub' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], -'date_sun_info' => ['array|false', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], +'date_sub' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'], +'date_sun_info' => ['array', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], 'date_sunrise' => ['false|float|int|string', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'], 'date_sunset' => ['false|float|int|string', 'timestamp'=>'int', 'returnFormat='=>'int', 'latitude='=>'float', 'longitude='=>'float', 'zenith='=>'float', 'utcOffset='=>'float'], -'date_time_set' => ['DateTime|false', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], +'date_time_set' => ['DateTime', '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_timestamp_set' => ['DateTime', 'object'=>'DateTime', 'timestamp'=>'int'], 'date_timezone_get' => ['DateTimeZone|false', 'object'=>'DateTimeInterface'], -'date_timezone_set' => ['DateTime|false', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], +'date_timezone_set' => ['DateTime', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], 'datefmt_create' => ['IntlDateFormatter', 'locale'=>'string', 'dateType'=>'int', 'timeType'=>'int', 'timezone='=>'string|IntlTimeZone|DateTimeZone|null', 'calendar='=>'int|IntlCalendar|null', 'pattern='=>'string'], 'datefmt_format' => ['string', 'formatter'=>'IntlDateFormatter', 'datetime'=>'DateTime|IntlCalendar|array|int'], 'datefmt_format_object' => ['string', 'datetime'=>'DateTimeInterface|IntlCalendar', 'format='=>'array|int|null|string', 'locale='=>'string'], @@ -1841,6 +1840,7 @@ return [ 'DatePeriod::__wakeup' => ['void'], 'DatePeriod::getDateInterval' => ['DateInterval'], 'DatePeriod::getEndDate' => ['?DateTimeInterface'], +'DatePeriod::getRecurrences' => ['int'], 'DatePeriod::getStartDate' => ['DateTimeInterface'], 'DateTime::__construct' => ['void', 'datetime='=>'?string', 'timezone='=>'?DateTimeZone'], 'DateTime::__set_state' => ['static', 'array'=>'array'], @@ -1848,6 +1848,7 @@ return [ 'DateTime::add' => ['static', 'interval'=>'DateInterval'], 'DateTime::createFromFormat' => ['static|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'], 'DateTime::createFromImmutable' => ['static', 'object'=>'DateTimeImmutable'], +'DateTime::createFromInterface' => ['self', 'object'=>'DateTimeInterface'], 'DateTime::diff' => ['DateInterval', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], 'DateTime::format' => ['string', 'format'=>'string'], 'DateTime::getLastErrors' => ['array'], @@ -1866,6 +1867,7 @@ return [ 'DateTimeImmutable::__wakeup' => ['void'], 'DateTimeImmutable::add' => ['static', 'interval'=>'DateInterval'], 'DateTimeImmutable::createFromFormat' => ['static|false', 'format'=>'string', 'datetime'=>'string', 'timezone='=>'?DateTimeZone'], +'DateTimeImmutable::createFromInterface' => ['self', 'object'=>'DateTimeInterface'], 'DateTimeImmutable::createFromMutable' => ['static', 'object'=>'DateTime'], 'DateTimeImmutable::diff' => ['DateInterval', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], 'DateTimeImmutable::format' => ['string|false', 'format'=>'string'], @@ -2079,8 +2081,8 @@ return [ 'ddtrace_config_trace_enabled' => [''], 'ddtrace_init' => ['', 'dir'=>''], 'deaggregate' => ['', 'object'=>'object', 'class_name='=>'string'], -'debug_backtrace' => ['list', 'options='=>'int|bool', 'limit='=>'int'], -'debug_print_backtrace' => ['void', 'options='=>'int|bool', 'limit='=>'int'], +'debug_backtrace' => ['list', 'options='=>'int', 'limit='=>'int'], +'debug_print_backtrace' => ['void', 'options='=>'int', 'limit='=>'int'], 'debug_zval_dump' => ['void', '...value'=>'mixed'], 'debugger_connect' => [''], 'debugger_connector_pid' => [''], @@ -2095,8 +2097,8 @@ return [ '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_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], +'deflate_add' => ['string|false', 'context'=>'DeflateContext', 'data'=>'string', 'flush_mode='=>'int'], +'deflate_init' => ['DeflateContext|false', 'encoding'=>'int', 'options='=>'array'], 'deg2rad' => ['float', 'num'=>'float'], 'dgettext' => ['string', 'domain'=>'string', 'message'=>'string'], 'dio_close' => ['void', 'fd'=>'resource'], @@ -2168,7 +2170,7 @@ return [ 'dom_document_schema_validate' => ['bool', 'source'=>'string', 'flags'=>'int'], 'dom_document_schema_validate_file' => ['bool', 'filename'=>'string', 'flags'=>'int'], 'dom_document_xinclude' => ['int', 'options'=>'int'], -'dom_import_simplexml' => ['DOMElement|false|null', 'node'=>'SimpleXMLElement'], +'dom_import_simplexml' => ['DOMElement|null', 'node'=>'SimpleXMLElement'], 'dom_xpath_evaluate' => ['', 'expr'=>'string', 'context'=>'DOMNode', 'registernodens'=>'bool'], 'dom_xpath_query' => ['DOMNodeList', 'expr'=>'string', 'context'=>'DOMNode', 'registernodens'=>'bool'], 'dom_xpath_register_ns' => ['bool', 'prefix'=>'string', 'uri'=>'string'], @@ -2578,8 +2580,7 @@ return [ 'Ds\Vector::sum' => ['int|float'], 'Ds\Vector::toArray' => ['array'], 'Ds\Vector::unshift' => ['void', '...values='=>'mixed'], -'each' => ['array{0:int|string,key:int|string,1:mixed,value:mixed}', '&r_arr'=>'array'], -'easter_date' => ['int', 'year='=>'int', 'mode='=>'int'], +'easter_date' => ['int', 'year='=>'?int', 'mode='=>'int'], 'easter_days' => ['int', 'year='=>'int', 'mode='=>'int'], 'echo' => ['void', 'arg1'=>'string', '...args='=>'string'], 'eio_busy' => ['resource', 'delay'=>'int', 'pri='=>'int', 'callback='=>'callable', 'data='=>'mixed'], @@ -2647,27 +2648,27 @@ return [ 'EmptyIterator::next' => ['void'], 'EmptyIterator::rewind' => ['void'], 'EmptyIterator::valid' => ['bool'], -'enchant_broker_describe' => ['array', 'broker'=>'resource'], -'enchant_broker_dict_exists' => ['bool', 'broker'=>'resource', 'tag'=>'string'], -'enchant_broker_free' => ['bool', 'broker'=>'resource'], -'enchant_broker_free_dict' => ['bool', 'dictionary'=>'resource'], -'enchant_broker_get_dict_path' => ['string', 'broker'=>'resource', 'type'=>'int'], -'enchant_broker_get_error' => ['string|false', 'broker'=>'resource'], -'enchant_broker_init' => ['resource|false'], -'enchant_broker_list_dicts' => ['array', 'broker'=>'resource'], -'enchant_broker_request_dict' => ['resource|false', 'broker'=>'resource', 'tag'=>'string'], -'enchant_broker_request_pwl_dict' => ['resource|false', 'broker'=>'resource', 'filename'=>'string'], -'enchant_broker_set_dict_path' => ['bool', 'broker'=>'resource', 'type'=>'int', 'path'=>'string'], -'enchant_broker_set_ordering' => ['bool', 'broker'=>'resource', 'tag'=>'string', 'ordering'=>'string'], -'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_add_to_session' => ['void', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_describe' => ['array', 'dictionary'=>'resource'], -'enchant_dict_get_error' => ['string', 'dictionary'=>'resource'], -'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_quick_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string', '&w_suggestions='=>'array'], -'enchant_dict_store_replacement' => ['void', 'dictionary'=>'resource', 'misspelled'=>'string', 'correct'=>'string'], -'enchant_dict_suggest' => ['array', 'dictionary'=>'resource', 'word'=>'string'], +'enchant_broker_describe' => ['array', 'broker'=>'EnchantBroker'], +'enchant_broker_dict_exists' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string'], +'enchant_broker_free' => ['bool', 'broker'=>'EnchantBroker'], +'enchant_broker_free_dict' => ['bool', 'dictionary'=>'EnchantDictionary'], +'enchant_broker_get_dict_path' => ['string', 'broker'=>'EnchantBroker', 'type'=>'int'], +'enchant_broker_get_error' => ['string|false', 'broker'=>'EnchantBroker'], +'enchant_broker_init' => ['EnchantBroker|false'], +'enchant_broker_list_dicts' => ['array', 'broker'=>'EnchantBroker'], +'enchant_broker_request_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'tag'=>'string'], +'enchant_broker_request_pwl_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'filename'=>'string'], +'enchant_broker_set_dict_path' => ['bool', 'broker'=>'EnchantBroker', 'type'=>'int', 'path'=>'string'], +'enchant_broker_set_ordering' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string', 'ordering'=>'string'], +'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], +'enchant_dict_add_to_session' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], +'enchant_dict_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], +'enchant_dict_describe' => ['array', 'dictionary'=>'EnchantDictionary'], +'enchant_dict_get_error' => ['string', 'dictionary'=>'EnchantDictionary'], +'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], +'enchant_dict_quick_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string', '&w_suggestions='=>'array'], +'enchant_dict_store_replacement' => ['void', 'dictionary'=>'EnchantDictionary', 'misspelled'=>'string', 'correct'=>'string'], +'enchant_dict_suggest' => ['array', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], 'end' => ['mixed|false', '&r_array'=>'array|object'], 'Error::__clone' => ['void'], 'Error::__construct' => ['void', 'message='=>'string', 'code='=>'int', 'previous='=>'?Throwable|?Error'], @@ -3338,7 +3339,25 @@ return [ 'fdf_set_target_frame' => ['bool', 'fdf_document'=>'resource', 'frame_name'=>'string'], 'fdf_set_value' => ['bool', 'fdf_document'=>'resource', 'fieldname'=>'string', 'value'=>'mixed', 'isname='=>'int'], 'fdf_set_version' => ['bool', 'fdf_document'=>'resource', 'version'=>'string'], +'fdiv' => ['float', 'num1'=>'float', 'num2'=>'float'], 'feof' => ['bool', 'stream'=>'resource'], +'FFI::addr' => ['FFI\CData', '&ptr'=>'FFI\CData'], +'FFI::alignof' => ['int', '&ptr'=>'mixed'], +'FFI::arrayType' => ['FFI\CType', 'type'=>'string|FFI\CType', 'dimensions'=>'list'], +'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', '&ptr'=>''], +'FFI::cdef' => ['FFI', 'code='=>'string', 'lib='=>'?string'], +'FFI::free' => ['void', '&ptr'=>'FFI\CData'], +'FFI::isNull' => ['bool', '&ptr'=>'FFI\CData'], +'FFI::load' => ['FFI', 'filename'=>'string'], +'FFI::memcmp' => ['int', '&ptr1'=>'FFI\CData|string', '&ptr2'=>'FFI\CData|string', 'size'=>'int'], +'FFI::memcpy' => ['void', '&to'=>'FFI\CData', '&from'=>'string|FFI\CData', 'size'=>'int'], +'FFI::memset' => ['void', '&ptr'=>'FFI\CData', 'value'=>'int', 'size'=>'int'], +'FFI::new' => ['FFI\CData', 'type'=>'string|FFI\CType', 'owned='=>'bool', 'persistent='=>'bool'], +'FFI::scope' => ['FFI', 'name'=>'string'], +'FFI::sizeof' => ['int', '&ptr'=>'FFI\CData|FFI\CType'], +'FFI::string' => ['string', '&ptr'=>'FFI\CData', 'size='=>'int'], +'FFI::type' => ['FFI\CType', 'type'=>'string'], +'FFI::typeof' => ['FFI\CType', '&ptr'=>'FFI\CData'], 'fflush' => ['bool', 'stream'=>'resource'], 'ffmpeg_animated_gif::__construct' => ['void', 'output_file_path'=>'string', 'width'=>'int', 'height'=>'int', 'frame_rate'=>'int', 'loop_count='=>'int'], 'ffmpeg_animated_gif::addFrame' => ['', 'frame_to_add'=>'ffmpeg_frame'], @@ -3474,7 +3493,7 @@ return [ 'fopen' => ['resource|false', 'filename'=>'string', 'mode'=>'string', 'use_include_path='=>'bool', 'context='=>'resource'], 'forward_static_call' => ['mixed|false', 'callback'=>'callable', '...args='=>'mixed'], 'forward_static_call_array' => ['mixed|false', 'callback'=>'callable', 'args'=>'list'], -'fpassthru' => ['int|false', 'stream'=>'resource'], +'fpassthru' => ['int', 'stream'=>'resource'], 'fpm_get_status' => ['array|false'], 'fprintf' => ['int', 'stream'=>'resource', 'format'=>'string', '...values='=>'string|int|float|Stringable'], 'fputcsv' => ['int|false', 'stream'=>'resource', 'fields'=>'array', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], @@ -3783,6 +3802,7 @@ return [ 'get_class_methods' => ['list', 'object_or_class'=>'object|class-string'], 'get_class_vars' => ['array', 'class'=>'class-string'], 'get_current_user' => ['string'], +'get_debug_type' => ['string', 'value'=>'mixed'], 'get_declared_classes' => ['list'], 'get_declared_interfaces' => ['list'], 'get_declared_traits' => ['list'], @@ -3797,10 +3817,12 @@ return [ 'get_loaded_extensions' => ['list', 'zend_extensions='=>'bool'], 'get_magic_quotes_gpc' => ['false'], 'get_magic_quotes_runtime' => ['false'], +'get_mangled_object_vars' => ['array', 'object'=>'object'], 'get_meta_tags' => ['array', 'filename'=>'string', 'use_include_path='=>'bool'], 'get_object_vars' => ['array', 'object'=>'object'], 'get_parent_class' => ['class-string|false', 'object_or_class='=>'object|string'], 'get_required_files' => ['string[]'], +'get_resource_id' => ['int', 'resource'=>'resource'], 'get_resource_type' => ['string', 'resource'=>'resource'], 'get_resources' => ['array', 'type='=>'string'], 'getallheaders' => ['array'], @@ -4051,7 +4073,7 @@ return [ 'GmagickPixel::getcolorvalue' => ['float', 'color'=>'int'], 'GmagickPixel::setcolor' => ['GmagickPixel', 'color'=>'string'], 'GmagickPixel::setcolorvalue' => ['GmagickPixel', 'color'=>'int', 'value'=>'float'], -'gmdate' => ['string|false', 'format'=>'string', 'timestamp='=>'int'], +'gmdate' => ['string', 'format'=>'string', 'timestamp='=>'int'], 'gmmktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], 'GMP::__construct' => ['void'], 'GMP::__toString' => ['string'], @@ -4060,7 +4082,7 @@ return [ 'gmp_abs' => ['GMP', 'num'=>'GMP|string|int'], 'gmp_add' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_and' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], -'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], +'gmp_binomial' => ['GMP', 'n'=>'GMP|string|int', 'k'=>'int'], 'gmp_clrbit' => ['void', 'num'=>'GMP', 'index'=>'int'], 'gmp_cmp' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_com' => ['GMP', 'num'=>'GMP|string|int'], @@ -4069,12 +4091,12 @@ return [ 'gmp_div_qr' => ['array', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int', 'rounding_mode='=>'int'], 'gmp_div_r' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int', 'rounding_mode='=>'int'], 'gmp_divexact' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], -'gmp_export' => ['string|false', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], +'gmp_export' => ['string', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], 'gmp_fact' => ['GMP', 'num'=>'int'], 'gmp_gcd' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_gcdext' => ['array', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], 'gmp_hamdist' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], -'gmp_import' => ['GMP|false', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], +'gmp_import' => ['GMP', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], 'gmp_init' => ['GMP', 'num'=>'int|string', 'base='=>'int'], 'gmp_intval' => ['int', 'num'=>'GMP|string|int'], 'gmp_invert' => ['GMP|false', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], @@ -4093,10 +4115,9 @@ return [ 'gmp_pow' => ['GMP', 'num'=>'GMP|string|int', 'exponent'=>'int'], 'gmp_powm' => ['GMP', 'num'=>'GMP|string|int', 'exponent'=>'GMP|string|int', 'modulus'=>'GMP|string|int'], 'gmp_prob_prime' => ['int', 'num'=>'GMP|string|int', 'repetitions='=>'int'], -'gmp_random' => ['GMP', 'limiter='=>'int'], 'gmp_random_bits' => ['GMP', 'bits'=>'int'], 'gmp_random_range' => ['GMP', 'min'=>'GMP|string|int', 'max'=>'GMP|string|int'], -'gmp_random_seed' => ['void|false', 'seed'=>'GMP|string|int'], +'gmp_random_seed' => ['void', 'seed'=>'GMP|string|int'], 'gmp_root' => ['GMP', 'num'=>'GMP|string|int', 'nth'=>'int'], 'gmp_rootrem' => ['array', 'num'=>'GMP|string|int', 'nth'=>'int'], 'gmp_scan0' => ['int', 'num1'=>'GMP|string|int', 'start'=>'int'], @@ -4449,7 +4470,7 @@ return [ 'Grpc\ChannelCredentials::createComposite' => ['Grpc\ChannelCredentials', 'cred1'=>'Grpc\ChannelCredentials', 'cred2'=>'Grpc\CallCredentials'], 'Grpc\ChannelCredentials::createDefault' => ['Grpc\ChannelCredentials'], 'Grpc\ChannelCredentials::createInsecure' => ['null'], -'Grpc\ChannelCredentials::createSsl' => ['Grpc\ChannelCredentials', 'pem_root_certs'=>'string', 'pem_private_key='=>'string', 'pem_cert_chain='=>'string'], +'Grpc\ChannelCredentials::createSsl' => ['Grpc\ChannelCredentials', 'pem_root_certs='=>'string|null', 'pem_private_key='=>'string|null', 'pem_cert_chain='=>'string|null'], 'Grpc\ChannelCredentials::invalidateDefaultRootsPem' => [''], 'Grpc\ChannelCredentials::isDefaultRootsPemSet' => [''], 'Grpc\ChannelCredentials::setDefaultRootsPem' => ['', 'pem_roots'=>'string'], @@ -4517,10 +4538,9 @@ return [ 'gzfile' => ['list', 'filename'=>'string', 'use_include_path='=>'int'], 'gzgetc' => ['string|false', 'stream'=>'resource'], 'gzgets' => ['string|false', 'stream'=>'resource', 'length='=>'int'], -'gzgetss' => ['string|false', 'zp'=>'resource', 'length'=>'int', 'allowable_tags='=>'string'], 'gzinflate' => ['string|false', 'data'=>'string', 'max_length='=>'int'], 'gzopen' => ['resource|false', 'filename'=>'string', 'mode'=>'string', 'use_include_path='=>'int'], -'gzpassthru' => ['int|false', 'stream'=>'resource'], +'gzpassthru' => ['int', 'stream'=>'resource'], 'gzputs' => ['int', 'stream'=>'resource', 'data'=>'string', 'length='=>'int'], 'gzread' => ['string', 'stream'=>'resource', 'length'=>'int'], 'gzrewind' => ['bool', 'stream'=>'resource'], @@ -4698,7 +4718,7 @@ return [ 'hash_equals' => ['bool', 'known_string'=>'string', 'user_string'=>'string'], 'hash_file' => ['string', 'algo'=>'string', 'filename'=>'string', 'binary='=>'bool'], 'hash_final' => ['string', 'context'=>'HashContext', 'binary='=>'bool'], -'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], +'hash_hkdf' => ['string', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], 'hash_hmac' => ['string', 'algo'=>'string', 'data'=>'string', 'key'=>'string', 'binary='=>'bool'], 'hash_hmac_algos' => ['list'], 'hash_hmac_file' => ['string', 'algo'=>'string', 'data'=>'string', 'key'=>'string', 'binary='=>'bool'], @@ -5776,116 +5796,117 @@ return [ 'iis_start_service' => ['int', 'service_id'=>'string'], 'iis_stop_server' => ['int', 'server_instance'=>'int'], 'iis_stop_service' => ['int', 'service_id'=>'string'], -'image2wbmp' => ['bool', 'im'=>'resource', 'filename='=>'?string', 'threshold='=>'int'], 'image_type_to_extension' => ['string', 'image_type'=>'int', 'include_dot='=>'bool'], 'image_type_to_mime_type' => ['string', 'image_type'=>'int'], -'imageaffine' => ['resource|false', 'image'=>'resource', 'affine'=>'array', 'clip='=>'array'], +'imageaffine' => ['false|GdImage', 'image'=>'GdImage', 'affine'=>'array', 'clip='=>'array'], 'imageaffineconcat' => ['array|false', 'm1'=>'array', 'm2'=>'array'], 'imageaffinematrixconcat' => ['array{0:float,1:float,2:float,3:float,4:float,5:float}|false', 'matrix1'=>'array', 'matrix2'=>'array'], 'imageaffinematrixget' => ['array{0:float,1:float,2:float,3:float,4:float,5:float}|false', 'type'=>'int', 'options'=>'array|float'], -'imagealphablending' => ['bool', 'image'=>'resource', 'enable'=>'bool'], -'imageantialias' => ['bool', 'image'=>'resource', 'enable'=>'bool'], -'imagearc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], -'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], -'imagechar' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], -'imagecharup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], -'imagecolorallocate' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorallocatealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorat' => ['int|false', 'image'=>'resource', 'x'=>'int', 'y'=>'int'], -'imagecolorclosest' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorclosestalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorclosesthwb' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolordeallocate' => ['bool', 'image'=>'resource', 'color'=>'int'], -'imagecolorexact' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorexactalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolormatch' => ['bool', 'image1'=>'resource', 'image2'=>'resource'], -'imagecolorresolve' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorresolvealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorset' => ['void', 'image'=>'resource', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], -'imagecolorsforindex' => ['array|false', 'image'=>'resource', 'color'=>'int'], -'imagecolorstotal' => ['int|false', 'image'=>'resource'], -'imagecolortransparent' => ['int|false', 'image'=>'resource', 'color='=>'int'], -'imageconvolution' => ['bool', 'image'=>'resource', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], -'imagecopy' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecopymerge' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], -'imagecopymergegray' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], -'imagecopyresampled' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecopyresized' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecreate' => ['resource|false', 'width'=>'int', 'height'=>'int'], -'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'], -'imagecreatefromgd' => ['resource|false', 'filename'=>'string'], -'imagecreatefromgd2' => ['resource|false', 'filename'=>'string'], -'imagecreatefromgd2part' => ['resource|false', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], -'imagecreatefromgif' => ['resource|false', 'filename'=>'string'], -'imagecreatefromjpeg' => ['resource|false', 'filename'=>'string'], -'imagecreatefrompng' => ['resource|false', 'filename'=>'string'], -'imagecreatefromstring' => ['resource|false', 'data'=>'string'], -'imagecreatefromwbmp' => ['resource|false', 'filename'=>'string'], -'imagecreatefromwebp' => ['resource|false', 'filename'=>'string'], -'imagecreatefromxbm' => ['resource|false', 'filename'=>'string'], -'imagecreatefromxpm' => ['resource|false', 'filename'=>'string'], -'imagecreatetruecolor' => ['resource|false', 'width'=>'int', 'height'=>'int'], -'imagecrop' => ['resource|false', 'image'=>'resource', 'rectangle'=>'array'], -'imagecropauto' => ['resource|false', 'image'=>'resource', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], -'imagedashedline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imagedestroy' => ['bool', 'image'=>'resource'], -'imageellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], -'imagefill' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], -'imagefilledarc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], -'imagefilledellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], -'imagefilledpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imagefilledrectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imagefilltoborder' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], -'imagefilter' => ['bool', 'image'=>'resource', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], -'imageflip' => ['bool', 'image'=>'resource', 'mode'=>'int'], +'imagealphablending' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], +'imageantialias' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], +'imagearc' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], +'imagebmp' => ['bool', 'image'=>'GdImage', 'file='=>'null|resource|string', 'compressed='=>'bool'], +'imagechar' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], +'imagecharup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], +'imagecolorallocate' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], +'imagecolorallocatealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], +'imagecolorat' => ['int|false', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int'], +'imagecolorclosest' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], +'imagecolorclosestalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], +'imagecolorclosesthwb' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], +'imagecolordeallocate' => ['bool', 'image'=>'GdImage', 'color'=>'int'], +'imagecolorexact' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], +'imagecolorexactalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], +'imagecolormatch' => ['bool', 'image1'=>'GdImage', 'image2'=>'GdImage'], +'imagecolorresolve' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], +'imagecolorresolvealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], +'imagecolorset' => ['void', 'image'=>'GdImage', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], +'imagecolorsforindex' => ['array|false', 'image'=>'GdImage', 'color'=>'int'], +'imagecolorstotal' => ['int', 'image'=>'GdImage'], +'imagecolortransparent' => ['int|null', 'image'=>'GdImage', 'color='=>'int'], +'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'], +'imagecopymergegray' => ['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'], +'imagecopyresampled' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], +'imagecopyresized' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], +'imagecreate' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], +'imagecreatefrombmp' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromgd' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromgd2' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromgd2part' => ['false|GdImage', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], +'imagecreatefromgif' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromjpeg' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefrompng' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromstring' => ['false|GdImage', 'data'=>'string'], +'imagecreatefromtga' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromwbmp' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromwebp' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromxbm' => ['false|GdImage', 'filename'=>'string'], +'imagecreatefromxpm' => ['false|GdImage', 'filename'=>'string'], +'imagecreatetruecolor' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], +'imagecrop' => ['false|GdImage', 'image'=>'GdImage', 'rectangle'=>'array'], +'imagecropauto' => ['false|GdImage', 'image'=>'GdImage', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], +'imagedashedline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], +'imagedestroy' => ['bool', 'image'=>'GdImage'], +'imageellipse' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], +'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'], +'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'], +'imageflip' => ['bool', 'image'=>'GdImage', 'mode'=>'int'], 'imagefontheight' => ['int', 'font'=>'int'], 'imagefontwidth' => ['int', 'font'=>'int'], 'imageftbbox' => ['array|false', 'size'=>'float', 'angle'=>'float', 'font_filename'=>'string', 'string'=>'string', 'options='=>'array'], -'imagefttext' => ['array|false', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], -'imagegammacorrect' => ['bool', 'image'=>'resource', 'input_gamma'=>'float', 'output_gamma'=>'float'], -'imagegd' => ['bool', 'image'=>'resource', 'file='=>'?string'], -'imagegd2' => ['bool', 'image'=>'resource', 'file='=>'?string', 'chunk_size='=>'int', 'mode='=>'int'], -'imagegetclip' => ['array|false', 'image'=>'resource'], -'imagegif' => ['bool', 'image'=>'resource', 'file='=>'?string'], -'imagegrabscreen' => ['false|resource'], -'imagegrabwindow' => ['false|resource', 'handle'=>'int', 'client_area='=>'bool'], -'imageinterlace' => ['int|false', 'image'=>'resource', 'enable='=>'?bool'], -'imageistruecolor' => ['bool', 'image'=>'resource'], -'imagejpeg' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], -'imagelayereffect' => ['bool', 'image'=>'resource', 'effect'=>'int'], -'imageline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], +'imagefttext' => ['array|false', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], +'imagegammacorrect' => ['bool', 'image'=>'GdImage', 'input_gamma'=>'float', 'output_gamma'=>'float'], +'imagegd' => ['bool', 'image'=>'GdImage', 'file='=>'string'], +'imagegd2' => ['bool', 'image'=>'GdImage', 'file='=>'string', 'chunk_size='=>'int', 'mode='=>'int'], +'imagegetclip' => ['array', 'image'=>'GdImage'], +'imagegetinterpolation' => ['int', 'image'=>'GdImage'], +'imagegif' => ['bool', 'image'=>'GdImage', 'file='=>'?string'], +'imagegrabscreen' => ['false|GdImage'], +'imagegrabwindow' => ['false|GdImage', 'handle'=>'int', 'client_area='=>'bool'], +'imageinterlace' => ['int', 'image'=>'GdImage', 'enable='=>'?bool'], +'imageistruecolor' => ['bool', 'image'=>'GdImage'], +'imagejpeg' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'], +'imagelayereffect' => ['bool', 'image'=>'GdImage', 'effect'=>'int'], +'imageline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], 'imageloadfont' => ['int|false', 'filename'=>'string'], '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'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imagepalettecopy' => ['void', 'dst'=>'resource', 'src'=>'resource'], -'imagepalettetotruecolor' => ['bool', 'image'=>'resource'], -'imagepng' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], -'imagepolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imagerectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imageresolution' => ['array|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], -'imagerotate' => ['resource|false', 'image'=>'resource', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], -'imagesavealpha' => ['bool', 'image'=>'resource', 'enable'=>'bool'], -'imagescale' => ['resource|false', 'image'=>'resource', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], -'imagesetbrush' => ['bool', 'image'=>'resource', 'brush'=>'resource'], -'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], -'imagesetinterpolation' => ['bool', 'image'=>'resource', 'method='=>'int'], -'imagesetpixel' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], -'imagesetstyle' => ['bool', 'image'=>'resource', 'style'=>'non-empty-array'], -'imagesetthickness' => ['bool', 'image'=>'resource', 'thickness'=>'int'], -'imagesettile' => ['bool', 'image'=>'resource', 'tile'=>'resource'], -'imagestring' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], -'imagestringup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], -'imagesx' => ['int|false', 'image'=>'resource'], -'imagesy' => ['int|false', 'image'=>'resource'], -'imagetruecolortopalette' => ['bool', 'image'=>'resource', 'dither'=>'bool', 'num_colors'=>'int'], +'imageopenpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], +'imagepalettecopy' => ['void', 'dst'=>'GdImage', 'src'=>'GdImage'], +'imagepalettetotruecolor' => ['bool', 'image'=>'GdImage'], +'imagepng' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], +'imagepolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', '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='=>'bool'], +'imagesavealpha' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], +'imagescale' => ['false|GdImage', 'image'=>'GdImage', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], +'imagesetbrush' => ['bool', 'image'=>'GdImage', 'brush'=>'GdImage'], +'imagesetclip' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'], +'imagesetinterpolation' => ['bool', 'image'=>'GdImage', 'method='=>'int'], +'imagesetpixel' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'], +'imagesetstyle' => ['bool', 'image'=>'GdImage', 'style'=>'non-empty-array'], +'imagesetthickness' => ['bool', 'image'=>'GdImage', 'thickness'=>'int'], +'imagesettile' => ['bool', 'image'=>'GdImage', 'tile'=>'GdImage'], +'imagestring' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], +'imagestringup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], +'imagesx' => ['int', 'image'=>'GdImage'], +'imagesy' => ['int', 'image'=>'GdImage'], +'imagetruecolortopalette' => ['bool', 'image'=>'GdImage', 'dither'=>'bool', 'num_colors'=>'int'], 'imagettfbbox' => ['false|array', 'size'=>'float', 'angle'=>'float', 'font_filename'=>'string', 'string'=>'string', 'options='=>'array'], -'imagettftext' => ['false|array', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], +'imagettftext' => ['false|array', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], 'imagetypes' => ['int'], -'imagewbmp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'foreground_color='=>'int'], -'imagewebp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], -'imagexbm' => ['bool', 'image'=>'resource', 'filename'=>'?string', 'foreground_color='=>'int'], +'imagewbmp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'foreground_color='=>'int'], +'imagewebp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'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'], @@ -6485,7 +6506,7 @@ return [ 'imap_mail_compose' => ['string|false', 'envelope'=>'array', 'bodies'=>'array'], 'imap_mail_copy' => ['bool', 'imap'=>'resource', 'message_nums'=>'string', 'mailbox'=>'string', 'flags='=>'int'], 'imap_mail_move' => ['bool', 'imap'=>'resource', 'message_nums'=>'string', 'mailbox'=>'string', 'flags='=>'int'], -'imap_mailboxmsginfo' => ['stdClass|false', 'imap'=>'resource'], +'imap_mailboxmsginfo' => ['stdClass', 'imap'=>'resource'], 'imap_mime_header_decode' => ['array|false', 'string'=>'string'], 'imap_msgno' => ['int|false', 'imap'=>'resource', 'message_uid'=>'int'], 'imap_mutf7_to_utf8' => ['string|false', 'string'=>'string'], @@ -6533,10 +6554,10 @@ return [ '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', 'context'=>'InflateContext'], +'inflate_get_status' => ['int', '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'], @@ -7028,7 +7049,6 @@ return [ 'jobqueue_license_info' => ['array'], 'join' => ['string', 'separator'=>'string', 'array'=>'array'], 'join\'1' => ['string', 'separator'=>'array'], -'jpeg2wbmp' => ['bool', 'jpegname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], 'json_decode' => ['mixed', 'json'=>'string', 'associative='=>'bool', 'depth='=>'int', 'flags='=>'int'], 'json_encode' => ['string|false', 'value'=>'mixed', 'flags='=>'int', 'depth='=>'int'], 'json_last_error' => ['int'], @@ -7208,7 +7228,7 @@ return [ 'ldap_connect' => ['resource|false', 'uri='=>'string', 'port='=>'int', 'wallet='=>'string', 'password='=>'string', 'auth_mode='=>'int'], 'ldap_control_paged_result' => ['bool', 'link_identifier'=>'resource', 'pagesize'=>'int', 'iscritical='=>'bool', 'cookie='=>'string'], 'ldap_control_paged_result_response' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', '&w_cookie'=>'string', '&w_estimated'=>'int'], -'ldap_count_entries' => ['int|false', 'ldap'=>'resource', 'result'=>'resource'], +'ldap_count_entries' => ['int', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_delete' => ['bool', 'ldap'=>'resource', 'dn'=>'string'], 'ldap_delete_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'controls='=>'array'], 'ldap_dn2ufn' => ['string', 'dn'=>'string'], @@ -7224,8 +7244,8 @@ return [ 'ldap_first_attribute' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_first_entry' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_first_reference' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'], -'ldap_free_result' => ['bool', 'ldap'=>'resource'], -'ldap_get_attributes' => ['array|false', 'ldap'=>'resource', 'entry'=>'resource'], +'ldap_free_result' => ['bool', 'result'=>'resource'], +'ldap_get_attributes' => ['array', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_get_dn' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_get_entries' => ['array|false', 'ldap'=>'resource', 'result'=>'resource'], 'ldap_get_option' => ['bool', 'ldap'=>'resource', 'option'=>'int', '&w_value='=>'array|int|string'], @@ -7241,7 +7261,7 @@ return [ 'ldap_modify' => ['bool', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array'], 'ldap_modify_batch' => ['bool', 'ldap'=>'resource', 'dn'=>'string', 'modifications_info'=>'array'], 'ldap_next_attribute' => ['string|false', 'ldap'=>'resource', 'entry'=>'resource'], -'ldap_next_entry' => ['resource|false', 'ldap'=>'resource', 'result'=>'resource'], +'ldap_next_entry' => ['resource|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_next_reference' => ['resource|false', 'ldap'=>'resource', 'entry'=>'resource'], 'ldap_parse_exop' => ['bool', 'ldap'=>'resource', 'result'=>'resource', '&w_response_data='=>'string', '&w_response_oid='=>'string'], 'ldap_parse_reference' => ['bool', 'ldap'=>'resource', 'entry'=>'resource', '&referrals'=>'array'], @@ -7253,7 +7273,6 @@ return [ 'ldap_search' => ['resource|false', 'ldap'=>'resource|resource[]', 'base'=>'string', 'filter'=>'string', 'attributes='=>'array', 'attributes_only='=>'int', 'sizelimit='=>'int', 'timelimit='=>'int', 'deref='=>'int'], 'ldap_set_option' => ['bool', 'ldap'=>'resource', 'option'=>'int', 'value'=>'array|bool|int|string'], 'ldap_set_rebind_proc' => ['bool', 'ldap'=>'resource', 'callback'=>'?callable'], -'ldap_sort' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', 'sortfilter'=>'string'], 'ldap_start_tls' => ['bool', 'ldap'=>'resource'], 'ldap_t61_to_8859' => ['string', 'value'=>'string'], 'ldap_unbind' => ['bool', 'ldap'=>'resource'], @@ -7719,18 +7738,18 @@ return [ 'MaxMind\Db\Reader\Metadata::__construct' => ['void', 'metadata'=>'array'], 'mb_check_encoding' => ['bool', 'value='=>'string', 'encoding='=>'string'], 'mb_chr' => ['string|false', 'codepoint'=>'int', 'encoding='=>'string'], -'mb_convert_case' => ['string|false', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], +'mb_convert_case' => ['string', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], 'mb_convert_encoding' => ['string|false', 'string'=>'string', 'to_encoding'=>'string', 'from_encoding='=>'string|string[]'], -'mb_convert_kana' => ['string|false', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], +'mb_convert_kana' => ['string', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], 'mb_convert_variables' => ['string|false', 'to_encoding'=>'string', 'from_encoding'=>'array|string', '&rw_var'=>'string|array|object', '&...rw_vars='=>'string|array|object'], 'mb_decode_mimeheader' => ['string', 'string'=>'string'], -'mb_decode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'is_hex='=>'bool'], +'mb_decode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string'], 'mb_detect_encoding' => ['string|false', 'string'=>'string', 'encodings='=>'?string[]|?string', 'strict='=>'bool'], 'mb_detect_order' => ['bool|list', 'encoding='=>'?string[]|?string'], -'mb_encode_mimeheader' => ['string|false', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], -'mb_encode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], -'mb_encoding_aliases' => ['list|false', 'encoding'=>'string'], -'mb_ereg' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], +'mb_encode_mimeheader' => ['string', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], +'mb_encode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], +'mb_encoding_aliases' => ['list', 'encoding'=>'string'], +'mb_ereg' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], 'mb_ereg_match' => ['bool', 'pattern'=>'string', 'string'=>'string', 'options='=>'string'], 'mb_ereg_replace' => ['string|false', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string', 'options='=>'string'], 'mb_ereg_replace_callback' => ['string|false', 'pattern'=>'string', 'callback'=>'callable', 'string'=>'string', 'options='=>'string'], @@ -7741,7 +7760,7 @@ return [ 'mb_ereg_search_pos' => ['array|false', 'pattern='=>'string', 'options='=>'string'], 'mb_ereg_search_regs' => ['array|false', 'pattern='=>'string', 'options='=>'string'], 'mb_ereg_search_setpos' => ['bool', 'offset'=>'int'], -'mb_eregi' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], +'mb_eregi' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], 'mb_eregi_replace' => ['string|false', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string', 'options='=>'string'], 'mb_get_info' => ['array[]|false|int|int[]|string|string[]', 'type='=>'string'], 'mb_http_input' => ['string|false', 'type='=>'string'], @@ -7755,26 +7774,26 @@ return [ 'mb_preferred_mime_name' => ['string|false', 'encoding'=>'string'], 'mb_regex_encoding' => ['string|bool', 'encoding='=>'string'], 'mb_regex_set_options' => ['string', 'options='=>'string'], -'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'], +'mb_scrub' => ['string', 'string'=>'string', 'encoding='=>'string'], 'mb_send_mail' => ['bool', 'to'=>'string', 'subject'=>'string', 'message'=>'string', 'additional_headers='=>'string', 'additional_params='=>'string'], 'mb_split' => ['list', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], -'mb_strcut' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], -'mb_strimwidth' => ['string|false', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], +'mb_strcut' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], +'mb_strimwidth' => ['string', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], 'mb_stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], -'mb_strlen' => ['int|false', 'string'=>'string', 'encoding='=>'string'], +'mb_strlen' => ['int', 'string'=>'string', 'encoding='=>'string'], 'mb_strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], 'mb_strrichr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], 'mb_strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'encoding='=>'string'], 'mb_strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool', 'encoding='=>'string'], -'mb_strtolower' => ['string|false', 'string'=>'string', 'encoding='=>'string'], -'mb_strtoupper' => ['string|false', 'string'=>'string', 'encoding='=>'string'], -'mb_strwidth' => ['int|false', 'string'=>'string', 'encoding='=>'string'], +'mb_strtolower' => ['string', 'string'=>'string', 'encoding='=>'string'], +'mb_strtoupper' => ['string', 'string'=>'string', 'encoding='=>'string'], +'mb_strwidth' => ['int', 'string'=>'string', 'encoding='=>'string'], 'mb_substitute_character' => ['bool|int|string', 'substitute_character='=>'?int|?string'], -'mb_substr' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], -'mb_substr_count' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], +'mb_substr' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], +'mb_substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], 'mcrypt_cbc' => ['string', 'cipher'=>'string|int', 'key'=>'string', 'data'=>'string', 'mode'=>'int', 'iv='=>'string'], 'mcrypt_cfb' => ['string', 'cipher'=>'string|int', 'key'=>'string', 'data'=>'string', 'mode'=>'int', 'iv='=>'string'], 'mcrypt_create_iv' => ['string|false', 'size'=>'int', 'source='=>'int'], @@ -8690,13 +8709,12 @@ return [ 'msession_timeout' => ['int', 'session'=>'string', 'param='=>'int'], 'msession_uniq' => ['string', 'param'=>'int', 'classname='=>'string', 'data='=>'string'], 'msession_unlock' => ['int', 'session'=>'string', 'key'=>'int'], -'msg_get_queue' => ['resource', 'key'=>'int', 'permissions='=>'int'], +'msg_get_queue' => ['SysvMessageQueue', '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'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], -'msg_set_queue' => ['bool', 'queue'=>'resource', 'data'=>'array'], -'msg_stat_queue' => ['array', 'queue'=>'resource'], +'msg_remove_queue' => ['bool', 'queue'=>'SysvMessageQueue'], +'msg_send' => ['bool', 'queue'=>'SysvMessageQueue', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', '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'], @@ -8950,7 +8968,7 @@ return [ 'mysqli::next_result' => ['bool'], 'mysqli::options' => ['bool', 'option'=>'int', 'value'=>'mixed'], 'mysqli::ping' => ['bool'], -'mysqli::poll' => ['int|false', '&w_read'=>'array', '&w_write'=>'array', '&w_error'=>'array', 'seconds'=>'int', 'microseconds='=>'int'], +'mysqli::poll' => ['int|false', '&w_read'=>'array', '&w_error'=>'array', '&w_reject'=>'array', 'seconds'=>'int', 'microseconds='=>'int'], 'mysqli::prepare' => ['mysqli_stmt|false', 'query'=>'string'], 'mysqli::query' => ['bool|mysqli_result', 'query'=>'string', 'result_mode='=>'int'], 'mysqli::real_connect' => ['bool', 'hostname='=>'?string', 'username='=>'string', 'password='=>'?string', 'database='=>'string', 'port='=>'int', 'socket='=>'string', 'flags='=>'int'], @@ -9009,7 +9027,7 @@ return [ 'mysqli_fetch_assoc' => ['array|null', 'result'=>'mysqli_result'], 'mysqli_fetch_field' => ['object|false', 'result'=>'mysqli_result'], 'mysqli_fetch_field_direct' => ['object|false', 'result'=>'mysqli_result', 'index'=>'int'], -'mysqli_fetch_fields' => ['?array', 'result'=>'mysqli_result'], +'mysqli_fetch_fields' => ['array', 'result'=>'mysqli_result'], 'mysqli_fetch_lengths' => ['array|false', 'result'=>'mysqli_result'], 'mysqli_fetch_object' => ['?object', 'result'=>'mysqli_result', 'class='=>'string', 'constructor_args='=>'array'], 'mysqli_fetch_row' => ['?array', 'result'=>'mysqli_result'], @@ -9020,9 +9038,9 @@ return [ 'mysqli_get_cache_stats' => ['array|false'], 'mysqli_get_charset' => ['object', 'mysql'=>'mysqli'], 'mysqli_get_client_info' => ['string', 'mysql='=>'mysqli'], -'mysqli_get_client_stats' => ['array|false'], +'mysqli_get_client_stats' => ['array'], 'mysqli_get_client_version' => ['int', 'link'=>'mysqli'], -'mysqli_get_connection_stats' => ['array|false', 'mysql'=>'mysqli'], +'mysqli_get_connection_stats' => ['array', 'mysql'=>'mysqli'], 'mysqli_get_host_info' => ['string', 'mysql'=>'mysqli'], 'mysqli_get_links_stats' => ['array'], 'mysqli_get_metadata' => ['mysqli_result|false', 'stmt'=>'mysqli_stmt'], @@ -9044,7 +9062,7 @@ return [ 'mysqli_options' => ['bool', 'mysql'=>'mysqli', 'option'=>'int', 'value'=>'int|string'], 'mysqli_param_count' => ['int', 'stmt'=>'mysqli_stmt'], 'mysqli_ping' => ['bool', 'mysql'=>'mysqli'], -'mysqli_poll' => ['int|false', '&read'=>'array', '&write'=>'array', '&error'=>'array', 'seconds'=>'int', 'microseconds='=>'int'], +'mysqli_poll' => ['int|false', '&read'=>'array', '&error'=>'array', '&reject'=>'array', 'seconds'=>'int', 'microseconds='=>'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', 'username='=>'string', 'password='=>'?string', 'database='=>'string', 'port='=>'int', 'socket='=>'string', 'flags='=>'int'], @@ -9107,7 +9125,7 @@ return [ 'mysqli_stmt::stmt' => [''], 'mysqli_stmt::store_result' => ['bool'], 'mysqli_stmt_affected_rows' => ['int|string', 'statement'=>'mysqli_stmt'], -'mysqli_stmt_attr_get' => ['int|false', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], +'mysqli_stmt_attr_get' => ['int', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], 'mysqli_stmt_attr_set' => ['bool', 'statement'=>'mysqli_stmt', 'attribute'=>'int', 'value'=>'int'], 'mysqli_stmt_bind_param' => ['bool', 'statement'=>'mysqli_stmt', 'types'=>'string', '&vars'=>'mixed', '&...args='=>'mixed'], 'mysqli_stmt_bind_result' => ['bool', 'statement'=>'mysqli_stmt', '&vars='=>'mixed', '&...args='=>'mixed'], @@ -9580,7 +9598,7 @@ return [ 'NumberFormatter::setPattern' => ['bool', 'pattern'=>'string'], 'NumberFormatter::setSymbol' => ['bool', 'symbol'=>'int', 'value'=>'string'], 'NumberFormatter::setTextAttribute' => ['bool', 'attribute'=>'int', 'value'=>'string'], -'numfmt_create' => ['NumberFormatter|false', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], +'numfmt_create' => ['NumberFormatter|null', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], 'numfmt_format' => ['string|false', 'formatter'=>'NumberFormatter', 'num'=>'int|float', 'type='=>'int'], 'numfmt_format_currency' => ['string|false', 'formatter'=>'NumberFormatter', 'amount'=>'float', 'currency'=>'string'], 'numfmt_get_attribute' => ['int|false', 'formatter'=>'NumberFormatter', 'attribute'=>'int'], @@ -9655,7 +9673,7 @@ return [ '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' => ['list'], 'ob_start' => ['bool', 'callback='=>'?callable', 'chunk_size='=>'int', 'flags='=>'int'], @@ -9665,28 +9683,20 @@ return [ 'oci_cancel' => ['bool', 'statement'=>'resource'], 'oci_client_version' => ['string'], 'oci_close' => ['bool', 'connection'=>'resource'], -'OCICollection::append' => ['bool', 'value'=>'string'], -'OCICollection::assign' => ['bool', 'from'=>'OCICollection'], -'OCICollection::assignElem' => ['bool', 'index'=>'int', 'value'=>'string'], -'OCICollection::free' => ['bool'], -'OCICollection::getElem' => ['false|float|null|string', 'index'=>'int'], -'OCICollection::max' => ['int|false'], -'OCICollection::size' => ['int|false'], -'OCICollection::trim' => ['bool', 'num'=>'int'], -'oci_collection_append' => ['bool', 'collection'=>'resource', 'value'=>'string'], -'oci_collection_assign' => ['bool', 'to'=>'resource', 'from'=>'object'], -'oci_collection_element_assign' => ['bool', 'collection'=>'resource', 'index'=>'int', 'value'=>'string'], -'oci_collection_element_get' => ['string', 'collection'=>'resource', 'index'=>'int'], -'oci_collection_max' => ['int', 'collection'=>'resource'], -'oci_collection_size' => ['int', 'collection'=>'resource'], -'oci_collection_trim' => ['bool', 'collection'=>'resource', 'num'=>'int'], +'oci_collection_append' => ['bool', 'collection'=>'OCICollection', 'value'=>'string'], +'oci_collection_assign' => ['bool', 'to'=>'OCICollection', 'from'=>'OCICollection'], +'oci_collection_element_assign' => ['bool', 'collection'=>'OCICollection', 'index'=>'int', 'value'=>'string'], +'oci_collection_element_get' => ['string', 'collection'=>'OCICollection', 'index'=>'int'], +'oci_collection_max' => ['int', 'collection'=>'OCICollection'], +'oci_collection_size' => ['int', 'collection'=>'OCICollection'], +'oci_collection_trim' => ['bool', 'collection'=>'OCICollection', 'num'=>'int'], 'oci_commit' => ['bool', 'connection'=>'resource'], 'oci_connect' => ['resource|false', 'username'=>'string', 'password'=>'string', 'connection_string='=>'string', 'encoding='=>'string', 'session_mode='=>'int'], 'oci_define_by_name' => ['bool', 'statement'=>'resource', 'column'=>'string', '&w_var'=>'mixed', 'type='=>'int'], 'oci_error' => ['array|false', 'connection_or_statement='=>'resource'], 'oci_execute' => ['bool', 'statement'=>'resource', 'mode='=>'int'], 'oci_fetch' => ['bool', 'statement'=>'resource'], -'oci_fetch_all' => ['int|false', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], +'oci_fetch_all' => ['int', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], 'oci_fetch_array' => ['array|false', 'statement'=>'resource', 'mode='=>'int'], 'oci_fetch_assoc' => ['array|false', 'statement'=>'resource'], 'oci_fetch_object' => ['stdClass|false|null', 'statement'=>'resource', 'mode='=>'int'], @@ -9698,35 +9708,13 @@ return [ 'oci_field_size' => ['int|false', 'statement'=>'resource', 'column'=>'int|string'], 'oci_field_type' => ['false|int|string', 'statement'=>'resource', 'column'=>'int|string'], 'oci_field_type_raw' => ['int|false', 'statement'=>'resource', 'column'=>'int|string'], -'oci_free_collection' => ['bool', 'collection'=>'resource'], +'oci_free_collection' => ['bool', 'collection'=>'OCICollection'], 'oci_free_cursor' => ['bool', 'statement'=>'resource'], -'oci_free_descriptor' => ['bool', 'lob'=>'resource'], +'oci_free_descriptor' => ['bool', 'lob'=>'OCILob'], 'oci_free_statement' => ['bool', 'statement'=>'resource'], 'oci_get_implicit' => ['bool', 'stmt'=>''], 'oci_get_implicit_resultset' => ['resource|false', 'statement'=>'resource'], 'oci_internal_debug' => ['void', 'onoff'=>'bool'], -'OCILob::append' => ['bool', 'from'=>'OCILob'], -'OCILob::close' => ['bool'], -'OCILob::eof' => ['bool'], -'OCILob::erase' => ['int|false', 'offset='=>'int', 'length='=>'int'], -'OCILob::export' => ['bool', 'filename'=>'string', 'offset='=>'int', 'length='=>'int'], -'OCILob::flush' => ['bool', 'flag='=>'int'], -'OCILob::free' => ['bool'], -'OCILob::getbuffering' => ['bool'], -'OCILob::import' => ['bool', 'filename'=>'string'], -'OCILob::load' => ['string|false'], -'OCILob::read' => ['string|false', 'length'=>'int'], -'OCILob::rewind' => ['bool'], -'OCILob::save' => ['bool', 'data'=>'string', 'offset='=>'int'], -'OCILob::savefile' => ['bool', 'filename'=>''], -'OCILob::seek' => ['bool', 'offset'=>'int', 'whence='=>'int'], -'OCILob::setbuffering' => ['bool', 'mode'=>'bool'], -'OCILob::size' => ['int|false'], -'OCILob::tell' => ['int|false'], -'OCILob::truncate' => ['bool', 'length='=>'int'], -'OCILob::write' => ['int|false', 'data'=>'string', 'length='=>'int'], -'OCILob::writeTemporary' => ['bool', 'data'=>'string', 'type='=>'int'], -'OCILob::writetofile' => ['bool', 'filename'=>'', 'offset='=>'', 'length='=>''], 'oci_lob_append' => ['bool', 'to'=>'OCILob', 'from'=>'OCILob'], 'oci_lob_close' => ['bool', 'lob'=>'OCILob'], 'oci_lob_copy' => ['bool', 'to'=>'OCILob', 'from'=>'OCILob', 'length='=>'int'], @@ -9749,7 +9737,7 @@ return [ 'oci_new_collection' => ['OCICollection|false', 'connection'=>'resource', 'type_name'=>'string', 'schema='=>'string'], 'oci_new_connect' => ['resource|false', 'username'=>'string', 'password'=>'string', 'connection_string='=>'string', 'encoding='=>'string', 'session_mode='=>'int'], 'oci_new_cursor' => ['resource|false', 'connection'=>'resource'], -'oci_new_descriptor' => ['OCILob|false', 'connection'=>'resource', 'type='=>'int'], +'oci_new_descriptor' => ['?OCILob', 'connection'=>'resource', 'type='=>'int'], 'oci_num_fields' => ['int', 'statement'=>'resource'], 'oci_num_rows' => ['int|false', 'statement'=>'resource'], 'oci_parse' => ['resource|false', 'connection'=>'resource', 'sql'=>'string'], @@ -9769,8 +9757,38 @@ return [ 'oci_set_prefetch' => ['bool', 'statement'=>'resource', 'rows'=>'int'], 'oci_statement_type' => ['string|false', 'statement'=>'resource'], 'oci_unregister_taf_callback' => ['bool', 'connection'=>'resource'], +'OCICollection::append' => ['bool', 'value'=>'string'], +'OCICollection::assign' => ['bool', 'from'=>'OCICollection'], +'OCICollection::assignElem' => ['bool', 'index'=>'int', 'value'=>'string'], +'OCICollection::free' => ['bool'], +'OCICollection::getElem' => ['false|float|null|string', 'index'=>'int'], +'OCICollection::max' => ['int|false'], +'OCICollection::size' => ['int|false'], +'OCICollection::trim' => ['bool', 'num'=>'int'], 'ocifetchinto' => ['int|bool', 'statement'=>'resource', '&w_result'=>'array', 'mode='=>'int'], 'ocigetbufferinglob' => ['bool', 'lob'=>'OCILob'], +'OCILob::append' => ['bool', 'from'=>'OCILob'], +'OCILob::close' => ['bool'], +'OCILob::eof' => ['bool'], +'OCILob::erase' => ['int|false', 'offset='=>'int', 'length='=>'int'], +'OCILob::export' => ['bool', 'filename'=>'string', 'offset='=>'int', 'length='=>'int'], +'OCILob::flush' => ['bool', 'flag='=>'int'], +'OCILob::free' => ['bool'], +'OCILob::getbuffering' => ['bool'], +'OCILob::import' => ['bool', 'filename'=>'string'], +'OCILob::load' => ['string|false'], +'OCILob::read' => ['string|false', 'length'=>'int'], +'OCILob::rewind' => ['bool'], +'OCILob::save' => ['bool', 'data'=>'string', 'offset='=>'int'], +'OCILob::savefile' => ['bool', 'filename'=>''], +'OCILob::seek' => ['bool', 'offset'=>'int', 'whence='=>'int'], +'OCILob::setbuffering' => ['bool', 'mode'=>'bool'], +'OCILob::size' => ['int|false'], +'OCILob::tell' => ['int|false'], +'OCILob::truncate' => ['bool', 'length='=>'int'], +'OCILob::write' => ['int|false', 'data'=>'string', 'length='=>'int'], +'OCILob::writeTemporary' => ['bool', 'data'=>'string', 'type='=>'int'], +'OCILob::writetofile' => ['bool', 'filename'=>'', 'offset='=>'', 'length='=>''], 'ocisetbufferinglob' => ['bool', 'lob'=>'OCILob', 'mode'=>'bool'], 'octdec' => ['int|float', 'octal_string'=>'string'], 'odbc_autocommit' => ['bool|int', 'odbc'=>'resource', 'enable='=>'bool'], @@ -9850,62 +9868,63 @@ return [ 'opendir' => ['resource|false', 'directory'=>'string', 'context='=>'resource'], 'openlog' => ['bool', 'prefix'=>'string', 'flags'=>'int', 'facility'=>'int'], 'openssl_cipher_iv_length' => ['int|false', 'cipher_algo'=>'string'], -'openssl_csr_export' => ['bool', 'csr'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], -'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], -'openssl_csr_get_public_key' => ['resource|false', 'csr'=>'string|resource', 'short_names='=>'bool'], -'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|resource', 'short_names='=>'bool'], -'openssl_csr_new' => ['resource|false', 'distinguished_names'=>'array', '&w_private_key'=>'resource', 'options='=>'array', 'extra_attributes='=>'array'], -'openssl_csr_sign' => ['resource|false', 'csr'=>'string|resource', 'ca_certificate'=>'string|resource|null', 'private_key'=>'string|resource|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], +'openssl_csr_export' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', '&w_output'=>'OpenSSLAsymmetricKey', 'no_text='=>'bool'], +'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'output_filename'=>'string', 'no_text='=>'bool'], +'openssl_csr_get_public_key' => ['OpenSSLAsymmetricKey|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], +'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], +'openssl_csr_new' => ['OpenSSLCertificateSigningRequest|false', 'distinguished_names'=>'array', '&w_private_key'=>'OpenSSLAsymmetricKey', 'options='=>'array', 'extra_attributes='=>'array'], +'openssl_csr_sign' => ['OpenSSLCertificate|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'ca_certificate'=>'string|OpenSSLCertificate|null', 'private_key'=>'string|OpenSSLAsymmetricKey|OpenSSLCertificate|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], 'openssl_decrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', 'tag='=>'string', 'aad='=>'string'], -'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'resource'], +'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey'], 'openssl_digest' => ['string|false', 'data'=>'string', 'digest_algo'=>'string', 'binary='=>'bool'], 'openssl_encrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', '&w_tag='=>'string', 'aad='=>'string', 'tag_length='=>'int'], 'openssl_error_string' => ['string|false'], -'openssl_free_key' => ['void', 'key'=>'resource'], +'openssl_free_key' => ['void', 'key'=>'OpenSSLAsymmetricKey'], 'openssl_get_cert_locations' => ['array'], 'openssl_get_cipher_methods' => ['array', 'aliases='=>'bool'], 'openssl_get_curve_names' => ['list'], 'openssl_get_md_methods' => ['array', 'aliases='=>'bool'], -'openssl_get_privatekey' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], -'openssl_get_publickey' => ['resource|false', 'public_key'=>'resource|string'], -'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'string|array|resource', 'cipher_algo'=>'string', 'iv='=>'string'], +'openssl_get_privatekey' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], +'openssl_get_publickey' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], +'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'cipher_algo'=>'string', 'iv='=>'string'], 'openssl_pbkdf2' => ['string|false', 'password'=>'string', 'salt'=>'string', 'key_length'=>'int', 'iterations'=>'int', 'digest_algo='=>'string'], -'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], -'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], +'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], +'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], 'openssl_pkcs12_read' => ['bool', 'pkcs12'=>'string', '&w_certificates'=>'array', 'passphrase'=>'string'], -'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key='=>'string|resource|array'], -'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], -'openssl_pkcs7_read' => ['bool', 'input_filename'=>'string', '&w_certificates'=>'array'], -'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], +'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key='=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|null|string'], +'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], +'openssl_pkcs7_read' => ['bool', 'data'=>'string', '&w_certificates'=>'array'], +'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], 'openssl_pkcs7_verify' => ['bool|int', 'input_filename'=>'string', 'flags'=>'int', 'signers_certificates_filename='=>'string', 'ca_info='=>'array', 'untrusted_certificates_filename='=>'string', 'content='=>'string', 'output_filename='=>'string'], -'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], -'openssl_pkey_export' => ['bool', 'key'=>'resource', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], -'openssl_pkey_export_to_file' => ['bool', 'key'=>'resource|string|array', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], -'openssl_pkey_free' => ['void', 'key'=>'resource'], -'openssl_pkey_get_details' => ['array|false', 'key'=>'resource'], -'openssl_pkey_get_private' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], -'openssl_pkey_get_public' => ['resource|false', 'public_key'=>'resource|string'], -'openssl_pkey_new' => ['resource|false', 'options='=>'array'], -'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], -'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], -'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], -'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], -'openssl_random_pseudo_bytes' => ['string|false', 'length'=>'int', '&w_strong_result='=>'bool'], +'openssl_pkey_derive' => ['string|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'key_length='=>'int'], +'openssl_pkey_export' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], +'openssl_pkey_export_to_file' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], +'openssl_pkey_free' => ['void', 'key'=>'OpenSSLAsymmetricKey'], +'openssl_pkey_get_details' => ['array|false', 'key'=>'OpenSSLAsymmetricKey'], +'openssl_pkey_get_private' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], +'openssl_pkey_get_public' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|string'], +'openssl_pkey_new' => ['OpenSSLAsymmetricKey|false', 'options='=>'array'], +'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], +'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], +'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], +'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], +'openssl_random_pseudo_bytes' => ['string', 'length'=>'int', '&w_strong_result='=>'bool'], 'openssl_seal' => ['int|false', 'data'=>'string', '&w_sealed_data'=>'string', '&rw_encrypted_keys'=>'array', 'public_key'=>'array', 'cipher_algo'=>'string', '&iv='=>'string'], -'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'resource|string', 'algorithm='=>'int|string'], -'openssl_spki_export' => ['?string', 'spki'=>'string'], -'openssl_spki_export_challenge' => ['?string', 'spki'=>'string'], -'openssl_spki_new' => ['?string', 'private_key'=>'resource', 'challenge'=>'string', 'digest_algo='=>'int'], +'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], +'openssl_spki_export' => ['false|string', 'spki'=>'string'], +'openssl_spki_export_challenge' => ['false|string', 'spki'=>'string'], +'openssl_spki_new' => ['false|string', 'private_key'=>'OpenSSLAsymmetricKey', 'challenge'=>'string', 'digest_algo='=>'int'], 'openssl_spki_verify' => ['bool', 'spki'=>'string'], -'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'resource|string', 'algorithm='=>'int|string'], -'openssl_x509_check_private_key' => ['bool', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array'], -'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|resource', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], -'openssl_x509_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], -'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], -'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|resource', 'digest_algo='=>'string', 'binary='=>'bool'], -'openssl_x509_free' => ['void', 'certificate'=>'resource'], -'openssl_x509_parse' => ['array|false', 'certificate'=>'string|resource', 'short_names='=>'bool'], -'openssl_x509_read' => ['resource|false', 'certificate'=>'string|resource'], +'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], +'openssl_x509_check_private_key' => ['bool', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], +'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|OpenSSLCertificate', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], +'openssl_x509_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'no_text='=>'bool'], +'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'no_text='=>'bool'], +'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|OpenSSLCertificate', 'digest_algo='=>'string', 'binary='=>'bool'], +'openssl_x509_free' => ['void', 'certificate'=>'OpenSSLCertificate'], +'openssl_x509_parse' => ['array|false', 'certificate'=>'string|OpenSSLCertificate', 'short_names='=>'bool'], +'openssl_x509_read' => ['OpenSSLCertificate|false', 'certificate'=>'string|OpenSSLCertificate'], +'openssl_x509_verify' => ['int', 'certificate'=>'OpenSSLCertificate|string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], 'ord' => ['int', 'character'=>'string'], 'OuterIterator::current' => ['mixed'], 'OuterIterator::getInnerIterator' => ['Iterator'], @@ -10087,10 +10106,11 @@ return [ 'parsekit_compile_string' => ['array', 'phpcode'=>'string', 'errors='=>'array', 'options='=>'int'], 'parsekit_func_arginfo' => ['array', 'function'=>'mixed'], 'passthru' => ['void', 'command'=>'string', '&w_result_code='=>'int'], +'password_algos' => ['list'], 'password_get_info' => ['array', 'hash'=>'string'], -'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'int', 'options='=>'array'], +'password_hash' => ['string', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], 'password_make_salt' => ['bool', 'password'=>'string', 'hash'=>'string'], -'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'int', 'options='=>'array'], +'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], 'password_verify' => ['bool', 'password'=>'string', 'hash'=>'string'], 'pathinfo' => ['array|string', 'path'=>'string', 'flags='=>'int'], 'pclose' => ['int', 'handle'=>'resource'], @@ -10110,6 +10130,7 @@ return [ 'pcntl_sigtimedwait' => ['int', 'signals'=>'array', '&w_info='=>'array', 'seconds='=>'int', 'nanoseconds='=>'int'], 'pcntl_sigwaitinfo' => ['int', 'signals'=>'array', '&w_info='=>'array'], 'pcntl_strerror' => ['string', 'error_code'=>'int'], +'pcntl_unshare' => ['bool', 'flags'=>'int'], 'pcntl_wait' => ['int', '&w_status'=>'int', 'flags='=>'int', '&w_resource_usage='=>'array'], 'pcntl_waitpid' => ['int', 'process_id'=>'int', '&w_status'=>'int', 'flags='=>'int', '&w_resource_usage='=>'array'], 'pcntl_wexitstatus' => ['int', 'status'=>'int'], @@ -10497,7 +10518,7 @@ return [ 'PDOStatement::fetch' => ['mixed', 'mode='=>'int', 'cursorOrientation='=>'int', 'cursorOffset='=>'int'], 'PDOStatement::fetchAll' => ['array|false', 'mode='=>'int', 'args='=>'int|string|callable', 'ctor_args='=>'?array'], 'PDOStatement::fetchColumn' => ['string|null|false', 'column='=>'int'], -'PDOStatement::fetchObject' => ['mixed|false', 'class='=>'string', 'ctorArgs='=>'?array'], +'PDOStatement::fetchObject' => ['mixed|false', 'class='=>'string', 'constructorArgs='=>'?array'], 'PDOStatement::getAttribute' => ['mixed', 'name'=>'int'], 'PDOStatement::getColumnMeta' => ['array|false', 'column'=>'int'], 'PDOStatement::nextRowset' => ['bool'], @@ -10534,8 +10555,8 @@ return [ 'pg_escape_string\'1' => ['string', 'connection'=>'string'], 'pg_execute' => ['resource|false', 'connection'=>'resource', 'statement_name'=>'string', 'params'=>'array'], 'pg_execute\'1' => ['resource|false', 'connection'=>'string', 'statement_name'=>'array'], -'pg_fetch_all' => ['array|false', 'result'=>'resource', 'mode='=>'int'], -'pg_fetch_all_columns' => ['array|false', 'result'=>'resource', 'field='=>'int'], +'pg_fetch_all' => ['array', 'result'=>'resource', 'mode='=>'int'], +'pg_fetch_all_columns' => ['array', 'result'=>'resource', 'field='=>'int'], 'pg_fetch_array' => ['string[]|null[]|false', 'result'=>'resource', 'row='=>'?int', 'mode='=>'int'], 'pg_fetch_assoc' => ['array|false', 'result'=>'resource', 'row='=>'?int'], 'pg_fetch_object' => ['object', 'result'=>'resource', 'row='=>'?int', 'class='=>'int'], @@ -10555,7 +10576,7 @@ return [ 'pg_field_type_oid' => ['int', 'result'=>'resource', 'field'=>'int'], 'pg_flush' => ['bool|int', 'connection'=>'resource'], 'pg_free_result' => ['bool', 'result'=>'resource'], -'pg_get_notify' => ['array|false', 'result'=>'resource', 'mode='=>'int'], +'pg_get_notify' => ['array|false', 'connection'=>'resource', 'mode='=>'int'], 'pg_get_pid' => ['int', 'connection'=>'resource'], 'pg_get_result' => ['resource|false', 'connection'=>'resource'], 'pg_host' => ['string', 'connection='=>'resource'], @@ -10698,7 +10719,7 @@ return [ 'PharData::setDefaultStub' => ['bool', 'index='=>'string', 'webIndex='=>'string'], 'phardata::setMetadata' => ['void', 'metadata'=>'mixed'], 'phardata::setSignatureAlgorithm' => ['void', 'algo'=>'int'], -'PharData::setStub' => ['bool', 'newstub'=>'string', 'maxlen='=>'int'], +'PharData::setStub' => ['bool', 'stub'=>'string', 'length='=>'int'], 'PharFileInfo::__construct' => ['void', 'filename'=>'string'], 'PharFileInfo::chmod' => ['void', 'perms'=>'int'], 'PharFileInfo::compress' => ['bool', 'compression'=>'int'], @@ -10755,6 +10776,10 @@ return [ 'phpdbg_prompt' => ['void', 'string'=>'string'], 'phpdbg_start_oplog' => ['void'], 'phpinfo' => ['bool', 'flags='=>'int'], +'PhpToken::getTokenName' => ['string'], +'PhpToken::is' => ['bool', 'kind'=>'string|int|string[]|int[]'], +'PhpToken::isIgnorable' => ['bool'], +'PhpToken::tokenize' => ['list', 'code'=>'string', 'flags='=>'int'], 'phpversion' => ['string|false', 'extension='=>'string'], 'pht\AtomicInteger::__construct' => ['void', 'value='=>'int'], 'pht\AtomicInteger::dec' => ['void'], @@ -10794,7 +10819,6 @@ return [ 'pht\Vector::unshift' => ['void', 'value'=>'mixed'], 'pht\Vector::updateAt' => ['void', 'value'=>'mixed', 'offset'=>'int'], 'pi' => ['float'], -'png2wbmp' => ['bool', 'pngname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], 'pointObj::__construct' => ['void'], 'pointObj::distanceToLine' => ['float', 'p1'=>'pointObj', 'p2'=>'pointObj'], 'pointObj::distanceToPoint' => ['float', 'poPoint'=>'pointObj'], @@ -10859,8 +10883,8 @@ return [ 'preg_match_all' => ['int|false', 'pattern'=>'string', 'subject'=>'string', '&w_matches='=>'array', 'flags='=>'int', 'offset='=>'int'], 'preg_quote' => ['string', 'str'=>'string', 'delimiter='=>'string'], 'preg_replace' => ['string|string[]', 'pattern'=>'string|array', 'replacement'=>'string|array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], -'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], -'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], +'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], +'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], 'preg_split' => ['list', 'pattern'=>'string', 'subject'=>'string', 'limit='=>'int', 'flags='=>'int'], 'prev' => ['mixed', '&r_array'=>'array|object'], 'print' => ['int', 'arg'=>'string'], @@ -10868,9 +10892,9 @@ return [ 'print_r\'1' => ['true', 'value'=>'mixed', 'return='=>'bool'], 'printf' => ['int', 'format'=>'string', '...values='=>'string|int|float|Stringable'], 'proc_close' => ['int', 'process'=>'resource'], -'proc_get_status' => ['array|false', 'process'=>'resource'], +'proc_get_status' => ['array', 'process'=>'resource'], 'proc_nice' => ['bool', 'priority'=>'int'], -'proc_open' => ['resource|false', 'command'=>'string', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], +'proc_open' => ['resource|false', 'command'=>'string|string[]', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], 'proc_terminate' => ['bool', 'process'=>'resource', 'signal='=>'int'], 'projectionObj::__construct' => ['void', 'projectionString'=>'string'], 'projectionObj::getUnits' => ['int'], @@ -11395,7 +11419,6 @@ return [ 'RdKafka\TopicPartition::setPartition' => ['void', 'partition'=>'string'], 'RdKafka\TopicPartition::setTopic' => ['void', 'topic_name'=>'string'], 'rdp_simplify' => ['', 'pointsArray'=>'', 'epsilon'=>''], -'read_exif_data' => ['array', 'filename'=>'string', 'sections_needed='=>'string', 'sub_arrays='=>'bool', 'read_thumbnail='=>'bool'], 'readdir' => ['string|false', 'dir_handle='=>'resource'], 'readfile' => ['int|false', 'filename'=>'string', 'use_include_path='=>'bool', 'context='=>'resource'], 'readgzfile' => ['int|false', 'filename'=>'string', 'use_include_path='=>'int'], @@ -12091,6 +12114,7 @@ return [ 'ReflectionClass::__construct' => ['void', 'objectOrClass'=>'object|class-string'], 'ReflectionClass::__toString' => ['string'], 'ReflectionClass::export' => ['?string', 'argument'=>'string|object', 'return='=>'bool'], +'ReflectionClass::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], 'ReflectionClass::getConstant' => ['mixed', 'name'=>'string'], 'ReflectionClass::getConstants' => ['array'], 'ReflectionClass::getConstructor' => ['?ReflectionMethod'], @@ -12144,6 +12168,7 @@ return [ 'ReflectionClassConstant::__construct' => ['void', 'class'=>'mixed', 'constant'=>'string'], 'ReflectionClassConstant::__toString' => ['string'], 'ReflectionClassConstant::export' => ['string', 'class'=>'mixed', 'name'=>'string', 'return='=>'bool'], +'ReflectionClassConstant::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], 'ReflectionClassConstant::getDeclaringClass' => ['ReflectionClass'], 'ReflectionClassConstant::getDocComment' => ['string|false'], 'ReflectionClassConstant::getModifiers' => ['int'], @@ -12202,6 +12227,7 @@ return [ 'ReflectionFunctionAbstract::__clone' => ['void'], 'ReflectionFunctionAbstract::__toString' => ['string'], 'ReflectionFunctionAbstract::export' => ['?string'], +'ReflectionFunctionAbstract::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], 'ReflectionFunctionAbstract::getClosureScopeClass' => ['ReflectionClass'], 'ReflectionFunctionAbstract::getClosureThis' => ['object'], 'ReflectionFunctionAbstract::getDocComment' => ['string|false'], @@ -12343,6 +12369,7 @@ return [ 'ReflectionParameter::allowsNull' => ['bool'], 'ReflectionParameter::canBePassedByValue' => ['bool'], 'ReflectionParameter::export' => ['?string', 'function'=>'string', 'parameter'=>'string', 'return='=>'bool'], +'ReflectionParameter::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], 'ReflectionParameter::getClass' => ['?ReflectionClass'], 'ReflectionParameter::getDeclaringClass' => ['?ReflectionClass'], 'ReflectionParameter::getDeclaringFunction' => ['ReflectionFunctionAbstract'], @@ -12363,6 +12390,7 @@ return [ 'ReflectionProperty::__construct' => ['void', 'class'=>'', 'property'=>'string'], 'ReflectionProperty::__toString' => ['string'], 'ReflectionProperty::export' => ['?string', 'class'=>'mixed', 'name'=>'string', 'return='=>'bool'], +'ReflectionProperty::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], 'ReflectionProperty::getDeclaringClass' => ['ReflectionClass'], 'ReflectionProperty::getDocComment' => ['string|false'], 'ReflectionProperty::getModifiers' => ['int'], @@ -12376,11 +12404,13 @@ return [ 'ReflectionProperty::setAccessible' => ['void', 'accessible'=>'bool'], 'ReflectionProperty::setValue' => ['void', 'objectOrValue'=>'object', 'value'=>''], 'ReflectionProperty::setValue\'1' => ['void', 'value'=>''], +'ReflectionReference::fromArrayElement' => ['?ReflectionReference', 'array'=>'array', 'key'=>'int|string'], +'ReflectionReference::getId' => ['string'], 'ReflectionType::__clone' => ['void'], 'ReflectionType::__toString' => ['string'], 'ReflectionType::allowsNull' => ['bool'], 'ReflectionType::getName' => ['string'], -'ReflectionType::isBuiltin' => ['bool'], +'ReflectionUnionType::getTypes' => ['list'], 'ReflectionZendExtension::__clone' => ['void'], 'ReflectionZendExtension::__construct' => ['void', 'name'=>'string'], 'ReflectionZendExtension::__toString' => ['string'], @@ -12547,6 +12577,7 @@ return [ 'sapi_windows_cp_get' => ['int', 'kind='=>'string'], 'sapi_windows_cp_is_utf8' => ['bool'], 'sapi_windows_cp_set' => ['bool', 'codepage'=>'int'], +'sapi_windows_set_ctrl_handler' => ['bool', 'handler'=>'callable(int):void', 'add='=>'bool'], 'sapi_windows_vt100_support' => ['bool', 'stream'=>'resource', 'enable='=>'bool'], 'SapiRequest::__construct' => ['void', 'globals'=>'array', 'content='=>'?string'], 'SapiResponse::addHeader' => ['\SapiResponseInterface', 'label'=>'string', 'value'=>'string'], @@ -12849,10 +12880,10 @@ return [ 'SeekableIterator::rewind' => ['void'], 'SeekableIterator::seek' => ['void', 'offset'=>'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='=>'bool'], -'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', 'data'=>'string'], @@ -12992,24 +13023,24 @@ return [ 'shapeObj::union' => ['shapeObj', 'shape'=>'shapeObj'], 'shapeObj::within' => ['int', 'shape2'=>'shapeObj'], 'shell_exec' => ['?string', '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'], -'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'], +'shm_attach' => ['SysvSharedMemory', 'key'=>'int', 'size='=>'int', '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' => ['Shmop', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], +'shmop_read' => ['string', 'shmop'=>'Shmop', 'offset'=>'int', 'size'=>'int'], +'shmop_size' => ['int', 'shmop'=>'Shmop'], +'shmop_write' => ['int', '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'], 'similar_text' => ['int', 'string1'=>'string', 'string2'=>'string', '&w_percent='=>'float'], -'simplexml_import_dom' => ['SimpleXMLElement|false', 'node'=>'DOMNode', 'class_name='=>'string'], +'simplexml_import_dom' => ['SimpleXMLElement', 'node'=>'DOMNode', 'class_name='=>'string'], 'simplexml_load_file' => ['SimpleXMLElement|false', 'filename'=>'string', 'class_name='=>'string', 'options='=>'int', 'namespace_or_prefix='=>'string', 'is_prefix='=>'bool'], 'simplexml_load_string' => ['SimpleXMLElement|false', 'data'=>'string', 'class_name='=>'string', 'options='=>'int', 'namespace_or_prefix='=>'string', 'is_prefix='=>'bool'], 'SimpleXMLElement::__construct' => ['void', 'data'=>'string', 'options='=>'int', 'dataIsURL='=>'bool', 'namespaceOrPrefix='=>'string', 'isPrefix='=>'bool'], @@ -13055,7 +13086,7 @@ return [ 'sin' => ['float', 'num'=>'float'], 'sinh' => ['float', 'num'=>'float'], 'sizeof' => ['int', 'value'=>'Countable|array', 'mode='=>'int'], -'sleep' => ['int|false', 'seconds'=>'int'], +'sleep' => ['int', 'seconds'=>'int'], 'snmp2_get' => ['string|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'], 'snmp2_getnext' => ['string|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'], 'snmp2_real_walk' => ['array|false', 'hostname'=>'string', 'community'=>'string', 'object_id'=>'string', 'timeout='=>'int', 'retries='=>'int'], @@ -13132,47 +13163,47 @@ return [ 'SoapServer::SoapServer' => ['object', 'wsdl'=>'?string', 'options='=>'array'], 'SoapVar::__construct' => ['void', 'data'=>'mixed', 'encoding'=>'int', 'typeName='=>'string', 'typeNamespace='=>'string', 'nodeName='=>'string', 'nodeNamespace='=>'string'], 'SoapVar::SoapVar' => ['object', 'data'=>'mixed', 'encoding'=>'int', 'type_name='=>'string', 'type_namespace='=>'string', 'node_name='=>'string', 'node_namespace='=>'string'], -'socket_accept' => ['resource|false', 'socket'=>'resource'], -'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'], -'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'], -'socket_addrinfo_explain' => ['array', 'address'=>'resource'], -'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], -'socket_bind' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], -'socket_clear_error' => ['void', 'socket='=>'resource'], -'socket_close' => ['void', 'socket'=>'resource'], +'socket_accept' => ['Socket|false', 'socket'=>'Socket'], +'socket_addrinfo_bind' => ['Socket|false', 'address'=>'AddressInfo'], +'socket_addrinfo_connect' => ['Socket|false', 'address'=>'AddressInfo'], +'socket_addrinfo_explain' => ['array', 'address'=>'AddressInfo'], +'socket_addrinfo_lookup' => ['AddressInfo[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], +'socket_bind' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], +'socket_clear_error' => ['void', 'socket='=>'Socket'], +'socket_close' => ['void', 'socket'=>'Socket'], 'socket_cmsg_space' => ['int', 'level'=>'int', 'type'=>'int', 'num='=>'int'], -'socket_connect' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], -'socket_create' => ['resource|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], -'socket_create_listen' => ['resource|false', 'port'=>'int', 'backlog='=>'int'], -'socket_create_pair' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'resource[]'], -'socket_export_stream' => ['resource|false', 'socket'=>'resource'], -'socket_get_option' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], -'socket_get_status' => ['array', 'stream'=>'resource'], -'socket_getopt' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], -'socket_getpeername' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], -'socket_getsockname' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], -'socket_import_stream' => ['resource|false|null', 'stream'=>'resource'], -'socket_last_error' => ['int', 'socket='=>'resource'], -'socket_listen' => ['bool', 'socket'=>'resource', 'backlog='=>'int'], -'socket_read' => ['string|false', 'socket'=>'resource', 'length'=>'int', 'mode='=>'int'], -'socket_recv' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], -'socket_recvfrom' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], -'socket_recvmsg' => ['int|false', 'socket'=>'resource', '&w_message'=>'array', 'flags='=>'int'], -'socket_select' => ['int|false', '&rw_read'=>'resource[]|null', '&rw_write'=>'resource[]|null', '&rw_except'=>'resource[]|null', 'seconds'=>'int', 'microseconds='=>'int'], -'socket_send' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int'], -'socket_sendmsg' => ['int|false', 'socket'=>'resource', 'message'=>'array', 'flags='=>'int'], -'socket_sendto' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'], -'socket_set_block' => ['bool', 'socket'=>'resource'], -'socket_set_blocking' => ['bool', 'stream'=>'resource', 'enable'=>'bool'], -'socket_set_nonblock' => ['bool', 'socket'=>'resource'], -'socket_set_option' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], +'socket_connect' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], +'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_pair'=>'Socket[]'], +'socket_export_stream' => ['resource|false', 'socket'=>'Socket'], +'socket_get_option' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], +'socket_get_status' => ['array', 'stream'=>'Socket'], +'socket_getopt' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], +'socket_getpeername' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], +'socket_getsockname' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], +'socket_import_stream' => ['Socket|false', 'stream'=>'resource'], +'socket_last_error' => ['int', 'socket='=>'Socket'], +'socket_listen' => ['bool', 'socket'=>'Socket', 'backlog='=>'int'], +'socket_read' => ['string|false', 'socket'=>'Socket', 'length'=>'int', 'mode='=>'int'], +'socket_recv' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], +'socket_recvfrom' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], +'socket_recvmsg' => ['int|false', 'socket'=>'Socket', '&w_message'=>'array', 'flags='=>'int'], +'socket_select' => ['int|false', '&rw_read'=>'Socket[]|null', '&rw_write'=>'Socket[]|null', '&rw_except'=>'Socket[]|null', 'seconds'=>'int', 'microseconds='=>'int'], +'socket_send' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'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'], +'socket_set_block' => ['bool', 'socket'=>'Socket'], +'socket_set_blocking' => ['bool', 'stream'=>'Socket', 'enable'=>'bool'], +'socket_set_nonblock' => ['bool', 'socket'=>'Socket'], +'socket_set_option' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], 'socket_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], -'socket_setopt' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], -'socket_shutdown' => ['bool', 'socket'=>'resource', 'mode='=>'int'], +'socket_setopt' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], +'socket_shutdown' => ['bool', 'socket'=>'Socket', 'mode='=>'int'], 'socket_strerror' => ['string', 'error_code'=>'int'], -'socket_write' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length='=>'int'], -'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], -'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'], +'socket_write' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length='=>'int'], +'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'Socket', 'process_id'=>'int'], +'socket_wsaprotocol_info_import' => ['Socket|false', 'info_id'=>'string'], 'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], 'Sodium\add' => ['void', '&left'=>'string', 'right'=>'string'], 'Sodium\bin2hex' => ['string', 'binary'=>'string'], @@ -13261,7 +13292,7 @@ return [ 'sodium_crypto_box_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], 'sodium_crypto_box_publickey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_box_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], -'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'key_pair'=>'string'], +'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'public_key'=>'string'], 'sodium_crypto_box_seal_open' => ['string|false', 'ciphertext'=>'string', 'key_pair'=>'string'], 'sodium_crypto_box_secretkey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_box_seed_keypair' => ['string', 'seed'=>'string'], @@ -13305,7 +13336,7 @@ return [ 'sodium_crypto_sign_ed25519_sk_to_curve25519' => ['string', 'secret_key'=>'string'], 'sodium_crypto_sign_keypair' => ['string'], 'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], -'sodium_crypto_sign_open' => ['string|false', 'ciphertext'=>'string', 'public_key'=>'string'], +'sodium_crypto_sign_open' => ['string|false', 'signed_message'=>'string', 'public_key'=>'string'], 'sodium_crypto_sign_publickey' => ['string', 'key_pair'=>'string'], 'sodium_crypto_sign_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], 'sodium_crypto_sign_secretkey' => ['string', 'key_pair'=>'string'], @@ -13320,7 +13351,7 @@ return [ 'sodium_library_version_minor' => ['int'], 'sodium_memcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'sodium_memzero' => ['void', '&string'=>'string'], -'sodium_pad' => ['string', 'string'=>'string', 'length'=>'int'], +'sodium_pad' => ['string', 'string'=>'string', 'block_size'=>'int'], 'sodium_randombytes_buf' => ['string', 'length'=>'int'], 'sodium_randombytes_random16' => ['int|string'], 'sodium_randombytes_uniform' => ['int', 'upperBoundNonInclusive'=>'int'], @@ -14063,7 +14094,7 @@ return [ 'spl_object_hash' => ['string', 'object'=>'object'], 'spl_object_id' => ['int', 'object'=>'object'], 'SplDoublyLinkedList::__construct' => ['void'], -'SplDoublyLinkedList::add' => ['void', 'index'=>'mixed', 'value'=>'mixed'], +'SplDoublyLinkedList::add' => ['void', 'index'=>'int', 'value'=>'mixed'], 'SplDoublyLinkedList::bottom' => ['mixed'], 'SplDoublyLinkedList::count' => ['int'], 'SplDoublyLinkedList::current' => ['mixed'], @@ -14071,16 +14102,16 @@ return [ 'SplDoublyLinkedList::isEmpty' => ['bool'], 'SplDoublyLinkedList::key' => ['mixed'], 'SplDoublyLinkedList::next' => ['void'], -'SplDoublyLinkedList::offsetExists' => ['bool', 'index'=>'mixed'], -'SplDoublyLinkedList::offsetGet' => ['mixed', 'index'=>'mixed'], -'SplDoublyLinkedList::offsetSet' => ['void', 'index'=>'mixed', 'value'=>'mixed'], -'SplDoublyLinkedList::offsetUnset' => ['void', 'index'=>'mixed'], +'SplDoublyLinkedList::offsetExists' => ['bool', 'index'=>'int'], +'SplDoublyLinkedList::offsetGet' => ['mixed', 'index'=>'int'], +'SplDoublyLinkedList::offsetSet' => ['void', 'index'=>'int', 'value'=>'mixed'], +'SplDoublyLinkedList::offsetUnset' => ['void', 'index'=>'int'], 'SplDoublyLinkedList::pop' => ['mixed'], 'SplDoublyLinkedList::prev' => ['void'], 'SplDoublyLinkedList::push' => ['void', 'value'=>'mixed'], 'SplDoublyLinkedList::rewind' => ['void'], 'SplDoublyLinkedList::serialize' => ['string'], -'SplDoublyLinkedList::setIteratorMode' => ['void', 'mode'=>'int'], +'SplDoublyLinkedList::setIteratorMode' => ['int', 'mode'=>'int'], 'SplDoublyLinkedList::shift' => ['mixed'], 'SplDoublyLinkedList::top' => ['mixed'], 'SplDoublyLinkedList::unserialize' => ['void', 'data'=>'string'], @@ -14128,7 +14159,6 @@ return [ 'SplFileObject::fgetc' => ['string|false'], 'SplFileObject::fgetcsv' => ['?array|false', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], 'SplFileObject::fgets' => ['string|false'], -'SplFileObject::fgetss' => ['string|false', 'allowable_tags='=>'string'], 'SplFileObject::flock' => ['bool', 'operation'=>'int', '&w_wouldBlock='=>'int'], 'SplFileObject::fpassthru' => ['int|false'], 'SplFileObject::fputcsv' => ['int|false', 'fields'=>'array', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], @@ -14206,7 +14236,7 @@ return [ 'SplHeap::isEmpty' => ['bool'], 'SplHeap::key' => ['int'], 'SplHeap::next' => ['void'], -'SplHeap::recoverFromCorruption' => ['int'], +'SplHeap::recoverFromCorruption' => ['bool'], 'SplHeap::rewind' => ['void'], 'SplHeap::top' => ['mixed'], 'SplHeap::valid' => ['bool'], @@ -14220,7 +14250,7 @@ return [ 'SplMaxHeap::isEmpty' => ['bool'], 'SplMaxHeap::key' => ['int'], 'SplMaxHeap::next' => ['void'], -'SplMaxHeap::recoverFromCorruption' => ['int'], +'SplMaxHeap::recoverFromCorruption' => ['bool'], 'SplMaxHeap::rewind' => ['void'], 'SplMaxHeap::top' => ['mixed'], 'SplMaxHeap::valid' => ['bool'], @@ -14234,12 +14264,12 @@ return [ 'SplMinHeap::isEmpty' => ['bool'], 'SplMinHeap::key' => ['mixed'], 'SplMinHeap::next' => ['void'], -'SplMinHeap::recoverFromCorruption' => ['void'], +'SplMinHeap::recoverFromCorruption' => ['bool'], 'SplMinHeap::rewind' => ['void'], 'SplMinHeap::top' => ['mixed'], 'SplMinHeap::valid' => ['bool'], 'SplObjectStorage::__construct' => ['void'], -'SplObjectStorage::addAll' => ['void', 'storage'=>'splobjectstorage'], +'SplObjectStorage::addAll' => ['int', 'storage'=>'splobjectstorage'], 'SplObjectStorage::attach' => ['void', 'object'=>'object', 'info='=>'mixed'], 'SplObjectStorage::contains' => ['bool', 'object'=>'object'], 'SplObjectStorage::count' => ['int'], @@ -14270,11 +14300,11 @@ return [ 'SplPriorityQueue::insert' => ['bool', 'value'=>'mixed', 'priority'=>'mixed'], 'SplPriorityQueue::isCorrupted' => ['bool'], 'SplPriorityQueue::isEmpty' => ['bool'], -'SplPriorityQueue::key' => ['mixed'], +'SplPriorityQueue::key' => ['int'], 'SplPriorityQueue::next' => ['void'], -'SplPriorityQueue::recoverFromCorruption' => ['void'], +'SplPriorityQueue::recoverFromCorruption' => ['bool'], 'SplPriorityQueue::rewind' => ['void'], -'SplPriorityQueue::setExtractFlags' => ['void', 'flags'=>'int'], +'SplPriorityQueue::setExtractFlags' => ['int', 'flags'=>'int'], 'SplPriorityQueue::top' => ['mixed'], 'SplPriorityQueue::valid' => ['bool'], 'SplQueue::__construct' => ['void'], @@ -14400,6 +14430,7 @@ return [ 'Spoofchecker::setRestrictionLevel' => ['void', 'level'=>'int'], 'sprintf' => ['string', 'format'=>'string', '...values='=>'string|int|float|Stringable'], 'SQLite3::__construct' => ['void', 'filename'=>'string', 'flags='=>'int', 'encryptionKey='=>'?string'], +'SQLite3::backup' => ['bool', 'destination'=>'SQLite3', 'sourceDatabase='=>'string', 'destinationDatabase='=>'string'], 'SQLite3::busyTimeout' => ['bool', 'milliseconds'=>'int'], 'SQLite3::changes' => ['int'], 'SQLite3::close' => ['bool'], @@ -14432,6 +14463,7 @@ return [ 'SQLite3Stmt::clear' => ['bool'], 'SQLite3Stmt::close' => ['bool'], 'SQLite3Stmt::execute' => ['SQLite3Result'], +'SQLite3Stmt::getSQL' => ['string', 'expand='=>'bool'], 'SQLite3Stmt::paramCount' => ['int'], 'SQLite3Stmt::readOnly' => ['bool'], 'SQLite3Stmt::reset' => ['bool'], @@ -14728,6 +14760,8 @@ return [ 'StompException::getTrace' => ['array'], 'StompException::getTraceAsString' => ['string'], 'StompFrame::__construct' => ['void', 'command='=>'string', 'headers='=>'array', 'body='=>'string'], +'str_contains' => ['bool', 'haystack'=>'string', 'needle'=>'string'], +'str_ends_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], 'str_getcsv' => ['array', 'string'=>'string', 'separator='=>'string', 'enclosure='=>'string', 'escape='=>'string'], 'str_ireplace' => ['string|string[]', 'search'=>'string|array', 'replace'=>'string|array', 'subject'=>'string|array', '&w_count='=>'int'], 'str_pad' => ['string', 'string'=>'string', 'length'=>'int', 'pad_string='=>'string', 'pad_type='=>'int'], @@ -14736,15 +14770,16 @@ return [ 'str_rot13' => ['string', 'string'=>'string'], 'str_shuffle' => ['string', 'string'=>'string'], 'str_split' => ['list', 'string'=>'string', 'length='=>'int'], +'str_starts_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], 'str_word_count' => ['array|int', 'string'=>'string', 'format='=>'int', 'characters='=>'string'], 'strcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'], -'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], +'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'], 'stream_bucket_append' => ['void', 'brigade'=>'resource', 'bucket'=>'object'], 'stream_bucket_make_writeable' => ['object', 'brigade'=>'resource'], -'stream_bucket_new' => ['resource|false', 'stream'=>'resource', 'buffer'=>'string'], +'stream_bucket_new' => ['object', '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'], @@ -14773,7 +14808,7 @@ return [ '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_set_blocking' => ['bool', 'stream'=>'resource', 'enable'=>'bool'], -'stream_set_chunk_size' => ['int|false', 'stream'=>'resource', 'size'=>'int'], +'stream_set_chunk_size' => ['int', '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'], @@ -14816,25 +14851,25 @@ return [ 'streamWrapper::unlink' => ['bool', 'path'=>'string'], 'streamWrapper::url_stat' => ['array', 'path'=>'string', 'flags'=>'int'], 'strftime' => ['string', 'format'=>'string', 'timestamp='=>'int'], -'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string'], +'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string|string[]'], 'stripcslashes' => ['string', 'string'=>'string'], -'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], +'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], 'stripslashes' => ['string', 'string'=>'string'], -'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], +'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], 'strlen' => ['int', 'string'=>'string'], 'strnatcasecmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strnatcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], 'strncasecmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'], 'strncmp' => ['int', 'string1'=>'string', 'string2'=>'string', 'length'=>'int'], 'strpbrk' => ['string|false', 'string'=>'string', 'characters'=>'string'], -'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], +'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], 'strptime' => ['array|false', 'timestamp'=>'string', 'format'=>'string'], -'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int'], +'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string'], 'strrev' => ['string', 'string'=>'string'], -'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], -'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], +'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'], -'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], +'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], 'strtok' => ['string|false', 'string'=>'string', 'token'=>'string'], 'strtok\'1' => ['string|false', 'string'=>'string'], 'strtolower' => ['string', 'string'=>'string'], @@ -14854,8 +14889,8 @@ return [ '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' => ['string', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], +'substr_compare' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], 'substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int', 'length='=>'int'], 'substr_replace' => ['string|string[]', 'string'=>'string|string[]', 'replace'=>'array|string', 'offset'=>'array|int', 'length='=>'?array|?int'], 'suhosin_encrypt_cookie' => ['string|false', 'name'=>'string', 'value'=>'string'], @@ -15976,11 +16011,11 @@ return [ 'time_nanosleep' => ['array{seconds:int,nanoseconds:int}|bool', 'seconds'=>'int', 'nanoseconds'=>'int'], 'time_sleep_until' => ['bool', 'timestamp'=>'float'], 'timezone_abbreviations_list' => ['array'], -'timezone_identifiers_list' => ['list|false', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], +'timezone_identifiers_list' => ['list', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], 'timezone_location_get' => ['array|false', 'object'=>'DateTimeZone'], 'timezone_name_from_abbr' => ['string|false', 'abbr'=>'string', 'utcOffset='=>'int', 'isDST='=>'int'], 'timezone_name_get' => ['string', 'object'=>'DateTimeZone'], -'timezone_offset_get' => ['int|false', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], +'timezone_offset_get' => ['int', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], 'timezone_open' => ['DateTimeZone|false', 'timezone'=>'string'], 'timezone_transitions_get' => ['array|false', 'object'=>'DateTimeZone', 'timestampBegin='=>'int', 'timestampEnd='=>'int'], 'timezone_version_get' => ['string'], @@ -16764,7 +16799,7 @@ return [ 'VarnishLog::getTagName' => ['string', 'index'=>'int'], 'VarnishStat::__construct' => ['void', 'args='=>'array'], 'VarnishStat::getSnapshot' => ['array'], -'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\''], +'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'?(\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\')'], 'vfprintf' => ['int', 'stream'=>'resource', 'format'=>'string', 'values'=>'array'], 'vincenty' => ['', 'geoJsonPointFrom'=>'', 'geoJsonPointTo'=>'', 'reference_ellipsoid='=>'mixed'], 'virtual' => ['bool', 'uri'=>'string'], @@ -16865,6 +16900,8 @@ return [ 'Weakref::get' => ['object'], 'Weakref::release' => ['bool'], 'Weakref::valid' => ['bool'], +'WeakReference::create' => ['WeakReference', 'object'=>'object'], +'WeakReference::get' => ['?object'], 'webObj::convertToString' => ['string'], 'webObj::free' => ['void'], 'webObj::set' => ['int', 'property_name'=>'string', 'new_value'=>''], @@ -17070,27 +17107,27 @@ return [ 'xhprof_sample_disable' => ['array'], 'xhprof_sample_enable' => ['void'], 'xml_error_string' => ['string', 'error_code'=>'int'], -'xml_get_current_byte_index' => ['int|false', 'parser'=>'resource'], -'xml_get_current_column_number' => ['int|false', 'parser'=>'resource'], -'xml_get_current_line_number' => ['int|false', 'parser'=>'resource'], -'xml_get_error_code' => ['int|false', 'parser'=>'resource'], -'xml_parse' => ['int', 'parser'=>'resource', 'data'=>'string', 'is_final='=>'bool'], -'xml_parse_into_struct' => ['int', 'parser'=>'resource', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], -'xml_parser_create' => ['resource', 'encoding='=>'string'], -'xml_parser_create_ns' => ['resource', 'encoding='=>'string', 'separator='=>'string'], -'xml_parser_free' => ['bool', 'parser'=>'resource'], -'xml_parser_get_option' => ['mixed|false', 'parser'=>'resource', 'option'=>'int'], -'xml_parser_set_option' => ['bool', 'parser'=>'resource', 'option'=>'int', 'value'=>'int|string'], -'xml_set_character_data_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_default_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_element_handler' => ['bool', 'parser'=>'resource', 'start_handler'=>'callable', 'end_handler'=>'callable'], -'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_notation_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_object' => ['bool', 'parser'=>'resource', 'object'=>'object'], -'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], +'xml_get_current_byte_index' => ['int', 'parser'=>'XMLParser'], +'xml_get_current_column_number' => ['int', 'parser'=>'XMLParser'], +'xml_get_current_line_number' => ['int', 'parser'=>'XMLParser'], +'xml_get_error_code' => ['int', 'parser'=>'XMLParser'], +'xml_parse' => ['int', 'parser'=>'XMLParser', 'data'=>'string', 'is_final='=>'bool'], +'xml_parse_into_struct' => ['int', 'parser'=>'XMLParser', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], +'xml_parser_create' => ['XMLParser', 'encoding='=>'string'], +'xml_parser_create_ns' => ['XMLParser', 'encoding='=>'string', 'separator='=>'string'], +'xml_parser_free' => ['bool', 'parser'=>'XMLParser'], +'xml_parser_get_option' => ['int|string', 'parser'=>'XMLParser', 'option'=>'int'], +'xml_parser_set_option' => ['bool', 'parser'=>'XMLParser', 'option'=>'int', 'value'=>'int|string'], +'xml_set_character_data_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], +'xml_set_default_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], +'xml_set_element_handler' => ['bool', 'parser'=>'XMLParser', 'start_handler'=>'callable', 'end_handler'=>'callable'], +'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], +'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], +'xml_set_notation_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], +'xml_set_object' => ['bool', 'parser'=>'XMLParser', 'object'=>'object'], +'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], +'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], +'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], 'XMLDiff\Base::__construct' => ['void', 'nsname'=>'string'], 'XMLDiff\Base::diff' => ['mixed', 'from'=>'mixed', 'to'=>'mixed'], 'XMLDiff\Base::merge' => ['mixed', 'src'=>'mixed', 'diff'=>'mixed'], @@ -17149,15 +17186,15 @@ return [ 'XMLWriter::endDTDEntity' => ['bool'], 'XMLWriter::endElement' => ['bool'], 'XMLWriter::endPI' => ['bool'], -'XMLWriter::flush' => ['', 'empty='=>'bool'], +'XMLWriter::flush' => ['string|int', 'empty='=>'bool'], 'XMLWriter::fullEndElement' => ['bool'], 'XMLWriter::openMemory' => ['bool'], -'XMLWriter::openURI' => ['resource', 'uri'=>'string'], +'XMLWriter::openURI' => ['bool', 'uri'=>'string'], 'XMLWriter::outputMemory' => ['string', 'flush='=>'bool'], 'XMLWriter::setIndent' => ['bool', 'enable'=>'bool'], 'XMLWriter::setIndentString' => ['bool', 'indentation'=>'string'], 'XMLWriter::startAttribute' => ['bool', 'name'=>'string'], -'XMLWriter::startAttributeNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], +'XMLWriter::startAttributeNs' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string'], 'XMLWriter::startCData' => ['bool'], 'XMLWriter::startComment' => ['bool'], 'XMLWriter::startDocument' => ['bool', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], @@ -17170,59 +17207,61 @@ return [ 'XMLWriter::startPI' => ['bool', 'target'=>'string'], 'XMLWriter::text' => ['bool', 'content'=>'string'], 'XMLWriter::writeAttribute' => ['bool', 'name'=>'string', 'value'=>'string'], -'XMLWriter::writeAttributeNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], +'XMLWriter::writeAttributeNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'], +'XMLWriter::writeAttributeNs' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'], 'XMLWriter::writeCData' => ['bool', 'content'=>'string'], 'XMLWriter::writeComment' => ['bool', 'content'=>'string'], 'XMLWriter::writeDTD' => ['bool', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], 'XMLWriter::writeDTDAttlist' => ['bool', 'name'=>'string', 'content'=>'string'], 'XMLWriter::writeDTDElement' => ['bool', 'name'=>'string', 'content'=>'string'], 'XMLWriter::writeDTDEntity' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam'=>'bool', 'publicId'=>'string', 'systemId'=>'string', 'notationData'=>'string'], +'XMLWriter::writeDtdEntity' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'?string', 'systemId='=>'?string', 'notationData='=>'?string'], 'XMLWriter::writeElement' => ['bool', 'name'=>'string', 'content='=>'?string'], 'XMLWriter::writeElementNS' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'?string'], 'XMLWriter::writePI' => ['bool', 'target'=>'string', 'content'=>'string'], 'XMLWriter::writeRaw' => ['bool', 'content'=>'string'], -'xmlwriter_end_attribute' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_cdata' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_comment' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_document' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_element' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_pi' => ['bool', 'writer'=>'resource'], -'xmlwriter_flush' => ['int|string', 'writer'=>'resource', 'empty='=>'bool'], -'xmlwriter_full_end_element' => ['bool', 'writer'=>'resource'], -'xmlwriter_open_memory' => ['resource'], -'xmlwriter_open_uri' => ['resource', 'uri'=>'string'], -'xmlwriter_output_memory' => ['string', 'writer'=>'resource', 'flush='=>'bool'], -'xmlwriter_set_indent' => ['bool', 'writer'=>'resource', 'enable'=>'bool'], -'xmlwriter_set_indent_string' => ['bool', 'writer'=>'resource', 'indentation'=>'string'], -'xmlwriter_start_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string'], -'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], -'xmlwriter_start_cdata' => ['bool', 'writer'=>'resource'], -'xmlwriter_start_comment' => ['bool', 'writer'=>'resource'], -'xmlwriter_start_document' => ['bool', 'writer'=>'resource', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], -'xmlwriter_start_dtd' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], -'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string'], -'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string'], -'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'isParam'=>'bool'], -'xmlwriter_start_element' => ['bool', 'writer'=>'resource', 'name'=>'string'], -'xmlwriter_start_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], -'xmlwriter_start_pi' => ['bool', 'writer'=>'resource', 'target'=>'string'], -'xmlwriter_text' => ['bool', 'writer'=>'resource', 'content'=>'string'], -'xmlwriter_write_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string', 'value'=>'string'], -'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], -'xmlwriter_write_cdata' => ['bool', 'writer'=>'resource', 'content'=>'string'], -'xmlwriter_write_comment' => ['bool', 'writer'=>'resource', 'content'=>'string'], -'xmlwriter_write_dtd' => ['bool', 'writer'=>'resource', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], -'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], -'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], -'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], -'xmlwriter_write_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content='=>'string'], -'xmlwriter_write_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], -'xmlwriter_write_pi' => ['bool', 'writer'=>'resource', 'target'=>'string', 'content'=>'string'], -'xmlwriter_write_raw' => ['bool', 'writer'=>'resource', 'content'=>'string'], +'xmlwriter_end_attribute' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_cdata' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_comment' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_document' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_dtd' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_element' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_end_pi' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_flush' => ['int|string', 'writer'=>'XMLWriter', 'empty='=>'bool'], +'xmlwriter_full_end_element' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_open_memory' => ['XMLWriter'], +'xmlwriter_open_uri' => ['XMLWriter', 'uri'=>'string'], +'xmlwriter_output_memory' => ['string', 'writer'=>'XMLWriter', 'flush='=>'bool'], +'xmlwriter_set_indent' => ['bool', 'writer'=>'XMLWriter', 'enable'=>'bool'], +'xmlwriter_set_indent_string' => ['bool', 'writer'=>'XMLWriter', 'indentation'=>'string'], +'xmlwriter_start_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], +'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], +'xmlwriter_start_cdata' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_start_comment' => ['bool', 'writer'=>'XMLWriter'], +'xmlwriter_start_document' => ['bool', 'writer'=>'XMLWriter', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], +'xmlwriter_start_dtd' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], +'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], +'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string'], +'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'isParam'=>'bool'], +'xmlwriter_start_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], +'xmlwriter_start_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], +'xmlwriter_start_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string'], +'xmlwriter_text' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], +'xmlwriter_write_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'value'=>'string'], +'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], +'xmlwriter_write_cdata' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], +'xmlwriter_write_comment' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], +'xmlwriter_write_dtd' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], +'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], +'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], +'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], +'xmlwriter_write_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content='=>'string'], +'xmlwriter_write_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], +'xmlwriter_write_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string', 'content'=>'string'], +'xmlwriter_write_raw' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], 'xpath_new_context' => ['XPathContext', 'dom_document'=>'DOMDocument'], 'xpath_register_ns' => ['bool', 'xpath_context'=>'xpathcontext', 'prefix'=>'string', 'uri'=>'string'], 'xpath_register_ns_auto' => ['bool', 'xpath_context'=>'xpathcontext', 'context_node='=>'object'], @@ -17259,14 +17298,14 @@ return [ 'XSLTProcessor::getParameter' => ['string|false', 'namespace'=>'string', 'name'=>'string'], 'XsltProcessor::getSecurityPrefs' => ['int'], 'XSLTProcessor::hasExsltSupport' => ['bool'], -'XSLTProcessor::importStylesheet' => ['bool', 'stylesheet'=>'object'], -'XSLTProcessor::registerPHPFunctions' => ['void', 'functions='=>'mixed'], +'XSLTProcessor::importStylesheet' => ['bool', 'stylesheet'=>'DOMDocument|SimpleXMLElement'], +'XSLTProcessor::registerPHPFunctions' => ['void', 'functions='=>'?array|?string'], 'XSLTProcessor::removeParameter' => ['bool', 'namespace'=>'string', 'name'=>'string'], 'XSLTProcessor::setParameter' => ['bool', 'namespace'=>'string', 'name'=>'string', 'value'=>'string'], 'XSLTProcessor::setParameter\'1' => ['bool', 'namespace'=>'string', 'options'=>'array'], 'XSLTProcessor::setProfiling' => ['bool', 'filename'=>'string'], -'XsltProcessor::setSecurityPrefs' => ['int', 'preferences'=>'int'], -'XSLTProcessor::transformToDoc' => ['DOMDocument|false', 'document'=>'DOMNode'], +'XSLTProcessor::setSecurityPrefs' => ['int', 'preferences'=>'int'], +'XSLTProcessor::transformToDoc' => ['DOMDocument|false', 'document'=>'DOMDocument|SimpleXMLElement'], 'XSLTProcessor::transformToURI' => ['int', 'document'=>'DOMDocument', 'uri'=>'string'], 'XSLTProcessor::transformToXML' => ['string', 'document'=>'DOMDocument'], 'yac::__construct' => ['void', 'prefix='=>'string'], @@ -18200,7 +18239,7 @@ return [ 'ZendAPI_Queue::updateJob' => ['int', '&job'=>'Job'], 'ZendAPI_Queue::zendapi_queue' => ['ZendAPI_Queue', 'queue_url'=>'string'], 'zip_close' => ['void', 'zip'=>'resource'], -'zip_entry_close' => ['bool', 'zip_ent'=>'resource'], +'zip_entry_close' => ['bool', 'zip_entry'=>'resource'], 'zip_entry_compressedsize' => ['int', 'zip_entry'=>'resource'], 'zip_entry_compressionmethod' => ['string', 'zip_entry'=>'resource'], 'zip_entry_filesize' => ['int', 'zip_entry'=>'resource'], @@ -18212,8 +18251,8 @@ return [ 'ZipArchive::addEmptyDir' => ['bool', 'dirname'=>'string'], 'ZipArchive::addFile' => ['bool', 'filepath'=>'string', 'entryname='=>'string', 'start='=>'int', 'length='=>'int'], 'ZipArchive::addFromString' => ['bool', 'name'=>'string', 'content'=>'string'], -'ZipArchive::addGlob' => ['bool', 'pattern'=>'string', 'flags='=>'int', 'options='=>'array'], -'ZipArchive::addPattern' => ['bool', 'pattern'=>'string', 'path='=>'string', 'options='=>'array'], +'ZipArchive::addGlob' => ['array|false', 'pattern'=>'string', 'flags='=>'int', 'options='=>'array'], +'ZipArchive::addPattern' => ['array|false', 'pattern'=>'string', 'path='=>'string', 'options='=>'array'], 'ZipArchive::close' => ['bool'], 'ZipArchive::count' => ['int'], 'ZipArchive::createEmptyDir' => ['bool', 'dirname'=>'string'], @@ -18233,18 +18272,18 @@ return [ 'ZipArchive::isCompressionMethodSupported' => ['bool', 'method'=>'int', 'enc='=>'bool'], 'ZipArchive::isEncryptionMethodSupported' => ['bool', 'method'=>'int', 'enc='=>'bool'], 'ZipArchive::locateName' => ['int|false', 'name'=>'string', 'flags='=>'int'], -'ZipArchive::open' => ['mixed', 'filename'=>'string', 'flags='=>'int'], +'ZipArchive::open' => ['bool|int', 'filename'=>'string', 'flags='=>'int'], 'ZipArchive::registerCancelCallback' => ['bool', 'callback'=>'callable'], 'ZipArchive::registerProgressCallback' => ['bool', 'rate'=>'float', 'callback'=>'callable'], 'ZipArchive::renameIndex' => ['bool', 'index'=>'int', 'new_name'=>'string'], 'ZipArchive::renameName' => ['bool', 'name'=>'string', 'new_name'=>'string'], -'ZipArchive::replaceFile' => ['bool', 'filepath'=>'string', 'index'=>'int', 'start='=>'int', 'length='=>'int', 'flags='=>'int'], +'ZipArchive::replaceFile' => ['bool', 'filepath'=>'string', 'index'=>'string', 'start='=>'int', 'length='=>'int', 'flags='=>'int'], 'ZipArchive::setArchiveComment' => ['bool', 'comment'=>'string'], 'ZipArchive::setCommentIndex' => ['bool', 'index'=>'int', 'comment'=>'string'], 'ZipArchive::setCommentName' => ['bool', 'name'=>'string', 'comment'=>'string'], 'ZipArchive::setCompressionIndex' => ['bool', 'index'=>'int', 'method'=>'int', 'compflags='=>'int'], 'ZipArchive::setCompressionName' => ['bool', 'name'=>'string', 'method'=>'int', 'compflags='=>'int'], -'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'string', 'password='=>'string'], +'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'int', 'password='=>'string'], 'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'], 'ZipArchive::setExternalAttributesIndex' => ['bool', 'index'=>'int', 'opsys'=>'int', 'attr'=>'int', 'flags='=>'int'], 'ZipArchive::setExternalAttributesName' => ['bool', 'name'=>'string', 'opsys'=>'int', 'attr'=>'int', 'flags='=>'int'], diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMapReal_php73.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMapReal_php73.php index 8188eb96..9f16dcd8 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMapReal_php73.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMapReal_php73.php @@ -298,7 +298,7 @@ return [ 'get_defined_constants' => '?array|?array|?array|?array|?array|?array', 'get_defined_functions' => '?array', 'get_extension_funcs' => '?list|?false', -'get_headers' => '?list|?list|?false', +'get_headers' => '?array|?array|?false', 'get_html_translation_table' => '?array', 'get_loaded_extensions' => '?list', 'get_mangled_object_vars' => '?array', diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php70_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php70_delta.php index e918e0f4..bb4f39cf 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php70_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php70_delta.php @@ -16,194 +16,200 @@ * TODO: Add some way to warn about functions such as intdiv or IntlChar if they aren't in the configured target_php_version */ return [ -'new' => [ -'Closure::call' => ['', 'newThis'=>'object', '...args='=>''], -'intdiv' => ['int', 'num1'=>'int', 'num2'=>'int'], -'IntlChar::charAge' => ['array', 'codepoint'=>'int|string'], -'IntlChar::charDigitValue' => ['int', 'codepoint'=>'mixed'], -'IntlChar::charDirection' => ['int', 'codepoint'=>'mixed'], -'IntlChar::charFromName' => ['?int', 'name'=>'string', 'type='=>'int'], -'IntlChar::charMirror' => ['mixed', 'codepoint'=>'mixed'], -'IntlChar::charName' => ['string', 'codepoint'=>'int|string', 'type='=>'int'], -'IntlChar::charType' => ['int', 'codepoint'=>'mixed'], -'IntlChar::chr' => ['string', 'codepoint'=>'mixed'], -'IntlChar::digit' => ['int|false', 'codepoint'=>'int|string', 'base='=>'int'], -'IntlChar::enumCharNames' => ['void', 'start'=>'mixed', 'end'=>'mixed', 'callback'=>'callable', 'type='=>'int'], -'IntlChar::enumCharTypes' => ['void', 'callback='=>'callable'], -'IntlChar::foldCase' => ['int|string', 'codepoint'=>'int|string', 'options='=>'int'], -'IntlChar::forDigit' => ['int', 'digit'=>'int', 'base'=>'int'], -'IntlChar::getBidiPairedBracket' => ['mixed', 'codepoint'=>'mixed'], -'IntlChar::getBlockCode' => ['int', 'codepoint'=>'int|string'], -'IntlChar::getCombiningClass' => ['int', 'codepoint'=>'mixed'], -'IntlChar::getFC_NFKC_Closure' => ['string', 'codepoint'=>'int|string'], -'IntlChar::getIntPropertyMaxValue' => ['int', 'property'=>'int'], -'IntlChar::getIntPropertyMinValue' => ['int', 'property'=>'int'], -'IntlChar::getIntPropertyMxValue' => ['int', 'property'=>'int'], -'IntlChar::getIntPropertyValue' => ['int', 'codepoint'=>'int|string', 'property'=>'int'], -'IntlChar::getNumericValue' => ['float', 'codepoint'=>'int|string'], -'IntlChar::getPropertyEnum' => ['int', 'alias'=>'string'], -'IntlChar::getPropertyName' => ['string|false', 'property'=>'int', 'type='=>'int'], -'IntlChar::getPropertyValueEnum' => ['int', 'property'=>'int', 'name'=>'string'], -'IntlChar::getPropertyValueName' => ['string|false', 'property'=>'int', 'value'=>'int', 'type='=>'int'], -'IntlChar::getUnicodeVersion' => ['array'], -'IntlChar::hasBinaryProperty' => ['bool', 'codepoint'=>'int|string', 'property'=>'int'], -'IntlChar::isalnum' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isalpha' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isbase' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isblank' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::iscntrl' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isdefined' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isdigit' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isgraph' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isIDIgnorable' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isIDPart' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isIDStart' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isISOControl' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isJavaIDPart' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isJavaIDStart' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isJavaSpaceChar' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::islower' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isMirrored' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isprint' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::ispunct' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isspace' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::istitle' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isUAlphabetic' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isULowercase' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isupper' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isUUppercase' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isUWhiteSpace' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isWhitespace' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::isxdigit' => ['bool', 'codepoint'=>'mixed'], -'IntlChar::ord' => ['int', 'character'=>'mixed'], -'IntlChar::tolower' => ['mixed', 'codepoint'=>'mixed'], -'IntlChar::totitle' => ['mixed', 'codepoint'=>'mixed'], -'IntlChar::toupper' => ['mixed', 'codepoint'=>'mixed'], -'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], -'random_bytes' => ['string', 'length'=>'int'], -'random_int' => ['int', 'min'=>'int', 'max'=>'int'], -'session_start' => ['bool', 'options='=>'array'], -'unserialize' => ['mixed', 'data'=>'string', 'options='=>'array{allowed_classes?:string[]|bool}'], -], -'old' => [ -'ereg' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'], -'ereg_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'], -'eregi' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'], -'eregi_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'], -'imagepsbbox' => ['array', 'text'=>'string', 'font'=>'', 'size'=>'int', 'space'=>'int', 'tightness'=>'int', 'angle'=>'float'], -'imagepsencodefont' => ['bool', 'font_index'=>'resource', 'encodingfile'=>'string'], -'imagepsextendfont' => ['bool', 'font_index'=>'resource', 'extend'=>'float'], -'imagepsfreefont' => ['bool', 'font_index'=>'resource'], -'imagepsloadfont' => ['resource', 'filename'=>'string'], -'imagepsslantfont' => ['bool', 'font_index'=>'resource', 'slant'=>'float'], -'imagepstext' => ['array', 'image'=>'resource', 'text'=>'string', 'font_index'=>'resource', 'size'=>'int', 'foreground'=>'int', 'background'=>'int', 'x'=>'int', 'y'=>'int', 'space='=>'int', 'tightness='=>'int', 'angle='=>'float', 'antialias_steps='=>'int'], -'mssql_bind' => ['bool', 'stmt'=>'resource', 'param_name'=>'string', 'var'=>'mixed', 'type'=>'int', 'is_output='=>'bool', 'is_null='=>'bool', 'maxlen='=>'int'], -'mssql_close' => ['bool', 'link_identifier='=>'resource'], -'mssql_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'], -'mssql_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'], -'mssql_execute' => ['mixed', 'stmt'=>'resource', 'skip_results='=>'bool'], -'mssql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'], -'mssql_fetch_assoc' => ['array', 'result_id'=>'resource'], -'mssql_fetch_batch' => ['int', 'result'=>'resource'], -'mssql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], -'mssql_fetch_object' => ['object', 'result'=>'resource'], -'mssql_fetch_row' => ['array', 'result'=>'resource'], -'mssql_field_length' => ['int', 'result'=>'resource', 'offset='=>'int'], -'mssql_field_name' => ['string', 'result'=>'resource', 'offset='=>'int'], -'mssql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], -'mssql_field_type' => ['string', 'result'=>'resource', 'offset='=>'int'], -'mssql_free_result' => ['bool', 'result'=>'resource'], -'mssql_free_statement' => ['bool', 'stmt'=>'resource'], -'mssql_get_last_message' => ['string'], -'mssql_guid_string' => ['string', 'binary'=>'string', 'short_format='=>'bool'], -'mssql_init' => ['resource', 'sp_name'=>'string', 'link_identifier='=>'resource'], -'mssql_min_error_severity' => ['void', 'severity'=>'int'], -'mssql_min_message_severity' => ['void', 'severity'=>'int'], -'mssql_next_result' => ['bool', 'result_id'=>'resource'], -'mssql_num_fields' => ['int', 'result'=>'resource'], -'mssql_num_rows' => ['int', 'result'=>'resource'], -'mssql_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'], -'mssql_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource', 'batch_size='=>'int'], -'mssql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'], -'mssql_rows_affected' => ['int', 'link_identifier'=>'resource'], -'mssql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], -'mysql_affected_rows' => ['int', 'link_identifier='=>'resource'], -'mysql_client_encoding' => ['string', 'link_identifier='=>'resource'], -'mysql_close' => ['bool', 'link_identifier='=>'resource'], -'mysql_connect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool', 'client_flags='=>'int'], -'mysql_create_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], -'mysql_data_seek' => ['bool', 'result'=>'resource', 'row_number'=>'int'], -'mysql_db_name' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'], -'mysql_db_query' => ['resource', 'database'=>'string', 'query'=>'string', 'link_identifier='=>'resource'], -'mysql_drop_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], -'mysql_errno' => ['int', 'link_identifier='=>'resource'], -'mysql_error' => ['string', 'link_identifier='=>'resource'], -'mysql_escape_string' => ['string', 'unescaped_string'=>'string'], -'mysql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'], -'mysql_fetch_assoc' => ['array', 'result'=>'resource'], -'mysql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], -'mysql_fetch_lengths' => ['array', 'result'=>'resource'], -'mysql_fetch_object' => ['object', 'result'=>'resource', 'class_name='=>'string', 'params='=>'array'], -'mysql_fetch_row' => ['array', 'result'=>'resource'], -'mysql_field_flags' => ['string', 'result'=>'resource', 'field_offset'=>'int'], -'mysql_field_len' => ['int', 'result'=>'resource', 'field_offset'=>'int'], -'mysql_field_name' => ['string', 'result'=>'resource', 'field_offset'=>'int'], -'mysql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], -'mysql_field_table' => ['string', 'result'=>'resource', 'field_offset'=>'int'], -'mysql_field_type' => ['string', 'result'=>'resource', 'field_offset'=>'int'], -'mysql_free_result' => ['bool', 'result'=>'resource'], -'mysql_get_client_info' => ['string'], -'mysql_get_host_info' => ['string', 'link_identifier='=>'resource'], -'mysql_get_proto_info' => ['int', 'link_identifier='=>'resource'], -'mysql_get_server_info' => ['string', 'link_identifier='=>'resource'], -'mysql_info' => ['string', 'link_identifier='=>'resource'], -'mysql_insert_id' => ['int', 'link_identifier='=>'resource'], -'mysql_list_dbs' => ['resource', 'link_identifier='=>'resource'], -'mysql_list_fields' => ['resource', 'database_name'=>'string', 'table_name'=>'string', 'link_identifier='=>'resource'], -'mysql_list_processes' => ['resource', 'link_identifier='=>'resource'], -'mysql_list_tables' => ['resource', 'database'=>'string', 'link_identifier='=>'resource'], -'mysql_num_fields' => ['int', 'result'=>'resource'], -'mysql_num_rows' => ['int', 'result'=>'resource'], -'mysql_pconnect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'client_flags='=>'int'], -'mysql_ping' => ['bool', 'link_identifier='=>'resource'], -'mysql_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'], -'mysql_real_escape_string' => ['string', 'unescaped_string'=>'string', 'link_identifier='=>'resource'], -'mysql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'], -'mysql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], -'mysql_set_charset' => ['bool', 'charset'=>'string', 'link_identifier='=>'resource'], -'mysql_stat' => ['string', 'link_identifier='=>'resource'], -'mysql_tablename' => ['string', 'result'=>'resource', 'i'=>'int'], -'mysql_thread_id' => ['int', 'link_identifier='=>'resource'], -'mysql_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'], -'session_start' => ['bool'], -'split' => ['list', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], -'spliti' => ['list', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], -'sql_regcase' => ['string', 'string'=>'string'], -'sybase_affected_rows' => ['int', 'link_identifier='=>'resource'], -'sybase_close' => ['bool', 'link_identifier='=>'resource'], -'sybase_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string', 'new='=>'bool'], -'sybase_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'], -'sybase_deadlock_retry_count' => ['void', 'retry_count'=>'int'], -'sybase_fetch_array' => ['array', 'result'=>'resource'], -'sybase_fetch_assoc' => ['array', 'result'=>'resource'], -'sybase_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], -'sybase_fetch_object' => ['object', 'result'=>'resource', 'object='=>'mixed'], -'sybase_fetch_row' => ['array', 'result'=>'resource'], -'sybase_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], -'sybase_free_result' => ['bool', 'result'=>'resource'], -'sybase_get_last_message' => ['string'], -'sybase_min_client_severity' => ['void', 'severity'=>'int'], -'sybase_min_error_severity' => ['void', 'severity'=>'int'], -'sybase_min_message_severity' => ['void', 'severity'=>'int'], -'sybase_min_server_severity' => ['void', 'severity'=>'int'], -'sybase_num_fields' => ['int', 'result'=>'resource'], -'sybase_num_rows' => ['int', 'result'=>'resource'], -'sybase_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string'], -'sybase_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource'], -'sybase_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'], -'sybase_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], -'sybase_set_message_handler' => ['bool', 'handler'=>'callable', 'connection='=>'resource'], -'sybase_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier'=>'resource', 'store_result='=>'bool'], -'unserialize' => ['mixed', 'data'=>'string'], -], + 'added' => [ + 'Closure::call' => ['', 'newThis'=>'object', '...args='=>''], + 'intdiv' => ['int', 'num1'=>'int', 'num2'=>'int'], + 'IntlChar::charAge' => ['array', 'codepoint'=>'int|string'], + 'IntlChar::charDigitValue' => ['int', 'codepoint'=>'mixed'], + 'IntlChar::charDirection' => ['int', 'codepoint'=>'mixed'], + 'IntlChar::charFromName' => ['?int', 'name'=>'string', 'type='=>'int'], + 'IntlChar::charMirror' => ['mixed', 'codepoint'=>'mixed'], + 'IntlChar::charName' => ['string', 'codepoint'=>'int|string', 'type='=>'int'], + 'IntlChar::charType' => ['int', 'codepoint'=>'mixed'], + 'IntlChar::chr' => ['string', 'codepoint'=>'mixed'], + 'IntlChar::digit' => ['int|false', 'codepoint'=>'int|string', 'base='=>'int'], + 'IntlChar::enumCharNames' => ['void', 'start'=>'mixed', 'end'=>'mixed', 'callback'=>'callable', 'type='=>'int'], + 'IntlChar::enumCharTypes' => ['void', 'callback='=>'callable'], + 'IntlChar::foldCase' => ['int|string', 'codepoint'=>'int|string', 'options='=>'int'], + 'IntlChar::forDigit' => ['int', 'digit'=>'int', 'base'=>'int'], + 'IntlChar::getBidiPairedBracket' => ['mixed', 'codepoint'=>'mixed'], + 'IntlChar::getBlockCode' => ['int', 'codepoint'=>'int|string'], + 'IntlChar::getCombiningClass' => ['int', 'codepoint'=>'mixed'], + 'IntlChar::getFC_NFKC_Closure' => ['string', 'codepoint'=>'int|string'], + 'IntlChar::getIntPropertyMaxValue' => ['int', 'property'=>'int'], + 'IntlChar::getIntPropertyMinValue' => ['int', 'property'=>'int'], + 'IntlChar::getIntPropertyMxValue' => ['int', 'property'=>'int'], + 'IntlChar::getIntPropertyValue' => ['int', 'codepoint'=>'int|string', 'property'=>'int'], + 'IntlChar::getNumericValue' => ['float', 'codepoint'=>'int|string'], + 'IntlChar::getPropertyEnum' => ['int', 'alias'=>'string'], + 'IntlChar::getPropertyName' => ['string|false', 'property'=>'int', 'type='=>'int'], + 'IntlChar::getPropertyValueEnum' => ['int', 'property'=>'int', 'name'=>'string'], + 'IntlChar::getPropertyValueName' => ['string|false', 'property'=>'int', 'value'=>'int', 'type='=>'int'], + 'IntlChar::getUnicodeVersion' => ['array'], + 'IntlChar::hasBinaryProperty' => ['bool', 'codepoint'=>'int|string', 'property'=>'int'], + 'IntlChar::isalnum' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isalpha' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isbase' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isblank' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::iscntrl' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isdefined' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isdigit' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isgraph' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isIDIgnorable' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isIDPart' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isIDStart' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isISOControl' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isJavaIDPart' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isJavaIDStart' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isJavaSpaceChar' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::islower' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isMirrored' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isprint' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::ispunct' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isspace' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::istitle' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isUAlphabetic' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isULowercase' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isupper' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isUUppercase' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isUWhiteSpace' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isWhitespace' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::isxdigit' => ['bool', 'codepoint'=>'mixed'], + 'IntlChar::ord' => ['int', 'character'=>'mixed'], + 'IntlChar::tolower' => ['mixed', 'codepoint'=>'mixed'], + 'IntlChar::totitle' => ['mixed', 'codepoint'=>'mixed'], + 'IntlChar::toupper' => ['mixed', 'codepoint'=>'mixed'], + 'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], + 'random_bytes' => ['string', 'length'=>'int'], + 'random_int' => ['int', 'min'=>'int', 'max'=>'int'], + ], + 'changed' => [ + 'session_start' => [ + 'old' => ['bool'], + 'new' => ['bool', 'options='=>'array'], + ], + 'unserialize' => [ + 'old' => ['mixed', 'data'=>'string'], + 'new' => ['mixed', 'data'=>'string', 'options='=>'array{allowed_classes?:string[]|bool}'], + ], + ], + 'removed' => [ + 'ereg' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'], + 'ereg_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'], + 'eregi' => ['int', 'pattern'=>'string', 'string'=>'string', 'regs='=>'array'], + 'eregi_replace' => ['string', 'pattern'=>'string', 'replacement'=>'string', 'string'=>'string'], + 'imagepsbbox' => ['array', 'text'=>'string', 'font'=>'', 'size'=>'int', 'space'=>'int', 'tightness'=>'int', 'angle'=>'float'], + 'imagepsencodefont' => ['bool', 'font_index'=>'resource', 'encodingfile'=>'string'], + 'imagepsextendfont' => ['bool', 'font_index'=>'resource', 'extend'=>'float'], + 'imagepsfreefont' => ['bool', 'font_index'=>'resource'], + 'imagepsloadfont' => ['resource', 'filename'=>'string'], + 'imagepsslantfont' => ['bool', 'font_index'=>'resource', 'slant'=>'float'], + 'imagepstext' => ['array', 'image'=>'resource', 'text'=>'string', 'font_index'=>'resource', 'size'=>'int', 'foreground'=>'int', 'background'=>'int', 'x'=>'int', 'y'=>'int', 'space='=>'int', 'tightness='=>'int', 'angle='=>'float', 'antialias_steps='=>'int'], + 'mssql_bind' => ['bool', 'stmt'=>'resource', 'param_name'=>'string', 'var'=>'mixed', 'type'=>'int', 'is_output='=>'bool', 'is_null='=>'bool', 'maxlen='=>'int'], + 'mssql_close' => ['bool', 'link_identifier='=>'resource'], + 'mssql_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'], + 'mssql_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'], + 'mssql_execute' => ['mixed', 'stmt'=>'resource', 'skip_results='=>'bool'], + 'mssql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'], + 'mssql_fetch_assoc' => ['array', 'result_id'=>'resource'], + 'mssql_fetch_batch' => ['int', 'result'=>'resource'], + 'mssql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], + 'mssql_fetch_object' => ['object', 'result'=>'resource'], + 'mssql_fetch_row' => ['array', 'result'=>'resource'], + 'mssql_field_length' => ['int', 'result'=>'resource', 'offset='=>'int'], + 'mssql_field_name' => ['string', 'result'=>'resource', 'offset='=>'int'], + 'mssql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], + 'mssql_field_type' => ['string', 'result'=>'resource', 'offset='=>'int'], + 'mssql_free_result' => ['bool', 'result'=>'resource'], + 'mssql_free_statement' => ['bool', 'stmt'=>'resource'], + 'mssql_get_last_message' => ['string'], + 'mssql_guid_string' => ['string', 'binary'=>'string', 'short_format='=>'bool'], + 'mssql_init' => ['resource', 'sp_name'=>'string', 'link_identifier='=>'resource'], + 'mssql_min_error_severity' => ['void', 'severity'=>'int'], + 'mssql_min_message_severity' => ['void', 'severity'=>'int'], + 'mssql_next_result' => ['bool', 'result_id'=>'resource'], + 'mssql_num_fields' => ['int', 'result'=>'resource'], + 'mssql_num_rows' => ['int', 'result'=>'resource'], + 'mssql_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool'], + 'mssql_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource', 'batch_size='=>'int'], + 'mssql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'], + 'mssql_rows_affected' => ['int', 'link_identifier'=>'resource'], + 'mssql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], + 'mysql_affected_rows' => ['int', 'link_identifier='=>'resource'], + 'mysql_client_encoding' => ['string', 'link_identifier='=>'resource'], + 'mysql_close' => ['bool', 'link_identifier='=>'resource'], + 'mysql_connect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'new_link='=>'bool', 'client_flags='=>'int'], + 'mysql_create_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], + 'mysql_data_seek' => ['bool', 'result'=>'resource', 'row_number'=>'int'], + 'mysql_db_name' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'], + 'mysql_db_query' => ['resource', 'database'=>'string', 'query'=>'string', 'link_identifier='=>'resource'], + 'mysql_drop_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], + 'mysql_errno' => ['int', 'link_identifier='=>'resource'], + 'mysql_error' => ['string', 'link_identifier='=>'resource'], + 'mysql_escape_string' => ['string', 'unescaped_string'=>'string'], + 'mysql_fetch_array' => ['array', 'result'=>'resource', 'result_type='=>'int'], + 'mysql_fetch_assoc' => ['array', 'result'=>'resource'], + 'mysql_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], + 'mysql_fetch_lengths' => ['array', 'result'=>'resource'], + 'mysql_fetch_object' => ['object', 'result'=>'resource', 'class_name='=>'string', 'params='=>'array'], + 'mysql_fetch_row' => ['array', 'result'=>'resource'], + 'mysql_field_flags' => ['string', 'result'=>'resource', 'field_offset'=>'int'], + 'mysql_field_len' => ['int', 'result'=>'resource', 'field_offset'=>'int'], + 'mysql_field_name' => ['string', 'result'=>'resource', 'field_offset'=>'int'], + 'mysql_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], + 'mysql_field_table' => ['string', 'result'=>'resource', 'field_offset'=>'int'], + 'mysql_field_type' => ['string', 'result'=>'resource', 'field_offset'=>'int'], + 'mysql_free_result' => ['bool', 'result'=>'resource'], + 'mysql_get_client_info' => ['string'], + 'mysql_get_host_info' => ['string', 'link_identifier='=>'resource'], + 'mysql_get_proto_info' => ['int', 'link_identifier='=>'resource'], + 'mysql_get_server_info' => ['string', 'link_identifier='=>'resource'], + 'mysql_info' => ['string', 'link_identifier='=>'resource'], + 'mysql_insert_id' => ['int', 'link_identifier='=>'resource'], + 'mysql_list_dbs' => ['resource', 'link_identifier='=>'resource'], + 'mysql_list_fields' => ['resource', 'database_name'=>'string', 'table_name'=>'string', 'link_identifier='=>'resource'], + 'mysql_list_processes' => ['resource', 'link_identifier='=>'resource'], + 'mysql_list_tables' => ['resource', 'database'=>'string', 'link_identifier='=>'resource'], + 'mysql_num_fields' => ['int', 'result'=>'resource'], + 'mysql_num_rows' => ['int', 'result'=>'resource'], + 'mysql_pconnect' => ['resource', 'server='=>'string', 'username='=>'string', 'password='=>'string', 'client_flags='=>'int'], + 'mysql_ping' => ['bool', 'link_identifier='=>'resource'], + 'mysql_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'], + 'mysql_real_escape_string' => ['string', 'unescaped_string'=>'string', 'link_identifier='=>'resource'], + 'mysql_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field='=>'mixed'], + 'mysql_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], + 'mysql_set_charset' => ['bool', 'charset'=>'string', 'link_identifier='=>'resource'], + 'mysql_stat' => ['string', 'link_identifier='=>'resource'], + 'mysql_tablename' => ['string', 'result'=>'resource', 'i'=>'int'], + 'mysql_thread_id' => ['int', 'link_identifier='=>'resource'], + 'mysql_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier='=>'resource'], + 'split' => ['list', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], + 'spliti' => ['list', 'pattern'=>'string', 'string'=>'string', 'limit='=>'int'], + 'sql_regcase' => ['string', 'string'=>'string'], + 'sybase_affected_rows' => ['int', 'link_identifier='=>'resource'], + 'sybase_close' => ['bool', 'link_identifier='=>'resource'], + 'sybase_connect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string', 'new='=>'bool'], + 'sybase_data_seek' => ['bool', 'result_identifier'=>'resource', 'row_number'=>'int'], + 'sybase_deadlock_retry_count' => ['void', 'retry_count'=>'int'], + 'sybase_fetch_array' => ['array', 'result'=>'resource'], + 'sybase_fetch_assoc' => ['array', 'result'=>'resource'], + 'sybase_fetch_field' => ['object', 'result'=>'resource', 'field_offset='=>'int'], + 'sybase_fetch_object' => ['object', 'result'=>'resource', 'object='=>'mixed'], + 'sybase_fetch_row' => ['array', 'result'=>'resource'], + 'sybase_field_seek' => ['bool', 'result'=>'resource', 'field_offset'=>'int'], + 'sybase_free_result' => ['bool', 'result'=>'resource'], + 'sybase_get_last_message' => ['string'], + 'sybase_min_client_severity' => ['void', 'severity'=>'int'], + 'sybase_min_error_severity' => ['void', 'severity'=>'int'], + 'sybase_min_message_severity' => ['void', 'severity'=>'int'], + 'sybase_min_server_severity' => ['void', 'severity'=>'int'], + 'sybase_num_fields' => ['int', 'result'=>'resource'], + 'sybase_num_rows' => ['int', 'result'=>'resource'], + 'sybase_pconnect' => ['resource', 'servername='=>'string', 'username='=>'string', 'password='=>'string', 'charset='=>'string', 'appname='=>'string'], + 'sybase_query' => ['mixed', 'query'=>'string', 'link_identifier='=>'resource'], + 'sybase_result' => ['string', 'result'=>'resource', 'row'=>'int', 'field'=>'mixed'], + 'sybase_select_db' => ['bool', 'database_name'=>'string', 'link_identifier='=>'resource'], + 'sybase_set_message_handler' => ['bool', 'handler'=>'callable', 'connection='=>'resource'], + 'sybase_unbuffered_query' => ['resource', 'query'=>'string', 'link_identifier'=>'resource', 'store_result='=>'bool'], + ], ]; diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php71_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php71_delta.php index 27e00718..d4d176bf 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php71_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php71_delta.php @@ -14,38 +14,54 @@ * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) */ return [ -'new' => [ -'Closure::fromCallable' => ['Closure', 'callback'=>'callable'], -'SQLite3::createFunction' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int', 'flags='=>'int'], -'curl_multi_errno' => ['int', 'multi_handle'=>'resource'], -'curl_share_errno' => ['int', 'share_handle'=>'resource'], -'curl_share_strerror' => ['string', 'error_code'=>'int'], -'get_headers' => ['array|false', 'url'=>'string', 'associative='=>'bool', 'context='=>'resource'], -'getenv\'1' => ['array'], -'getopt' => ['array|array|array>', 'short_options'=>'string', 'long_options='=>'array', '&w_rest_index='=>'int'], -'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], -'is_iterable' => ['bool', 'value'=>'mixed'], -'openssl_get_curve_names' => ['list'], -'pcntl_async_signals' => ['bool', 'enable='=>'bool'], -'pcntl_signal_get_handler' => ['int|callable', 'signal'=>'int'], -'pg_fetch_all' => ['array|false', 'result'=>'resource', 'mode='=>'int'], -'pg_last_error' => ['string', 'connection='=>'resource', 'operation='=>'int'], -'pg_select' => ['string|bool', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int', 'mode='=>'int'], -'sapi_windows_cp_conv' => ['string', 'in_codepage'=>'int|string', 'out_codepage'=>'int|string', 'subject'=>'string'], -'sapi_windows_cp_get' => ['int', 'kind='=>'string'], -'sapi_windows_cp_is_utf8' => ['bool'], -'sapi_windows_cp_set' => ['bool', 'codepage'=>'int'], -'session_create_id' => ['string', 'prefix='=>'string'], -'session_gc' => ['int|false'], -'unpack' => ['array|false', 'format'=>'string', 'string'=>'string', 'offset='=>'int'], -], -'old' => [ -'SQLite3::createFunction' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int'], -'get_headers' => ['array|false', 'url'=>'string', 'associative='=>'bool'], -'getopt' => ['array|array|array>', 'short_options'=>'string', 'long_options='=>'array'], -'pg_fetch_all' => ['array', 'result'=>'resource'], -'pg_last_error' => ['string', 'connection='=>'resource'], -'pg_select' => ['mixed', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int'], -'unpack' => ['array', 'format'=>'string', 'string'=>'string'], -], + 'added' => [ + 'Closure::fromCallable' => ['Closure', 'callback'=>'callable'], + 'curl_multi_errno' => ['int', 'multi_handle'=>'resource'], + 'curl_share_errno' => ['int', 'share_handle'=>'resource'], + 'curl_share_strerror' => ['string', 'error_code'=>'int'], + 'getenv\'1' => ['array'], + 'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], + 'is_iterable' => ['bool', 'value'=>'mixed'], + 'openssl_get_curve_names' => ['list'], + 'pcntl_async_signals' => ['bool', 'enable='=>'bool'], + 'pcntl_signal_get_handler' => ['int|callable', 'signal'=>'int'], + 'sapi_windows_cp_conv' => ['string', 'in_codepage'=>'int|string', 'out_codepage'=>'int|string', 'subject'=>'string'], + 'sapi_windows_cp_get' => ['int', 'kind='=>'string'], + 'sapi_windows_cp_is_utf8' => ['bool'], + 'sapi_windows_cp_set' => ['bool', 'codepage'=>'int'], + 'session_create_id' => ['string', 'prefix='=>'string'], + 'session_gc' => ['int|false'], + ], + 'changed' => [ + 'get_headers' => [ + 'old' => ['array|false', 'url'=>'string', 'associative='=>'bool'], + 'new' => ['array|false', 'url'=>'string', 'associative='=>'bool', 'context='=>'resource'], + ], + 'getopt' => [ + 'old' => ['array|array|array>', 'short_options'=>'string', 'long_options='=>'array'], + 'new' => ['array|array|array>', 'short_options'=>'string', 'long_options='=>'array', '&w_rest_index='=>'int'], + ], + 'pg_fetch_all' => [ + 'old' => ['array', 'result'=>'resource'], + 'new' => ['array|false', 'result'=>'resource', 'mode='=>'int'], + ], + 'pg_last_error' => [ + 'old' => ['string', 'connection='=>'resource'], + 'new' => ['string', 'connection='=>'resource', 'operation='=>'int'], + ], + 'pg_select' => [ + 'old' => ['mixed', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int'], + 'new' => ['string|bool', 'connection'=>'resource', 'table_name'=>'string', 'conditions'=>'array', 'flags='=>'int', 'mode='=>'int'], + ], + 'SQLite3::createFunction' => [ + 'old' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int'], + 'new' => ['bool', 'name'=>'string', 'callback'=>'callable', 'argCount='=>'int', 'flags='=>'int'], + ], + 'unpack' => [ + 'old' => ['array', 'format'=>'string', 'string'=>'string'], + 'new' => ['array|false', 'format'=>'string', 'string'=>'string', 'offset='=>'int'], + ], + ], + 'removed' => [ + ], ]; diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php index 63cf4e28..bcd65f52 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php72_delta.php @@ -14,136 +14,152 @@ * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) */ return [ -'new' => [ -'DOMNodeList::count' => ['int'], -'ftp_append' => ['bool', 'ftp'=>'resource', 'remote_filename'=>'string', 'local_filename'=>'string', 'mode='=>'int'], -'hash_copy' => ['HashContext', 'context'=>'HashContext'], -'hash_final' => ['string', 'context'=>'HashContext', 'binary='=>'bool'], -'hash_hmac_algos' => ['list'], -'hash_init' => ['HashContext', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'], -'hash_update' => ['bool', 'context'=>'HashContext', 'data'=>'string'], -'hash_update_file' => ['bool', 'context'=>'HashContext', 'filename'=>'string', 'stream_context='=>'?resource'], -'hash_update_stream' => ['int', 'context'=>'HashContext', 'stream'=>'resource', 'length='=>'int'], -'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], -'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'], -'imageopenpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imageresolution' => ['array|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], -'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], -'ldap_exop' => ['bool|resource', 'ldap'=>'resource', 'request_oid'=>'string', 'request_data='=>'string', 'controls='=>'array', '&w_response_data='=>'string', '&w_response_oid='=>'string'], -'ldap_exop_passwd' => ['bool|string', 'ldap'=>'resource', 'user='=>'string', 'old_password='=>'string', 'new_password='=>'string', '&controls='=>'array'], -'ldap_exop_refresh' => ['int|false', 'ldap'=>'resource', 'dn'=>'string', 'ttl'=>'int'], -'ldap_exop_whoami' => ['string|false', 'ldap'=>'resource'], -'ldap_parse_exop' => ['bool', 'ldap'=>'resource', 'result'=>'resource', '&w_response_data='=>'string', '&w_response_oid='=>'string'], -'mb_chr' => ['string|false', 'codepoint'=>'int', 'encoding='=>'string'], -'mb_ord' => ['int|false', 'string'=>'string', 'encoding='=>'string'], -'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'], -'oci_register_taf_callback' => ['bool', 'connection'=>'resource', 'callback'=>'callable'], -'oci_set_call_timeout' => ['bool', 'connection'=>'resource', 'timeout'=>'int'], -'oci_unregister_taf_callback' => ['bool', 'connection'=>'resource'], -'ReflectionClass::isIterable' => ['bool'], -'SQLite3::openBlob' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string', 'flags='=>'int'], -'sapi_windows_vt100_support' => ['bool', 'stream'=>'resource', 'enable='=>'bool'], -'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'], -'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'], -'socket_addrinfo_explain' => ['array', 'address'=>'resource'], -'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], -'sodium_add' => ['void', '&string1'=>'string', 'string2'=>'string'], -'sodium_base642bin' => ['string', 'string'=>'string', 'id'=>'int', 'ignore='=>'string'], -'sodium_bin2base64' => ['string', 'string'=>'string', 'id'=>'int'], -'sodium_bin2hex' => ['string', 'string'=>'string'], -'sodium_compare' => ['int', 'string1'=>'string', 'string2'=>'string'], -'sodium_crypto_aead_aes256gcm_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_aes256gcm_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_aes256gcm_is_available' => ['bool'], -'sodium_crypto_aead_aes256gcm_keygen' => ['string'], -'sodium_crypto_aead_chacha20poly1305_decrypt' => ['string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_chacha20poly1305_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_chacha20poly1305_ietf_decrypt' => ['false|string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_chacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_chacha20poly1305_ietf_keygen' => ['string'], -'sodium_crypto_aead_chacha20poly1305_keygen' => ['string'], -'sodium_crypto_aead_xchacha20poly1305_ietf_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_xchacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_aead_xchacha20poly1305_ietf_keygen' => ['string'], -'sodium_crypto_auth' => ['string', 'message'=>'string', 'key'=>'string'], -'sodium_crypto_auth_keygen' => ['string'], -'sodium_crypto_auth_verify' => ['bool', 'mac'=>'string', 'message'=>'string', 'key'=>'string'], -'sodium_crypto_box' => ['string', 'message'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], -'sodium_crypto_box_keypair' => ['string'], -'sodium_crypto_box_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], -'sodium_crypto_box_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], -'sodium_crypto_box_publickey' => ['string', 'key_pair'=>'string'], -'sodium_crypto_box_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], -'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'key_pair'=>'string'], -'sodium_crypto_box_seal_open' => ['string|false', 'ciphertext'=>'string', 'key_pair'=>'string'], -'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_keygen' => ['string'], -'sodium_crypto_generichash_update' => ['bool', '&state'=>'string', 'message'=>'string'], -'sodium_crypto_kdf_derive_from_key' => ['string', 'subkey_length'=>'int', 'subkey_id'=>'int', 'context'=>'string', 'key'=>'string'], -'sodium_crypto_kdf_keygen' => ['string'], -'sodium_crypto_kx_client_session_keys' => ['array', 'client_key_pair'=>'string', 'server_key'=>'string'], -'sodium_crypto_kx_keypair' => ['string'], -'sodium_crypto_kx_publickey' => ['string', 'key_pair'=>'string'], -'sodium_crypto_kx_secretkey' => ['string', 'key_pair'=>'string'], -'sodium_crypto_kx_seed_keypair' => ['string', 'seed'=>'string'], -'sodium_crypto_kx_server_session_keys' => ['array', 'server_key_pair'=>'string', 'client_key'=>'string'], -'sodium_crypto_pwhash' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int', 'algo='=>'int'], -'sodium_crypto_pwhash_scryptsalsa208sha256' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], -'sodium_crypto_pwhash_scryptsalsa208sha256_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], -'sodium_crypto_pwhash_scryptsalsa208sha256_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'], -'sodium_crypto_pwhash_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], -'sodium_crypto_pwhash_str_needs_rehash' => ['bool', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], -'sodium_crypto_pwhash_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'], -'sodium_crypto_scalarmult' => ['string', 'n'=>'string', 'p'=>'string'], -'sodium_crypto_scalarmult_base' => ['string', 'secret_key'=>'string'], -'sodium_crypto_secretbox' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_secretbox_keygen' => ['string'], -'sodium_crypto_secretbox_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key'=>'string'], -'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', '&state'=>'string', 'ciphertext'=>'string', 'additional_data='=>'string'], -'sodium_crypto_secretstream_xchacha20poly1305_push' => ['string', '&state'=>'string', 'message'=>'string', 'additional_data='=>'string', 'tag='=>'int'], -'sodium_crypto_secretstream_xchacha20poly1305_rekey' => ['void', '&state'=>'string'], -'sodium_crypto_shorthash' => ['string', 'message'=>'string', 'key'=>'string'], -'sodium_crypto_shorthash_keygen' => ['string'], -'sodium_crypto_sign' => ['string', 'message'=>'string', 'secret_key'=>'string'], -'sodium_crypto_sign_detached' => ['string', 'message'=>'string', 'secret_key'=>'string'], -'sodium_crypto_sign_ed25519_pk_to_curve25519' => ['string', 'public_key'=>'string'], -'sodium_crypto_sign_ed25519_sk_to_curve25519' => ['string', 'secret_key'=>'string'], -'sodium_crypto_sign_keypair' => ['string'], -'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], -'sodium_crypto_sign_open' => ['string|false', 'ciphertext'=>'string', 'public_key'=>'string'], -'sodium_crypto_sign_publickey' => ['string', 'key_pair'=>'string'], -'sodium_crypto_sign_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], -'sodium_crypto_sign_secretkey' => ['string', 'key_pair'=>'string'], -'sodium_crypto_sign_seed_keypair' => ['string', 'seed'=>'string'], -'sodium_crypto_sign_verify_detached' => ['bool', 'signature'=>'string', 'message'=>'string', 'public_key'=>'string'], -'sodium_crypto_stream' => ['string', 'length'=>'int', 'nonce'=>'string', 'key'=>'string'], -'sodium_crypto_stream_keygen' => ['string'], -'sodium_crypto_stream_xor' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'], -'sodium_hex2bin' => ['string', 'string'=>'string', 'ignore='=>'string'], -'sodium_increment' => ['void', '&string'=>'string'], -'sodium_memcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], -'sodium_memzero' => ['void', '&string'=>'string'], -'sodium_pad' => ['string', 'string'=>'string', 'length'=>'int'], -'sodium_unpad' => ['string', 'string'=>'string', 'block_size'=>'int'], -'stream_isatty' => ['bool', 'stream'=>'resource'], -'ZipArchive::count' => ['int'], -'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'string', 'password='=>'string'], -'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'], -], -'old' => [ -'hash_copy' => ['resource', 'context'=>'resource'], -'hash_final' => ['string', 'context'=>'resource', 'binary='=>'bool'], -'hash_init' => ['resource', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'], -'hash_update' => ['bool', 'context'=>'resource', 'data'=>'string'], -'hash_update_file' => ['bool', 'context'=>'resource', 'filename'=>'string', 'stream_context='=>'?resource'], -'hash_update_stream' => ['int', 'context'=>'resource', 'stream'=>'resource', 'length='=>'int'], -'SQLite3::openBlob' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string'], -], + 'added' => [ + 'DOMNodeList::count' => ['int'], + 'ftp_append' => ['bool', 'ftp'=>'resource', 'remote_filename'=>'string', 'local_filename'=>'string', 'mode='=>'int'], + 'hash_hmac_algos' => ['list'], + 'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], + 'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'], + 'imageopenpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], + 'imageresolution' => ['array|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], + 'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'], + 'ldap_exop' => ['bool|resource', 'ldap'=>'resource', 'request_oid'=>'string', 'request_data='=>'string', 'controls='=>'array', '&w_response_data='=>'string', '&w_response_oid='=>'string'], + 'ldap_exop_passwd' => ['bool|string', 'ldap'=>'resource', 'user='=>'string', 'old_password='=>'string', 'new_password='=>'string', '&controls='=>'array'], + 'ldap_exop_refresh' => ['int|false', 'ldap'=>'resource', 'dn'=>'string', 'ttl'=>'int'], + 'ldap_exop_whoami' => ['string|false', 'ldap'=>'resource'], + 'ldap_parse_exop' => ['bool', 'ldap'=>'resource', 'result'=>'resource', '&w_response_data='=>'string', '&w_response_oid='=>'string'], + 'mb_chr' => ['string|false', 'codepoint'=>'int', 'encoding='=>'string'], + 'mb_ord' => ['int|false', 'string'=>'string', 'encoding='=>'string'], + 'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'], + 'oci_register_taf_callback' => ['bool', 'connection'=>'resource', 'callback'=>'callable'], + 'oci_set_call_timeout' => ['bool', 'connection'=>'resource', 'timeout'=>'int'], + 'oci_unregister_taf_callback' => ['bool', 'connection'=>'resource'], + 'ReflectionClass::isIterable' => ['bool'], + 'sapi_windows_vt100_support' => ['bool', 'stream'=>'resource', 'enable='=>'bool'], + 'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'], + 'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'], + 'socket_addrinfo_explain' => ['array', 'address'=>'resource'], + 'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], + 'sodium_add' => ['void', '&string1'=>'string', 'string2'=>'string'], + 'sodium_base642bin' => ['string', 'string'=>'string', 'id'=>'int', 'ignore='=>'string'], + 'sodium_bin2base64' => ['string', 'string'=>'string', 'id'=>'int'], + 'sodium_bin2hex' => ['string', 'string'=>'string'], + 'sodium_compare' => ['int', 'string1'=>'string', 'string2'=>'string'], + 'sodium_crypto_aead_aes256gcm_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_aes256gcm_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_aes256gcm_is_available' => ['bool'], + 'sodium_crypto_aead_aes256gcm_keygen' => ['string'], + 'sodium_crypto_aead_chacha20poly1305_decrypt' => ['string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_chacha20poly1305_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_chacha20poly1305_ietf_decrypt' => ['false|string', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_chacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_chacha20poly1305_ietf_keygen' => ['string'], + 'sodium_crypto_aead_chacha20poly1305_keygen' => ['string'], + 'sodium_crypto_aead_xchacha20poly1305_ietf_decrypt' => ['string|false', 'ciphertext'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_xchacha20poly1305_ietf_encrypt' => ['string', 'message'=>'string', 'additional_data'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_aead_xchacha20poly1305_ietf_keygen' => ['string'], + 'sodium_crypto_auth' => ['string', 'message'=>'string', 'key'=>'string'], + 'sodium_crypto_auth_keygen' => ['string'], + 'sodium_crypto_auth_verify' => ['bool', 'mac'=>'string', 'message'=>'string', 'key'=>'string'], + 'sodium_crypto_box' => ['string', 'message'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], + 'sodium_crypto_box_keypair' => ['string'], + 'sodium_crypto_box_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], + 'sodium_crypto_box_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key_pair'=>'string'], + 'sodium_crypto_box_publickey' => ['string', 'key_pair'=>'string'], + 'sodium_crypto_box_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], + 'sodium_crypto_box_seal' => ['string', 'message'=>'string', 'public_key'=>'string'], + 'sodium_crypto_box_seal_open' => ['string|false', 'ciphertext'=>'string', 'key_pair'=>'string'], + '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_keygen' => ['string'], + 'sodium_crypto_generichash_update' => ['bool', '&state'=>'string', 'message'=>'string'], + 'sodium_crypto_kdf_derive_from_key' => ['string', 'subkey_length'=>'int', 'subkey_id'=>'int', 'context'=>'string', 'key'=>'string'], + 'sodium_crypto_kdf_keygen' => ['string'], + 'sodium_crypto_kx_client_session_keys' => ['array', 'client_key_pair'=>'string', 'server_key'=>'string'], + 'sodium_crypto_kx_keypair' => ['string'], + 'sodium_crypto_kx_publickey' => ['string', 'key_pair'=>'string'], + 'sodium_crypto_kx_secretkey' => ['string', 'key_pair'=>'string'], + 'sodium_crypto_kx_seed_keypair' => ['string', 'seed'=>'string'], + 'sodium_crypto_kx_server_session_keys' => ['array', 'server_key_pair'=>'string', 'client_key'=>'string'], + 'sodium_crypto_pwhash' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int', 'algo='=>'int'], + 'sodium_crypto_pwhash_scryptsalsa208sha256' => ['string', 'length'=>'int', 'password'=>'string', 'salt'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], + 'sodium_crypto_pwhash_scryptsalsa208sha256_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], + 'sodium_crypto_pwhash_scryptsalsa208sha256_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'], + 'sodium_crypto_pwhash_str' => ['string', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], + 'sodium_crypto_pwhash_str_needs_rehash' => ['bool', 'password'=>'string', 'opslimit'=>'int', 'memlimit'=>'int'], + 'sodium_crypto_pwhash_str_verify' => ['bool', 'hash'=>'string', 'password'=>'string'], + 'sodium_crypto_scalarmult' => ['string', 'n'=>'string', 'p'=>'string'], + 'sodium_crypto_scalarmult_base' => ['string', 'secret_key'=>'string'], + 'sodium_crypto_secretbox' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_secretbox_keygen' => ['string'], + 'sodium_crypto_secretbox_open' => ['string|false', 'ciphertext'=>'string', 'nonce'=>'string', 'key'=>'string'], + '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', '&state'=>'string', 'ciphertext'=>'string', 'additional_data='=>'string'], + 'sodium_crypto_secretstream_xchacha20poly1305_push' => ['string', '&state'=>'string', 'message'=>'string', 'additional_data='=>'string', 'tag='=>'int'], + 'sodium_crypto_secretstream_xchacha20poly1305_rekey' => ['void', '&state'=>'string'], + 'sodium_crypto_shorthash' => ['string', 'message'=>'string', 'key'=>'string'], + 'sodium_crypto_shorthash_keygen' => ['string'], + 'sodium_crypto_sign' => ['string', 'message'=>'string', 'secret_key'=>'string'], + 'sodium_crypto_sign_detached' => ['string', 'message'=>'string', 'secret_key'=>'string'], + 'sodium_crypto_sign_ed25519_pk_to_curve25519' => ['string', 'public_key'=>'string'], + 'sodium_crypto_sign_ed25519_sk_to_curve25519' => ['string', 'secret_key'=>'string'], + 'sodium_crypto_sign_keypair' => ['string'], + 'sodium_crypto_sign_keypair_from_secretkey_and_publickey' => ['string', 'secret_key'=>'string', 'public_key'=>'string'], + 'sodium_crypto_sign_open' => ['string|false', 'signed_message'=>'string', 'public_key'=>'string'], + 'sodium_crypto_sign_publickey' => ['string', 'key_pair'=>'string'], + 'sodium_crypto_sign_publickey_from_secretkey' => ['string', 'secret_key'=>'string'], + 'sodium_crypto_sign_secretkey' => ['string', 'key_pair'=>'string'], + 'sodium_crypto_sign_seed_keypair' => ['string', 'seed'=>'string'], + 'sodium_crypto_sign_verify_detached' => ['bool', 'signature'=>'string', 'message'=>'string', 'public_key'=>'string'], + 'sodium_crypto_stream' => ['string', 'length'=>'int', 'nonce'=>'string', 'key'=>'string'], + 'sodium_crypto_stream_keygen' => ['string'], + 'sodium_crypto_stream_xor' => ['string', 'message'=>'string', 'nonce'=>'string', 'key'=>'string'], + 'sodium_hex2bin' => ['string', 'string'=>'string', 'ignore='=>'string'], + 'sodium_increment' => ['void', '&string'=>'string'], + 'sodium_memcmp' => ['int', 'string1'=>'string', 'string2'=>'string'], + 'sodium_memzero' => ['void', '&string'=>'string'], + 'sodium_pad' => ['string', 'string'=>'string', 'block_size'=>'int'], + 'sodium_unpad' => ['string', 'string'=>'string', 'block_size'=>'int'], + 'stream_isatty' => ['bool', 'stream'=>'resource'], + 'ZipArchive::count' => ['int'], + 'ZipArchive::setEncryptionIndex' => ['bool', 'index'=>'int', 'method'=>'int', 'password='=>'string'], + 'ZipArchive::setEncryptionName' => ['bool', 'name'=>'string', 'method'=>'int', 'password='=>'string'], + ], + 'changed' => [ + 'hash_copy' => [ + 'old' => ['resource', 'context'=>'resource'], + 'new' => ['HashContext', 'context'=>'HashContext'], + ], + 'hash_final' => [ + 'old' => ['string', 'context'=>'resource', 'binary='=>'bool'], + 'new' => ['string', 'context'=>'HashContext', 'binary='=>'bool'], + ], + 'hash_init' => [ + 'old' => ['resource', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'], + 'new' => ['HashContext', 'algo'=>'string', 'flags='=>'int', 'key='=>'string'], + ], + 'hash_update' => [ + 'old' => ['bool', 'context'=>'resource', 'data'=>'string'], + 'new' => ['bool', 'context'=>'HashContext', 'data'=>'string'], + ], + 'hash_update_file' => [ + 'old' => ['bool', 'context'=>'resource', 'filename'=>'string', 'stream_context='=>'?resource'], + 'new' => ['bool', 'context'=>'HashContext', 'filename'=>'string', 'stream_context='=>'?resource'], + ], + 'hash_update_stream' => [ + 'old' => ['int', 'context'=>'resource', 'stream'=>'resource', 'length='=>'int'], + 'new' => ['int', 'context'=>'HashContext', 'stream'=>'resource', 'length='=>'int'], + ], + 'SQLite3::openBlob' => [ + 'old' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string'], + 'new' => ['resource|false', 'table'=>'string', 'column'=>'string', 'rowid'=>'int', 'database='=>'string', 'flags='=>'int'], + ], + ], + 'removed' => [ + ], ]; diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php73_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php73_delta.php index b712bf73..bdf34bc6 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php73_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php73_delta.php @@ -16,43 +16,45 @@ * TODO: Fix GMP signatures for gmp_div in 7.2, update other deltas. */ return [ -'new' => [ -'array_key_first' => ['int|string|null', 'array'=>'array'], -'array_key_last' => ['int|string|null', 'array'=>'array'], -'DateTime::createFromImmutable' => ['static', 'object'=>'DateTimeImmutable'], -'fpm_get_status' => ['array|false'], -'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], -'gmp_lcm' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], -'gmp_perfect_power' => ['bool', 'num'=>'GMP|string|int'], -'gmp_kronecker' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], -'gc_status' => ['array{runs:int,collected:int,threshold:int,roots:int}'], -'hrtime' => ['array{0:int,1:int}|int|false', 'as_number='=>'bool'], -'is_countable' => ['bool', 'value'=>'mixed'], -'JsonException::__clone' => ['void'], -'JsonException::__construct' => ['void'], -'JsonException::__toString' => ['string'], -'JsonException::__wakeup' => ['void'], -'JsonException::getCode' => ['int'], -'JsonException::getFile' => ['string'], -'JsonException::getLine' => ['int'], -'JsonException::getMessage' => ['string'], -'JsonException::getPrevious' => ['?Throwable'], -'JsonException::getTrace' => ['array>'], -'JsonException::getTraceAsString' => ['string'], -'ldap_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], -'ldap_bind_ext' => ['resource|false', 'ldap'=>'resource', 'dn='=>'string', 'password='=>'?string', 'controls='=>'?array'], -'ldap_mod_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], -'ldap_mod_del_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], -'ldap_mod_replace_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], -'ldap_rename_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'new_rdn'=>'string', 'new_parent'=>'string', 'delete_old_rdn'=>'bool', 'controls='=>'array'], -'net_get_interfaces' => ['array>|false'], -'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], -'session_set_cookie_params\'1' => ['bool', 'lifetime_or_options'=>'array{lifetime?:int,path?:string,domain?:?string,secure?:bool,httponly?:bool}'], -'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], -'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'], -'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], -'SplPriorityQueue::isCorrupted' => ['bool'], -], -'old' => [ -], + 'added' => [ + 'array_key_first' => ['int|string|null', 'array'=>'array'], + 'array_key_last' => ['int|string|null', 'array'=>'array'], + 'DateTime::createFromImmutable' => ['static', 'object'=>'DateTimeImmutable'], + 'fpm_get_status' => ['array|false'], + 'gc_status' => ['array{runs:int,collected:int,threshold:int,roots:int}'], + 'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], + 'gmp_kronecker' => ['int', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], + 'gmp_lcm' => ['GMP', 'num1'=>'GMP|string|int', 'num2'=>'GMP|string|int'], + 'gmp_perfect_power' => ['bool', 'num'=>'GMP|string|int'], + 'hrtime' => ['array{0:int,1:int}|int|false', 'as_number='=>'bool'], + 'is_countable' => ['bool', 'value'=>'mixed'], + 'JsonException::__clone' => ['void'], + 'JsonException::__construct' => ['void'], + 'JsonException::__toString' => ['string'], + 'JsonException::__wakeup' => ['void'], + 'JsonException::getCode' => ['int'], + 'JsonException::getFile' => ['string'], + 'JsonException::getLine' => ['int'], + 'JsonException::getMessage' => ['string'], + 'JsonException::getPrevious' => ['?Throwable'], + 'JsonException::getTrace' => ['array>'], + 'JsonException::getTraceAsString' => ['string'], + 'ldap_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], + 'ldap_bind_ext' => ['resource|false', 'ldap'=>'resource', 'dn='=>'string', 'password='=>'?string', 'controls='=>'?array'], + 'ldap_mod_add_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], + 'ldap_mod_del_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], + 'ldap_mod_replace_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'entry'=>'array', 'controls='=>'array'], + 'ldap_rename_ext' => ['resource|false', 'ldap'=>'resource', 'dn'=>'string', 'new_rdn'=>'string', 'new_parent'=>'string', 'delete_old_rdn'=>'bool', 'controls='=>'array'], + 'net_get_interfaces' => ['array>|false'], + 'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], + 'session_set_cookie_params\'1' => ['bool', 'lifetime_or_options'=>'array{lifetime?:int,path?:string,domain?:?string,secure?:bool,httponly?:bool}'], + 'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], + 'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'], + 'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], + 'SplPriorityQueue::isCorrupted' => ['bool'], + ], + 'changed' => [ + ], + 'removed' => [ + ], ]; diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php74_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php74_delta.php index bd058bf2..00257ce1 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php74_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php74_delta.php @@ -14,50 +14,64 @@ * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) */ return [ -'new' => [ -'DatePeriod::getRecurrences' => ['int'], -'FFI::addr' => ['FFI\CData', '&ptr'=>'FFI\CData'], -'FFI::alignof' => ['int', '&ptr'=>'mixed'], -'FFI::arrayType' => ['FFI\CType', 'type'=>'string|FFI\CType', 'dimensions'=>'list'], -'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', '&ptr'=>''], -'FFI::cdef' => ['FFI', 'code='=>'string', 'lib='=>'?string'], -'FFI::free' => ['void', '&ptr'=>'FFI\CData'], -'FFI::isNull' => ['bool', '&ptr'=>'FFI\CData'], -'FFI::load' => ['FFI', 'filename'=>'string'], -'FFI::memcmp' => ['int', '&ptr1'=>'FFI\CData|string', '&ptr2'=>'FFI\CData|string', 'size'=>'int'], -'FFI::memcpy' => ['void', '&to'=>'FFI\CData', '&from'=>'string|FFI\CData', 'size'=>'int'], -'FFI::memset' => ['void', '&ptr'=>'FFI\CData', 'value'=>'int', 'size'=>'int'], -'FFI::new' => ['FFI\CData', 'type'=>'string|FFI\CType', 'owned='=>'bool', 'persistent='=>'bool'], -'FFI::scope' => ['FFI', 'name'=>'string'], -'FFI::sizeof' => ['int', '&ptr'=>'FFI\CData|FFI\CType'], -'FFI::string' => ['string', '&ptr'=>'FFI\CData', 'size='=>'int'], -'FFI::typeof' => ['FFI\CType', '&ptr'=>'FFI\CData'], -'FFI::type' => ['FFI\CType', 'type'=>'string'], -'get_mangled_object_vars' => ['array', 'object'=>'object'], -'imagecreatefromtga' => ['resource|false', 'filename'=>'string'], -'openssl_x509_verify' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'], -'password_algos' => ['list'], -'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], -'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], -'pcntl_unshare' => ['bool', 'flags'=>'int'], -'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], -'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], -'proc_open' => ['resource|false', 'command'=>'string|string[]', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], -'ReflectionReference::fromArrayElement' => ['?ReflectionReference', 'array'=>'array', 'key'=>'int|string'], -'ReflectionReference::getId' => ['string'], -'sapi_windows_set_ctrl_handler' => ['bool', 'handler'=>'callable(int):void', 'add='=>'bool'], -'SQLite3Stmt::getSQL' => ['string', 'expand='=>'bool'], -'SQLite3::backup' => ['bool', 'destination'=>'SQLite3', 'sourceDatabase='=>'string', 'destinationDatabase='=>'string'], -'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string|string[]'], -'WeakReference::create' => ['WeakReference', 'object'=>'object'], -'WeakReference::get' => ['?object'], -], -'old' => [ -'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'int', 'options='=>'array'], -'password_needs_rehash' => ['bool', 'hash'=>'string', 'algo'=>'int', 'options='=>'array'], -'preg_replace_callback' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], -'preg_replace_callback_array' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], -'proc_open' => ['resource|false', 'command'=>'string', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], -'strip_tags' => ['string', 'string'=>'string', 'allowed_tags='=>'string'], -], + 'added' => [ + 'DatePeriod::getRecurrences' => ['int'], + 'FFI::addr' => ['FFI\CData', '&ptr'=>'FFI\CData'], + 'FFI::alignof' => ['int', '&ptr'=>'mixed'], + 'FFI::arrayType' => ['FFI\CType', 'type'=>'string|FFI\CType', 'dimensions'=>'list'], + 'FFI::cast' => ['FFI\CData', 'type'=>'string|FFI\CType', '&ptr'=>''], + 'FFI::cdef' => ['FFI', 'code='=>'string', 'lib='=>'?string'], + 'FFI::free' => ['void', '&ptr'=>'FFI\CData'], + 'FFI::isNull' => ['bool', '&ptr'=>'FFI\CData'], + 'FFI::load' => ['FFI', 'filename'=>'string'], + 'FFI::memcmp' => ['int', '&ptr1'=>'FFI\CData|string', '&ptr2'=>'FFI\CData|string', 'size'=>'int'], + 'FFI::memcpy' => ['void', '&to'=>'FFI\CData', '&from'=>'string|FFI\CData', 'size'=>'int'], + 'FFI::memset' => ['void', '&ptr'=>'FFI\CData', 'value'=>'int', 'size'=>'int'], + 'FFI::new' => ['FFI\CData', 'type'=>'string|FFI\CType', 'owned='=>'bool', 'persistent='=>'bool'], + 'FFI::scope' => ['FFI', 'name'=>'string'], + 'FFI::sizeof' => ['int', '&ptr'=>'FFI\CData|FFI\CType'], + 'FFI::string' => ['string', '&ptr'=>'FFI\CData', 'size='=>'int'], + 'FFI::type' => ['FFI\CType', 'type'=>'string'], + 'FFI::typeof' => ['FFI\CType', '&ptr'=>'FFI\CData'], + 'get_mangled_object_vars' => ['array', 'object'=>'object'], + 'imagecreatefromtga' => ['resource|false', 'filename'=>'string'], + 'openssl_x509_verify' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'], + 'password_algos' => ['list'], + 'pcntl_unshare' => ['bool', 'flags'=>'int'], + 'ReflectionReference::fromArrayElement' => ['?ReflectionReference', 'array'=>'array', 'key'=>'int|string'], + 'ReflectionReference::getId' => ['string'], + 'sapi_windows_set_ctrl_handler' => ['bool', 'handler'=>'callable(int):void', 'add='=>'bool'], + 'SQLite3::backup' => ['bool', 'destination'=>'SQLite3', 'sourceDatabase='=>'string', 'destinationDatabase='=>'string'], + 'SQLite3Stmt::getSQL' => ['string', 'expand='=>'bool'], + 'WeakReference::create' => ['WeakReference', 'object'=>'object'], + 'WeakReference::get' => ['?object'], + ], + 'changed' => [ + 'password_hash' => [ + 'old' => ['string|false|null', 'password'=>'string', 'algo'=>'int', 'options='=>'array'], + 'new' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], + ], + 'password_needs_rehash' => [ + 'old' => ['bool', 'hash'=>'string', 'algo'=>'int', 'options='=>'array'], + 'new' => ['bool', 'hash'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], + ], + 'preg_replace_callback' => [ + 'old' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], + 'new' => ['string|string[]', 'pattern'=>'string|array', 'callback'=>'callable(array):string', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], + ], + 'preg_replace_callback_array' => [ + 'old' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int'], + 'new' => ['string|string[]', 'pattern'=>'array', 'subject'=>'string|array', 'limit='=>'int', '&w_count='=>'int', 'flags='=>'int'], + ], + 'proc_open' => [ + 'old' => ['resource|false', 'command'=>'string', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], + 'new' => ['resource|false', 'command'=>'string|string[]', 'descriptor_spec'=>'array', '&w_pipes'=>'resource[]', 'cwd='=>'?string', 'env_vars='=>'?array', 'options='=>'array'], + ], + 'strip_tags' => [ + 'old' => ['string', 'string'=>'string', 'allowed_tags='=>'string'], + 'new' => ['string', 'string'=>'string', 'allowed_tags='=>'string|string[]'], + ], + ], + 'removed' => [ + ], ]; diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php80_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php80_delta.php index a94a0fbb..e18ebbb7 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php80_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php80_delta.php @@ -3,899 +3,1693 @@ /** * This contains the information needed to convert the function signatures for php 8.0 to php 7.4 (and vice versa) * - * This has two sections. - * The 'new' section contains function/method names from FunctionSignatureMap (And alternates, if applicable) that do not exist in php7.4 or have different signatures in php 8.0. - * If they were just updated, the function/method will be present in the 'added' signatures. - * The 'old' signatures contains the signatures that are different in php 7.4. - * Functions are expected to be removed only in major releases of php. - * - * TODO: Add remaining functions + * This file has three sections. + * The 'added' section contains function/method names from FunctionSignatureMap (And alternates, if applicable) that do not exist in php 7.4 + * The 'removed' section contains the signatures that were removed in php 8.0 + * The 'changed' section contains functions for which the signature has changed for php 8.0. + * Each function in the 'changed' section has an 'old' and a 'new' section, + * representing the function as it was in PHP 7.4 and in PHP 8.0, respectively * * @see FunctionSignatureMap.php * * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) */ return [ -'new' => [ -'apache_request_headers' => ['array'], -'array_combine' => ['associative-array', 'keys'=>'string[]|int[]', 'values'=>'array'], -'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array'], -'bcdiv' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], -'bcmod' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], -'bcpowmod' => ['string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], -'collator_get_strength' => ['int', 'object'=>'collator'], -'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'true'], -'count_chars' => ['array|string', 'string'=>'string', 'mode='=>'int'], -'curl_close' => ['void', 'handle'=>'CurlHandle'], -'curl_copy_handle' => ['CurlHandle', 'handle'=>'CurlHandle'], -'curl_errno' => ['int', 'handle'=>'CurlHandle'], -'curl_error' => ['string', 'handle'=>'CurlHandle'], -'curl_escape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], -'curl_exec' => ['bool|string', 'handle'=>'CurlHandle'], -'curl_getinfo' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int'], -'curl_init' => ['CurlHandle|false', 'url='=>'string'], -'curl_multi_add_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], -'curl_multi_close' => ['void', 'multi_handle'=>'CurlMultiHandle'], -'curl_multi_errno' => ['int', 'multi_handle'=>'CurlMultiHandle'], -'curl_multi_exec' => ['int', 'multi_handle'=>'CurlMultiHandle', '&w_still_running'=>'int'], -'curl_multi_getcontent' => ['string', 'handle'=>'CurlHandle'], -'curl_multi_info_read' => ['array|false', 'multi_handle'=>'CurlMultiHandle', '&w_queued_messages='=>'int'], -'curl_multi_init' => ['CurlMultiHandle'], -'curl_multi_remove_handle' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], -'curl_multi_select' => ['int', 'multi_handle'=>'CurlMultiHandle', 'timeout='=>'float'], -'curl_multi_setopt' => ['bool', 'multi_handle'=>'CurlMultiHandle', 'option'=>'int', 'value'=>'mixed'], -'curl_pause' => ['int', 'handle'=>'CurlHandle', 'flags'=>'int'], -'curl_reset' => ['void', 'handle'=>'CurlHandle'], -'curl_setopt' => ['bool', 'handle'=>'CurlHandle', 'option'=>'int', 'value'=>'mixed'], -'curl_setopt_array' => ['bool', 'handle'=>'CurlHandle', 'options'=>'array'], -'curl_share_close' => ['void', 'share_handle'=>'CurlShareHandle'], -'curl_share_errno' => ['int', 'share_handle'=>'CurlShareHandle'], -'curl_share_init' => ['CurlShareHandle'], -'curl_share_setopt' => ['bool', 'share_handle'=>'CurlShareHandle', 'option'=>'int', 'value'=>'mixed'], -'curl_unescape' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], -'date_add' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'], -'date_date_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], -'date_diff' => ['DateInterval', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], -'date_format' => ['string', 'object'=>'DateTimeInterface', 'format'=>'string'], -'date_isodate_set' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], -'date_parse' => ['array', 'datetime'=>'string'], -'date_sub' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'], -'date_sun_info' => ['array', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], -'date_time_set' => ['DateTime', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], -'date_timestamp_set' => ['DateTime', 'object'=>'DateTime', 'timestamp'=>'int'], -'date_timezone_set' => ['DateTime', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], -'debug_backtrace' => ['list', 'options='=>'int', 'limit='=>'int'], -'debug_print_backtrace' => ['void', 'options='=>'int', 'limit='=>'int'], -'deflate_add' => ['string|false', 'context'=>'DeflateContext', 'data'=>'string', 'flush_mode='=>'int'], -'deflate_init' => ['DeflateContext|false', 'encoding'=>'int', 'options='=>'array'], -'dom_import_simplexml' => ['DOMElement|null', 'node'=>'SimpleXMLElement'], -'easter_date' => ['int', 'year='=>'?int', 'mode='=>'int'], -'enchant_broker_describe' => ['array', 'broker'=>'EnchantBroker'], -'enchant_broker_dict_exists' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string'], -'enchant_broker_free' => ['bool', 'broker'=>'EnchantBroker'], -'enchant_broker_free_dict' => ['bool', 'dictionary'=>'EnchantDictionary'], -'enchant_broker_get_dict_path' => ['string', 'broker'=>'EnchantBroker', 'type'=>'int'], -'enchant_broker_get_error' => ['string|false', 'broker'=>'EnchantBroker'], -'enchant_broker_init' => ['EnchantBroker|false'], -'enchant_broker_list_dicts' => ['array', 'broker'=>'EnchantBroker'], -'enchant_broker_request_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'tag'=>'string'], -'enchant_broker_request_pwl_dict' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'filename'=>'string'], -'enchant_broker_set_dict_path' => ['bool', 'broker'=>'EnchantBroker', 'type'=>'int', 'path'=>'string'], -'enchant_broker_set_ordering' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string', 'ordering'=>'string'], -'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], -'enchant_dict_add_to_session' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], -'enchant_dict_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], -'enchant_dict_describe' => ['array', 'dictionary'=>'EnchantDictionary'], -'enchant_dict_get_error' => ['string', 'dictionary'=>'EnchantDictionary'], -'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], -'enchant_dict_quick_check' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string', '&w_suggestions='=>'array'], -'enchant_dict_store_replacement' => ['void', 'dictionary'=>'EnchantDictionary', 'misspelled'=>'string', 'correct'=>'string'], -'enchant_dict_suggest' => ['array', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], -'fdiv' => ['float', 'num1'=>'float', 'num2'=>'float'], -'fpassthru' => ['int', 'stream'=>'resource'], -'get_debug_type' => ['string', 'value'=>'mixed'], -'get_resource_id' => ['int', 'resource'=>'resource'], -'gmdate' => ['string', 'format'=>'string', 'timestamp='=>'int'], -'gmmktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], -'gmp_binomial' => ['GMP', 'n'=>'GMP|string|int', 'k'=>'int'], -'gmp_export' => ['string', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], -'gmp_import' => ['GMP', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], -'gmp_random' => ['GMP', 'limiter='=>'int'], -'gmp_random_seed' => ['void', 'seed'=>'GMP|string|int'], -'gzpassthru' => ['int', 'stream'=>'resource'], -'hash_hkdf' => ['string', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], -'imageaffine' => ['false|GdImage', 'image'=>'GdImage', 'affine'=>'array', 'clip='=>'array'], -'imagealphablending' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], -'imageantialias' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], -'imagearc' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], -'imagebmp' => ['bool', 'image'=>'GdImage', 'file='=>'null|resource|string', 'compressed='=>'bool'], -'imagechar' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], -'imagecharup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], -'imagecolorallocatealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorallocate' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorat' => ['int|false', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int'], -'imagecolorclosestalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorclosesthwb' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorclosest' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolordeallocate' => ['bool', 'image'=>'GdImage', 'color'=>'int'], -'imagecolorexactalpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorexact' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolormatch' => ['bool', 'image1'=>'GdImage', 'image2'=>'GdImage'], -'imagecolorresolvealpha' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorresolve' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorset' => ['void', 'image'=>'GdImage', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], -'imagecolorsforindex' => ['array|false', 'image'=>'GdImage', 'color'=>'int'], -'imagecolorstotal' => ['int', 'image'=>'GdImage'], -'imagecolortransparent' => ['int|null', 'image'=>'GdImage', 'color='=>'int'], -'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'], -'imagecopymergegray' => ['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'], -'imagecopyresampled' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecopyresized' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecreate' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], -'imagecreatefrombmp' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromgd2' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromgd2part' => ['false|GdImage', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], -'imagecreatefromgd' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromgif' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromjpeg' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefrompng' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromstring' => ['false|GdImage', 'data'=>'string'], -'imagecreatefromtga' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromwbmp' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromwebp' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromxbm' => ['false|GdImage', 'filename'=>'string'], -'imagecreatefromxpm' => ['false|GdImage', 'filename'=>'string'], -'imagecreatetruecolor' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], -'imagecropauto' => ['false|GdImage', 'image'=>'GdImage', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], -'imagecrop' => ['false|GdImage', 'image'=>'GdImage', 'rectangle'=>'array'], -'imagedashedline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imagedestroy' => ['bool', 'image'=>'GdImage'], -'imageellipse' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], -'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'], -'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'], -'imageflip' => ['bool', 'image'=>'GdImage', 'mode'=>'int'], -'imagefttext' => ['array|false', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], -'imagegammacorrect' => ['bool', 'image'=>'GdImage', 'input_gamma'=>'float', 'output_gamma'=>'float'], -'imagegd2' => ['bool', 'image'=>'GdImage', 'file='=>'string', 'chunk_size='=>'int', 'mode='=>'int'], -'imagegd' => ['bool', 'image'=>'GdImage', 'file='=>'string'], -'imagegetclip' => ['array', 'image'=>'GdImage'], -'imagegetinterpolation' => ['int', 'image'=>'GdImage'], -'imagegif' => ['bool', 'image'=>'GdImage', 'file='=>'?string'], -'imagegrabscreen' => ['false|GdImage'], -'imagegrabwindow' => ['false|GdImage', 'handle'=>'int', 'client_area='=>'bool'], -'imageinterlace' => ['int', 'image'=>'GdImage', 'enable='=>'?bool'], -'imageistruecolor' => ['bool', 'image'=>'GdImage'], -'imagejpeg' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'], -'imagelayereffect' => ['bool', 'image'=>'GdImage', 'effect'=>'int'], -'imageline' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imageopenpolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imagepalettecopy' => ['void', 'dst'=>'GdImage', 'src'=>'GdImage'], -'imagepalettetotruecolor' => ['bool', 'image'=>'GdImage'], -'imagepng' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], -'imagepolygon' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', '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='=>'bool'], -'imagesavealpha' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], -'imagescale' => ['false|GdImage', 'image'=>'GdImage', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], -'imagesetbrush' => ['bool', 'image'=>'GdImage', 'brush'=>'GdImage'], -'imagesetclip' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], -'imagesetinterpolation' => ['bool', 'image'=>'GdImage', 'method='=>'int'], -'imagesetpixel' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'], -'imagesetstyle' => ['bool', 'image'=>'GdImage', 'style'=>'non-empty-array'], -'imagesetthickness' => ['bool', 'image'=>'GdImage', 'thickness'=>'int'], -'imagesettile' => ['bool', 'image'=>'GdImage', 'tile'=>'GdImage'], -'imagestring' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], -'imagestringup' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], -'imagesx' => ['int', 'image'=>'GdImage'], -'imagesy' => ['int', 'image'=>'GdImage'], -'imagetruecolortopalette' => ['bool', 'image'=>'GdImage', 'dither'=>'bool', 'num_colors'=>'int'], -'imagettftext' => ['false|array', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], -'imagewbmp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'foreground_color='=>'int'], -'imagewebp' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'], -'imagexbm' => ['bool', 'image'=>'GdImage', 'filename'=>'?string', 'foreground_color='=>'int'], -'imap_mailboxmsginfo' => ['stdClass', 'imap'=>'resource'], -'inflate_add' => ['string|false', 'context'=>'InflateContext', 'data'=>'string', 'flush_mode='=>'int'], -'inflate_get_read_len' => ['int', 'context'=>'InflateContext'], -'inflate_get_status' => ['int', 'context'=>'InflateContext'], -'inflate_init' => ['InflateContext|false', 'encoding'=>'int', 'options='=>'array'], -'ldap_count_entries' => ['int', 'ldap'=>'resource', 'result'=>'resource'], -'ldap_get_attributes' => ['array', 'ldap'=>'resource', 'entry'=>'resource'], -'mb_convert_case' => ['string', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], -'mb_convert_kana' => ['string', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], -'mb_decode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string'], -'mb_encode_mimeheader' => ['string', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], -'mb_encode_numericentity' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], -'mb_encoding_aliases' => ['list', 'encoding'=>'string'], -'mb_ereg' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], -'mb_eregi' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], -'mb_scrub' => ['string', 'string'=>'string', 'encoding='=>'string'], -'mb_strcut' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], -'mb_strimwidth' => ['string', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], -'mb_strlen' => ['int', 'string'=>'string', 'encoding='=>'string'], -'mb_strtolower' => ['string', 'string'=>'string', 'encoding='=>'string'], -'mb_strtoupper' => ['string', 'string'=>'string', 'encoding='=>'string'], -'mb_strwidth' => ['int', 'string'=>'string', 'encoding='=>'string'], -'mb_substr' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], -'mb_substr_count' => ['int', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], -'mktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], -'msg_get_queue' => ['SysvMessageQueue', 'key'=>'int', 'permissions='=>'int'], -'msg_remove_queue' => ['bool', 'queue'=>'SysvMessageQueue'], -'msg_send' => ['bool', 'queue'=>'SysvMessageQueue', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], -'msg_set_queue' => ['bool', 'queue'=>'SysvMessageQueue', 'data'=>'array'], -'msg_stat_queue' => ['array', 'queue'=>'SysvMessageQueue'], -'mysqli_fetch_fields' => ['array', 'result'=>'mysqli_result'], -'mysqli_get_client_stats' => ['array'], -'mysqli_get_connection_stats' => ['array', 'mysql'=>'mysqli'], -'mysqli_stmt_attr_get' => ['int', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], -'numfmt_create' => ['NumberFormatter|null', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], -'ob_implicit_flush' => ['void', 'enable='=>'bool'], -'oci_collection_append' => ['bool', 'collection'=>'OCICollection', 'value'=>'string'], -'oci_collection_assign' => ['bool', 'to'=>'OCICollection', 'from'=>'OCICollection'], -'oci_collection_element_assign' => ['bool', 'collection'=>'OCICollection', 'index'=>'int', 'value'=>'string'], -'oci_collection_element_get' => ['string', 'collection'=>'OCICollection', 'index'=>'int'], -'oci_collection_max' => ['int', 'collection'=>'OCICollection'], -'oci_collection_size' => ['int', 'collection'=>'OCICollection'], -'oci_collection_trim' => ['bool', 'collection'=>'OCICollection', 'num'=>'int'], -'oci_fetch_all' => ['int', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], -'oci_free_collection' => ['bool', 'collection'=>'OCICollection'], -'oci_free_descriptor' => ['bool', 'lob'=>'OCILob'], -'oci_new_descriptor' => ['?OCILob', 'connection'=>'resource', 'type='=>'int'], -'openssl_cipher_iv_length' => ['int|false', 'cipher_algo'=>'string'], -'openssl_csr_export' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', '&w_output'=>'OpenSSLAsymmetricKey', 'no_text='=>'bool'], -'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'output_filename'=>'string', 'no_text='=>'bool'], -'openssl_csr_get_public_key' => ['OpenSSLAsymmetricKey|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], -'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], -'openssl_csr_new' => ['OpenSSLCertificateSigningRequest|false', 'distinguished_names'=>'array', '&w_private_key'=>'OpenSSLAsymmetricKey', 'options='=>'array', 'extra_attributes='=>'array'], -'openssl_csr_sign' => ['OpenSSLCertificate|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'ca_certificate'=>'string|OpenSSLCertificate|null', 'private_key'=>'string|OpenSSLAsymmetricKey|OpenSSLCertificate|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], -'openssl_decrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', 'tag='=>'string', 'aad='=>'string'], -'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey'], -'openssl_digest' => ['string|false', 'data'=>'string', 'digest_algo'=>'string', 'binary='=>'bool'], -'openssl_encrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', '&w_tag='=>'string', 'aad='=>'string', 'tag_length='=>'int'], -'openssl_error_string' => ['string|false'], -'openssl_free_key' => ['void', 'key'=>'OpenSSLAsymmetricKey'], -'openssl_get_cert_locations' => ['array'], -'openssl_get_cipher_methods' => ['array', 'aliases='=>'bool'], -'openssl_get_curve_names' => ['list'], -'openssl_get_md_methods' => ['array', 'aliases='=>'bool'], -'openssl_get_privatekey' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], -'openssl_get_publickey' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], -'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'cipher_algo'=>'string', 'iv='=>'string'], -'openssl_pbkdf2' => ['string|false', 'password'=>'string', 'salt'=>'string', 'key_length'=>'int', 'iterations'=>'int', 'digest_algo='=>'string'], -'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], -'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], -'openssl_pkcs12_read' => ['bool', 'pkcs12'=>'string', '&w_certificates'=>'array', 'passphrase'=>'string'], -'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key='=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|null|string'], -'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], -'openssl_pkcs7_read' => ['bool', 'input_filename'=>'string', '&w_certificates'=>'array'], -'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], -'openssl_pkcs7_verify' => ['bool|int', 'input_filename'=>'string', 'flags'=>'int', 'signers_certificates_filename='=>'string', 'ca_info='=>'array', 'untrusted_certificates_filename='=>'string', 'content='=>'string', 'output_filename='=>'string'], -'openssl_pkey_derive' => ['string|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'key_length='=>'int'], -'openssl_pkey_export' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], -'openssl_pkey_export_to_file' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], -'openssl_pkey_free' => ['void', 'key'=>'OpenSSLAsymmetricKey'], -'openssl_pkey_get_details' => ['array|false', 'key'=>'OpenSSLAsymmetricKey'], -'openssl_pkey_get_private' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], -'openssl_pkey_get_public' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|string'], -'openssl_pkey_new' => ['OpenSSLAsymmetricKey|false', 'options='=>'array'], -'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], -'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], -'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], -'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], -'openssl_random_pseudo_bytes' => ['string', 'length'=>'int', '&w_strong_result='=>'bool'], -'openssl_seal' => ['int|false', 'data'=>'string', '&w_sealed_data'=>'string', '&rw_encrypted_keys'=>'array', 'public_key'=>'array', 'cipher_algo'=>'string', '&iv='=>'string'], -'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], -'openssl_spki_export' => ['false|string', 'spki'=>'string'], -'openssl_spki_export_challenge' => ['false|string', 'spki'=>'string'], -'openssl_spki_new' => ['false|string', 'private_key'=>'OpenSSLAsymmetricKey', 'challenge'=>'string', 'digest_algo='=>'int'], -'openssl_spki_verify' => ['bool', 'spki'=>'string'], -'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], -'openssl_x509_check_private_key' => ['bool', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], -'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|OpenSSLCertificate', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], -'openssl_x509_export' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'no_text='=>'bool'], -'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'no_text='=>'bool'], -'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|OpenSSLCertificate', 'digest_algo='=>'string', 'binary='=>'bool'], -'openssl_x509_free' => ['void', 'certificate'=>'OpenSSLCertificate'], -'openssl_x509_parse' => ['array|false', 'certificate'=>'string|OpenSSLCertificate', 'short_names='=>'bool'], -'openssl_x509_read' => ['OpenSSLCertificate|false', 'certificate'=>'string|OpenSSLCertificate'], -'openssl_x509_verify' => ['int', 'certificate'=>'OpenSSLCertificate|string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], -'parse_str' => ['void', 'string'=>'string', '&w_result'=>'array'], -'password_hash' => ['string', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], -'PhpToken::getTokenName' => ['string'], -'PhpToken::is' => ['bool', 'kind'=>'string|int|string[]|int[]'], -'PhpToken::isIgnorable' => ['bool'], -'PhpToken::tokenize' => ['list', 'code'=>'string', 'flags='=>'int'], -'pg_fetch_all' => ['array', 'result'=>'resource', 'mode='=>'int'], -'pg_fetch_all_columns' => ['array', 'result'=>'resource', 'field='=>'int'], -'proc_get_status' => ['array', 'process'=>'resource'], -'ReflectionClass::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], -'ReflectionClassConstant::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], -'ReflectionFunctionAbstract::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], -'ReflectionParameter::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], -'ReflectionProperty::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], -'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'], -'shm_attach' => ['SysvSharedMemory', 'key'=>'int', 'size='=>'int', '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' => ['Shmop', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], -'shmop_read' => ['string', 'shmop'=>'Shmop', 'offset'=>'int', 'size'=>'int'], -'shmop_size' => ['int', 'shmop'=>'Shmop'], -'shmop_write' => ['int', 'shmop'=>'Shmop', 'data'=>'string', 'offset'=>'int'], -'simplexml_import_dom' => ['SimpleXMLElement', 'node'=>'DOMNode', 'class_name='=>'string'], -'sleep' => ['int', 'seconds'=>'int'], -'socket_accept' => ['Socket|false', 'socket'=>'Socket'], -'socket_addrinfo_bind' => ['Socket|false', 'address'=>'AddressInfo'], -'socket_addrinfo_connect' => ['Socket|false', 'address'=>'AddressInfo'], -'socket_addrinfo_explain' => ['array', 'address'=>'AddressInfo'], -'socket_addrinfo_lookup' => ['AddressInfo[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], -'socket_bind' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], -'socket_clear_error' => ['void', 'socket='=>'Socket'], -'socket_close' => ['void', 'socket'=>'Socket'], -'socket_connect' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], -'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_pair'=>'Socket[]'], -'socket_export_stream' => ['resource|false', 'socket'=>'Socket'], -'socket_get_option' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], -'socket_getopt' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], -'socket_getpeername' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], -'socket_getsockname' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], -'socket_import_stream' => ['Socket|false', 'stream'=>'resource'], -'socket_last_error' => ['int', 'socket='=>'Socket'], -'socket_listen' => ['bool', 'socket'=>'Socket', 'backlog='=>'int'], -'socket_read' => ['string|false', 'socket'=>'Socket', 'length'=>'int', 'mode='=>'int'], -'socket_recv' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], -'socket_recvfrom' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], -'socket_recvmsg' => ['int|false', 'socket'=>'Socket', '&w_message'=>'array', 'flags='=>'int'], -'socket_select' => ['int|false', '&rw_read'=>'Socket[]|null', '&rw_write'=>'Socket[]|null', '&rw_except'=>'Socket[]|null', 'seconds'=>'int', 'microseconds='=>'int'], -'socket_send' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'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'], -'socket_set_block' => ['bool', 'socket'=>'Socket'], -'socket_set_nonblock' => ['bool', 'socket'=>'Socket'], -'socket_set_option' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], -'socket_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], -'socket_setopt' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], -'socket_shutdown' => ['bool', 'socket'=>'Socket', 'mode='=>'int'], -'socket_strerror' => ['string', 'error_code'=>'int'], -'socket_write' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length='=>'int'], -'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'Socket', 'process_id'=>'int'], -'socket_wsaprotocol_info_import' => ['Socket|false', 'info_id'=>'string'], -'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], -'substr' => ['string', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], -'str_contains' => ['bool', 'haystack'=>'string', 'needle'=>'string'], -'str_ends_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], -'str_starts_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], -'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], -'stream_bucket_new' => ['object', 'stream'=>'resource', 'buffer'=>'string'], -'stream_set_chunk_size' => ['int', 'stream'=>'resource', 'size'=>'int'], -'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], -'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], -'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], -'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string'], -'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], -'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], -'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], -'substr_compare' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], -'timezone_identifiers_list' => ['list', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], -'timezone_offset_get' => ['int', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], -'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'?(\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\')'], -'xml_get_current_byte_index' => ['int', 'parser'=>'XMLParser'], -'xml_get_current_column_number' => ['int', 'parser'=>'XMLParser'], -'xml_get_current_line_number' => ['int', 'parser'=>'XMLParser'], -'xml_get_error_code' => ['int', 'parser'=>'XMLParser'], -'xml_parse_into_struct' => ['int', 'parser'=>'XMLParser', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], -'xml_parse' => ['int', 'parser'=>'XMLParser', 'data'=>'string', 'is_final='=>'bool'], -'xml_parser_create' => ['XMLParser', 'encoding='=>'string'], -'xml_parser_create_ns' => ['XMLParser', 'encoding='=>'string', 'separator='=>'string'], -'xml_parser_free' => ['bool', 'parser'=>'XMLParser'], -'xml_parser_get_option' => ['int|string', 'parser'=>'XMLParser', 'option'=>'int'], -'xml_parser_set_option' => ['bool', 'parser'=>'XMLParser', 'option'=>'int', 'value'=>'int|string'], -'xml_set_character_data_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xml_set_element_handler' => ['bool', 'parser'=>'XMLParser', 'start_handler'=>'callable', 'end_handler'=>'callable'], -'xml_set_default_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xml_set_notation_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xml_set_object' => ['bool', 'parser'=>'XMLParser', 'object'=>'object'], -'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], -'xmlwriter_end_attribute' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_cdata' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_comment' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_document' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_dtd' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_element' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_end_pi' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_flush' => ['int|string', 'writer'=>'XMLWriter', 'empty='=>'bool'], -'xmlwriter_full_end_element' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_open_memory' => ['XMLWriter'], -'xmlwriter_open_uri' => ['XMLWriter', 'uri'=>'string'], -'xmlwriter_output_memory' => ['string', 'writer'=>'XMLWriter', 'flush='=>'bool'], -'xmlwriter_set_indent' => ['bool', 'writer'=>'XMLWriter', 'enable'=>'bool'], -'xmlwriter_set_indent_string' => ['bool', 'writer'=>'XMLWriter', 'indentation'=>'string'], -'xmlwriter_start_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], -'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], -'xmlwriter_start_cdata' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_start_comment' => ['bool', 'writer'=>'XMLWriter'], -'xmlwriter_start_document' => ['bool', 'writer'=>'XMLWriter', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], -'xmlwriter_start_dtd' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], -'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], -'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string'], -'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'isParam'=>'bool'], -'xmlwriter_start_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], -'xmlwriter_start_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], -'xmlwriter_start_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string'], -'xmlwriter_text' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], -'xmlwriter_write_attribute' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'value'=>'string'], -'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], -'xmlwriter_write_cdata' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], -'xmlwriter_write_comment' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], -'xmlwriter_write_dtd' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], -'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], -'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], -'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], -'xmlwriter_write_element' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content='=>'string'], -'xmlwriter_write_element_ns' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], -'xmlwriter_write_pi' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string', 'content'=>'string'], -'xmlwriter_write_raw' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], -], -'old' => [ -'apache_request_headers' => ['array|false'], -'array_combine' => ['associative-array|false', 'keys'=>'string[]|int[]', 'values'=>'array'], -'array_key_exists' => ['bool', 'key'=>'string|int', 'array'=>'array|ArrayObject'], -'bcdiv' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], -'bcmod' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], -'bcpowmod' => ['?string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], -'com_load_typelib' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'bool'], -'count_chars' => ['array|false|string', 'string'=>'string', 'mode='=>'int'], -'create_function' => ['string', 'args'=>'string', 'code'=>'string'], -'collator_get_strength' => ['int|false', 'object'=>'collator'], -'curl_close' => ['void', 'handle'=>'resource'], -'curl_copy_handle' => ['resource', 'handle'=>'resource'], -'curl_errno' => ['int', 'handle'=>'resource'], -'curl_error' => ['string', 'handle'=>'resource'], -'curl_escape' => ['string|false', 'handle'=>'resource', 'string'=>'string'], -'curl_exec' => ['bool|string', 'handle'=>'resource'], -'curl_getinfo' => ['mixed', 'handle'=>'resource', 'option='=>'int'], -'curl_init' => ['resource|false', 'url='=>'string'], -'curl_multi_add_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], -'curl_multi_close' => ['void', 'multi_handle'=>'resource'], -'curl_multi_errno' => ['int', 'multi_handle'=>'resource'], -'curl_multi_exec' => ['int', 'multi_handle'=>'resource', '&w_still_running'=>'int'], -'curl_multi_getcontent' => ['string', 'handle'=>'resource'], -'curl_multi_info_read' => ['array|false', 'multi_handle'=>'resource', '&w_queued_messages='=>'int'], -'curl_multi_init' => ['resource'], -'curl_multi_remove_handle' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], -'curl_multi_select' => ['int', 'multi_handle'=>'resource', 'timeout='=>'float'], -'curl_multi_setopt' => ['bool', 'multi_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], -'curl_pause' => ['int', 'handle'=>'resource', 'flags'=>'int'], -'curl_reset' => ['void', 'handle'=>'resource'], -'curl_setopt' => ['bool', 'handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], -'curl_setopt_array' => ['bool', 'handle'=>'resource', 'options'=>'array'], -'curl_share_close' => ['void', 'share_handle'=>'resource'], -'curl_share_errno' => ['int', 'share_handle'=>'resource'], -'curl_share_init' => ['resource'], -'curl_share_setopt' => ['bool', 'share_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], -'curl_unescape' => ['string|false', 'handle'=>'resource', 'string'=>'string'], -'date_add' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], -'date_date_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], -'date_diff' => ['DateInterval|false', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], -'date_format' => ['string|false', 'object'=>'DateTimeInterface', 'format'=>'string'], -'date_isodate_set' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], -'date_parse' => ['array|false', 'datetime'=>'string'], -'date_sub' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], -'date_sun_info' => ['array|false', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], -'date_time_set' => ['DateTime|false', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], -'date_timestamp_set' => ['DateTime|false', 'object'=>'DateTime', 'timestamp'=>'int'], -'date_timezone_set' => ['DateTime|false', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], -'debug_backtrace' => ['list', 'options='=>'int|bool', 'limit='=>'int'], -'debug_print_backtrace' => ['void', 'options='=>'int|bool', 'limit='=>'int'], -'deflate_add' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], -'deflate_init' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], -'dom_import_simplexml' => ['DOMElement|false|null', 'node'=>'SimpleXMLElement'], -'easter_date' => ['int', 'year='=>'int', 'mode='=>'int'], -'each' => ['array{0:int|string,key:int|string,1:mixed,value:mixed}', '&r_arr'=>'array'], -'enchant_broker_describe' => ['array', 'broker'=>'resource'], -'enchant_broker_dict_exists' => ['bool', 'broker'=>'resource', 'tag'=>'string'], -'enchant_broker_free' => ['bool', 'broker'=>'resource'], -'enchant_broker_free_dict' => ['bool', 'dictionary'=>'resource'], -'enchant_broker_get_dict_path' => ['string', 'broker'=>'resource', 'type'=>'int'], -'enchant_broker_get_error' => ['string|false', 'broker'=>'resource'], -'enchant_broker_init' => ['resource|false'], -'enchant_broker_list_dicts' => ['array', 'broker'=>'resource'], -'enchant_broker_request_dict' => ['resource|false', 'broker'=>'resource', 'tag'=>'string'], -'enchant_broker_request_pwl_dict' => ['resource|false', 'broker'=>'resource', 'filename'=>'string'], -'enchant_broker_set_dict_path' => ['bool', 'broker'=>'resource', 'type'=>'int', 'path'=>'string'], -'enchant_broker_set_ordering' => ['bool', 'broker'=>'resource', 'tag'=>'string', 'ordering'=>'string'], -'enchant_dict_add_to_personal' => ['void', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_add_to_session' => ['void', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_describe' => ['array', 'dictionary'=>'resource'], -'enchant_dict_get_error' => ['string', 'dictionary'=>'resource'], -'enchant_dict_is_in_session' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], -'enchant_dict_quick_check' => ['bool', 'dictionary'=>'resource', 'word'=>'string', '&w_suggestions='=>'array'], -'enchant_dict_store_replacement' => ['void', 'dictionary'=>'resource', 'misspelled'=>'string', 'correct'=>'string'], -'enchant_dict_suggest' => ['array', 'dictionary'=>'resource', 'word'=>'string'], -'fpassthru' => ['int|false', 'stream'=>'resource'], -'gmdate' => ['string|false', 'format'=>'string', 'timestamp='=>'int'], -'gmmktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], -'gmp_binomial' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], -'gmp_export' => ['string|false', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], -'gmp_import' => ['GMP|false', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], -'gmp_random' => ['GMP', 'limiter='=>'int'], -'gmp_random_seed' => ['void|false', 'seed'=>'GMP|string|int'], -'gzgetss' => ['string|false', 'zp'=>'resource', 'length'=>'int', 'allowable_tags='=>'string'], -'gzpassthru' => ['int|false', 'stream'=>'resource'], -'hash_hkdf' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], -'image2wbmp' => ['bool', 'im'=>'resource', 'filename='=>'?string', 'threshold='=>'int'], -'imageaffine' => ['resource|false', 'image'=>'resource', 'affine'=>'array', 'clip='=>'array'], -'imagealphablending' => ['bool', 'image'=>'resource', 'enable'=>'bool'], -'imageantialias' => ['bool', 'image'=>'resource', 'enable'=>'bool'], -'imagearc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], -'imagebmp' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], -'imagechar' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], -'imagecharup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], -'imagecolorallocatealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorallocate' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorat' => ['int|false', 'image'=>'resource', 'x'=>'int', 'y'=>'int'], -'imagecolorclosestalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorclosesthwb' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorclosest' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolordeallocate' => ['bool', 'image'=>'resource', 'color'=>'int'], -'imagecolorexactalpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorexact' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolormatch' => ['bool', 'image1'=>'resource', 'image2'=>'resource'], -'imagecolorresolvealpha' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], -'imagecolorresolve' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], -'imagecolorset' => ['void', 'image'=>'resource', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], -'imagecolorsforindex' => ['array|false', 'image'=>'resource', 'color'=>'int'], -'imagecolorstotal' => ['int|false', 'image'=>'resource'], -'imagecolortransparent' => ['int|false', 'image'=>'resource', 'color='=>'int'], -'imageconvolution' => ['bool', 'image'=>'resource', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], -'imagecopy' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecopymerge' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], -'imagecopymergegray' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], -'imagecopyresampled' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecopyresized' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], -'imagecreatefrombmp' => ['resource|false', 'filename'=>'string'], -'imagecreatefromgd2part' => ['resource|false', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], -'imagecreatefromgd2' => ['resource|false', 'filename'=>'string'], -'imagecreatefromgd' => ['resource|false', 'filename'=>'string'], -'imagecreatefromgif' => ['resource|false', 'filename'=>'string'], -'imagecreatefromjpeg' => ['resource|false', 'filename'=>'string'], -'imagecreatefrompng' => ['resource|false', 'filename'=>'string'], -'imagecreatefromstring' => ['resource|false', 'data'=>'string'], -'imagecreatefromtga' => ['resource|false', 'filename'=>'string'], -'imagecreatefromwbmp' => ['resource|false', 'filename'=>'string'], -'imagecreatefromwebp' => ['resource|false', 'filename'=>'string'], -'imagecreatefromxbm' => ['resource|false', 'filename'=>'string'], -'imagecreatefromxpm' => ['resource|false', 'filename'=>'string'], -'imagecreate' => ['resource|false', 'width'=>'int', 'height'=>'int'], -'imagecreatetruecolor' => ['resource|false', 'width'=>'int', 'height'=>'int'], -'imagecropauto' => ['resource|false', 'image'=>'resource', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], -'imagecrop' => ['resource|false', 'image'=>'resource', 'rectangle'=>'array'], -'imagedashedline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imagedestroy' => ['bool', 'image'=>'resource'], -'imageellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], -'imagefill' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], -'imagefilledarc' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], -'imagefilledellipse' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], -'imagefilledpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imagefilledrectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imagefilltoborder' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], -'imagefilter' => ['bool', 'image'=>'resource', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], -'imageflip' => ['bool', 'image'=>'resource', 'mode'=>'int'], -'imagefttext' => ['array|false', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], -'imagegammacorrect' => ['bool', 'image'=>'resource', 'input_gamma'=>'float', 'output_gamma'=>'float'], -'imagegd2' => ['bool', 'image'=>'resource', 'file='=>'?string', 'chunk_size='=>'int', 'mode='=>'int'], -'imagegd' => ['bool', 'image'=>'resource', 'file='=>'?string'], -'imagegetclip' => ['array|false', 'image'=>'resource'], -'imagegif' => ['bool', 'image'=>'resource', 'file='=>'?string'], -'imagegrabscreen' => ['false|resource'], -'imagegrabwindow' => ['false|resource', 'handle'=>'int', 'client_area='=>'bool'], -'imageinterlace' => ['int|false', 'image'=>'resource', 'enable='=>'?bool'], -'imageistruecolor' => ['bool', 'image'=>'resource'], -'imagejpeg' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], -'imagelayereffect' => ['bool', 'image'=>'resource', 'effect'=>'int'], -'imageline' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imageopenpolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imagepalettecopy' => ['void', 'dst'=>'resource', 'src'=>'resource'], -'imagepalettetotruecolor' => ['bool', 'image'=>'resource'], -'imagepng' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], -'imagepolygon' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], -'imagerectangle' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], -'imageresolution' => ['array|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], -'imagerotate' => ['resource|false', 'image'=>'resource', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], -'imagesavealpha' => ['bool', 'image'=>'resource', 'enable'=>'bool'], -'imagescale' => ['resource|false', 'image'=>'resource', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], -'imagesetbrush' => ['bool', 'image'=>'resource', 'brush'=>'resource'], -'imagesetclip' => ['bool', 'image'=>'resource', 'x1'=>'int', 'x2'=>'int', 'y1'=>'int', 'y2'=>'int'], -'imagesetinterpolation' => ['bool', 'image'=>'resource', 'method='=>'int'], -'imagesetpixel' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], -'imagesetstyle' => ['bool', 'image'=>'resource', 'style'=>'non-empty-array'], -'imagesetthickness' => ['bool', 'image'=>'resource', 'thickness'=>'int'], -'imagesettile' => ['bool', 'image'=>'resource', 'tile'=>'resource'], -'imagestring' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], -'imagestringup' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], -'imagesx' => ['int|false', 'image'=>'resource'], -'imagesy' => ['int|false', 'image'=>'resource'], -'imagetruecolortopalette' => ['bool', 'image'=>'resource', 'dither'=>'bool', 'num_colors'=>'int'], -'imagettftext' => ['false|array', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], -'imagewbmp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'foreground_color='=>'int'], -'imagewebp' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], -'imagexbm' => ['bool', 'image'=>'resource', 'filename'=>'?string', 'foreground_color='=>'int'], -'imap_mailboxmsginfo' => ['stdClass|false', 'imap'=>'resource'], -'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'], -'jpeg2wbmp' => ['bool', 'jpegname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], -'ldap_count_entries' => ['int|false', 'ldap'=>'resource', 'result'=>'resource'], -'ldap_get_attributes' => ['array|false', 'ldap'=>'resource', 'entry'=>'resource'], -'ldap_sort' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', 'sortfilter'=>'string'], -'mb_convert_case' => ['string|false', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], -'mb_convert_kana' => ['string|false', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], -'mb_decode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'is_hex='=>'bool'], -'mb_encode_mimeheader' => ['string|false', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], -'mb_encode_numericentity' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], -'mb_encoding_aliases' => ['list|false', 'encoding'=>'string'], -'mb_ereg' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], -'mb_eregi' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], -'mb_scrub' => ['string|false', 'string'=>'string', 'encoding='=>'string'], -'mb_strcut' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], -'mb_strimwidth' => ['string|false', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], -'mb_strlen' => ['int|false', 'string'=>'string', 'encoding='=>'string'], -'mb_strtolower' => ['string|false', 'string'=>'string', 'encoding='=>'string'], -'mb_strtoupper' => ['string|false', 'string'=>'string', 'encoding='=>'string'], -'mb_strwidth' => ['int|false', 'string'=>'string', 'encoding='=>'string'], -'mb_substr' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], -'mb_substr_count' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], -'mktime' => ['int|false', 'hour'=>'int', 'minute='=>'int', 'second='=>'int', 'month='=>'int', 'day='=>'int', 'year='=>'int'], -'msg_get_queue' => ['resource', 'key'=>'int', 'permissions='=>'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'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], -'msg_set_queue' => ['bool', 'queue'=>'resource', 'data'=>'array'], -'msg_stat_queue' => ['array', 'queue'=>'resource'], -'mysqli_fetch_fields' => ['?array', 'result'=>'mysqli_result'], -'mysqli_get_client_stats' => ['array|false'], -'mysqli_get_connection_stats' => ['array|false', 'mysql'=>'mysqli'], -'mysqli_stmt_attr_get' => ['int|false', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], -'numfmt_create' => ['NumberFormatter|false', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], -'ob_implicit_flush' => ['void', 'enable='=>'int'], -'oci_collection_append' => ['bool', 'collection'=>'resource', 'value'=>'string'], -'oci_collection_assign' => ['bool', 'to'=>'resource', 'from'=>'object'], -'oci_collection_element_assign' => ['bool', 'collection'=>'resource', 'index'=>'int', 'value'=>'string'], -'oci_collection_element_get' => ['string', 'collection'=>'resource', 'index'=>'int'], -'oci_collection_max' => ['int', 'collection'=>'resource'], -'oci_collection_size' => ['int', 'collection'=>'resource'], -'oci_collection_trim' => ['bool', 'collection'=>'resource', 'num'=>'int'], -'oci_fetch_all' => ['int|false', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], -'oci_free_collection' => ['bool', 'collection'=>'resource'], -'oci_free_descriptor' => ['bool', 'lob'=>'resource'], -'oci_new_descriptor' => ['OCILob|false', 'connection'=>'resource', 'type='=>'int'], -'openssl_cipher_iv_length' => ['int|false', 'cipher_algo'=>'string'], -'openssl_csr_export' => ['bool', 'csr'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], -'openssl_csr_export_to_file' => ['bool', 'csr'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], -'openssl_csr_get_public_key' => ['resource|false', 'csr'=>'string|resource', 'short_names='=>'bool'], -'openssl_csr_get_subject' => ['array|false', 'csr'=>'string|resource', 'short_names='=>'bool'], -'openssl_csr_new' => ['resource|false', 'distinguished_names'=>'array', '&w_private_key'=>'resource', 'options='=>'array', 'extra_attributes='=>'array'], -'openssl_csr_sign' => ['resource|false', 'csr'=>'string|resource', 'ca_certificate'=>'string|resource|null', 'private_key'=>'string|resource|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], -'openssl_decrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', 'tag='=>'string', 'aad='=>'string'], -'openssl_dh_compute_key' => ['string|false', 'public_key'=>'string', 'private_key'=>'resource'], -'openssl_digest' => ['string|false', 'data'=>'string', 'digest_algo'=>'string', 'binary='=>'bool'], -'openssl_encrypt' => ['string|false', 'data'=>'string', 'cipher_algo'=>'string', 'passphrase'=>'string', 'options='=>'int', 'iv='=>'string', '&w_tag='=>'string', 'aad='=>'string', 'tag_length='=>'int'], -'openssl_error_string' => ['string|false'], -'openssl_free_key' => ['void', 'key'=>'resource'], -'openssl_get_cert_locations' => ['array'], -'openssl_get_cipher_methods' => ['array', 'aliases='=>'bool'], -'openssl_get_curve_names' => ['list'], -'openssl_get_md_methods' => ['array', 'aliases='=>'bool'], -'openssl_get_privatekey' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], -'openssl_get_publickey' => ['resource|false', 'public_key'=>'resource|string'], -'openssl_open' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'string|array|resource', 'cipher_algo'=>'string', 'iv='=>'string'], -'openssl_pbkdf2' => ['string|false', 'password'=>'string', 'salt'=>'string', 'key_length'=>'int', 'iterations'=>'int', 'digest_algo='=>'string'], -'openssl_pkcs12_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], -'openssl_pkcs12_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], -'openssl_pkcs12_read' => ['bool', 'pkcs12'=>'string', '&w_certificates'=>'array', 'passphrase'=>'string'], -'openssl_pkcs7_decrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key='=>'string|resource|array'], -'openssl_pkcs7_encrypt' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], -'openssl_pkcs7_read' => ['bool', 'input_filename'=>'string', '&w_certificates'=>'array'], -'openssl_pkcs7_sign' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], -'openssl_pkcs7_verify' => ['bool|int', 'input_filename'=>'string', 'flags'=>'int', 'signers_certificates_filename='=>'string', 'ca_info='=>'array', 'untrusted_certificates_filename='=>'string', 'content='=>'string', 'output_filename='=>'string'], -'openssl_pkey_derive' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], -'openssl_pkey_export' => ['bool', 'key'=>'resource', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], -'openssl_pkey_export_to_file' => ['bool', 'key'=>'resource|string|array', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], -'openssl_pkey_free' => ['void', 'key'=>'resource'], -'openssl_pkey_get_details' => ['array|false', 'key'=>'resource'], -'openssl_pkey_get_private' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], -'openssl_pkey_get_public' => ['resource|false', 'public_key'=>'resource|string'], -'openssl_pkey_new' => ['resource|false', 'options='=>'array'], -'openssl_private_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], -'openssl_private_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], -'openssl_public_decrypt' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], -'openssl_public_encrypt' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], -'openssl_random_pseudo_bytes' => ['string|false', 'length'=>'int', '&w_strong_result='=>'bool'], -'openssl_seal' => ['int|false', 'data'=>'string', '&w_sealed_data'=>'string', '&rw_encrypted_keys'=>'array', 'public_key'=>'array', 'cipher_algo'=>'string', '&iv='=>'string'], -'openssl_sign' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'resource|string', 'algorithm='=>'int|string'], -'openssl_spki_export' => ['?string', 'spki'=>'string'], -'openssl_spki_export_challenge' => ['?string', 'spki'=>'string'], -'openssl_spki_new' => ['?string', 'private_key'=>'resource', 'challenge'=>'string', 'digest_algo='=>'int'], -'openssl_spki_verify' => ['bool', 'spki'=>'string'], -'openssl_verify' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'resource|string', 'algorithm='=>'int|string'], -'openssl_x509_check_private_key' => ['bool', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array'], -'openssl_x509_checkpurpose' => ['bool|int', 'certificate'=>'string|resource', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], -'openssl_x509_export' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], -'openssl_x509_export_to_file' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], -'openssl_x509_fingerprint' => ['string|false', 'certificate'=>'string|resource', 'digest_algo='=>'string', 'binary='=>'bool'], -'openssl_x509_free' => ['void', 'certificate'=>'resource'], -'openssl_x509_parse' => ['array|false', 'certificate'=>'string|resource', 'short_names='=>'bool'], -'openssl_x509_read' => ['resource|false', 'certificate'=>'string|resource'], -'openssl_x509_verify' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'], -'parse_str' => ['void', 'string'=>'string', '&w_result'=>'array'], -'password_hash' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], -'pg_fetch_all' => ['array|false', 'result'=>'resource', 'mode='=>'int'], -'pg_fetch_all_columns' => ['array|false', 'result'=>'resource', 'field='=>'int'], -'png2wbmp' => ['bool', 'pngname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], -'proc_get_status' => ['array|false', 'process'=>'resource'], -'read_exif_data' => ['array', 'filename'=>'string', 'sections_needed='=>'string', 'sub_arrays='=>'bool', 'read_thumbnail='=>'bool'], -'sem_acquire' => ['bool', 'semaphore'=>'resource', 'non_blocking='=>'bool'], -'sem_get' => ['resource|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'], -'sem_release' => ['bool', 'semaphore'=>'resource'], -'sem_remove' => ['bool', 'semaphore'=>'resource'], -'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'], -'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'], -'simplexml_import_dom' => ['SimpleXMLElement|false', 'node'=>'DOMNode', 'class_name='=>'string'], -'sleep' => ['int|false', 'seconds'=>'int'], -'socket_accept' => ['resource|false', 'socket'=>'resource'], -'socket_addrinfo_bind' => ['?resource', 'address'=>'resource'], -'socket_addrinfo_connect' => ['?resource', 'address'=>'resource'], -'socket_addrinfo_explain' => ['array', 'address'=>'resource'], -'socket_addrinfo_lookup' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], -'socket_bind' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], -'socket_clear_error' => ['void', 'socket='=>'resource'], -'socket_close' => ['void', 'socket'=>'resource'], -'socket_connect' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], -'socket_create' => ['resource|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], -'socket_create_listen' => ['resource|false', 'port'=>'int', 'backlog='=>'int'], -'socket_create_pair' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'resource[]'], -'socket_export_stream' => ['resource|false', 'socket'=>'resource'], -'socket_get_option' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], -'socket_getopt' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], -'socket_getpeername' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], -'socket_getsockname' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], -'socket_import_stream' => ['resource|false|null', 'stream'=>'resource'], -'socket_last_error' => ['int', 'socket='=>'resource'], -'socket_listen' => ['bool', 'socket'=>'resource', 'backlog='=>'int'], -'socket_read' => ['string|false', 'socket'=>'resource', 'length'=>'int', 'mode='=>'int'], -'socket_recv' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], -'socket_recvfrom' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], -'socket_recvmsg' => ['int|false', 'socket'=>'resource', '&w_message'=>'array', 'flags='=>'int'], -'socket_select' => ['int|false', '&rw_read'=>'resource[]|null', '&rw_write'=>'resource[]|null', '&rw_except'=>'resource[]|null', 'seconds'=>'int', 'microseconds='=>'int'], -'socket_send' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int'], -'socket_sendmsg' => ['int|false', 'socket'=>'resource', 'message'=>'array', 'flags='=>'int'], -'socket_sendto' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'], -'socket_set_block' => ['bool', 'socket'=>'resource'], -'socket_set_nonblock' => ['bool', 'socket'=>'resource'], -'socket_set_option' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], -'socket_set_timeout' => ['bool', 'stream'=>'resource', 'seconds'=>'int', 'microseconds='=>'int'], -'socket_setopt' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], -'socket_shutdown' => ['bool', 'socket'=>'resource', 'mode='=>'int'], -'socket_strerror' => ['string', 'error_code'=>'int'], -'socket_write' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length='=>'int'], -'socket_wsaprotocol_info_export' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], -'socket_wsaprotocol_info_import' => ['resource|false', 'info_id'=>'string'], -'socket_wsaprotocol_info_release' => ['bool', 'info_id'=>'string'], -'SplFileObject::fgetss' => ['string|false', 'allowable_tags='=>'string'], -'substr' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], -'strchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], -'stream_bucket_new' => ['resource|false', 'stream'=>'resource', 'buffer'=>'string'], -'stream_set_chunk_size' => ['int|false', 'stream'=>'resource', 'size'=>'int'], -'stripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], -'stristr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], -'strpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], -'strrchr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int'], -'strripos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], -'strrpos' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], -'strstr' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], -'substr_compare' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], -'timezone_identifiers_list' => ['list|false', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], -'timezone_offset_get' => ['int|false', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], -'version_compare' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\''], -'xml_parser_create' => ['resource', 'encoding='=>'string'], -'xml_parser_create_ns' => ['resource', 'encoding='=>'string', 'separator='=>'string'], -'xml_parser_free' => ['bool', 'parser'=>'resource'], -'xml_parser_get_option' => ['mixed|false', 'parser'=>'resource', 'option'=>'int'], -'xml_parser_set_option' => ['bool', 'parser'=>'resource', 'option'=>'int', 'value'=>'int|string'], -'xml_set_character_data_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_default_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_element_handler' => ['bool', 'parser'=>'resource', 'start_handler'=>'callable', 'end_handler'=>'callable'], -'xml_set_end_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_external_entity_ref_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_notation_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_object' => ['bool', 'parser'=>'resource', 'object'=>'object'], -'xml_set_processing_instruction_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_start_namespace_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_set_unparsed_entity_decl_handler' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], -'xml_parse' => ['int', 'parser'=>'resource', 'data'=>'string', 'is_final='=>'bool'], -'xml_parse_into_struct' => ['int', 'parser'=>'resource', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], -'xml_get_current_byte_index' => ['int|false', 'parser'=>'resource'], -'xml_get_current_column_number' => ['int|false', 'parser'=>'resource'], -'xml_get_current_line_number' => ['int|false', 'parser'=>'resource'], -'xml_get_error_code' => ['int|false', 'parser'=>'resource'], -'xmlwriter_end_attribute' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_cdata' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_comment' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_document' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd_attlist' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd_element' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_dtd_entity' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_element' => ['bool', 'writer'=>'resource'], -'xmlwriter_end_pi' => ['bool', 'writer'=>'resource'], -'xmlwriter_flush' => ['int|string', 'writer'=>'resource', 'empty='=>'bool'], -'xmlwriter_full_end_element' => ['bool', 'writer'=>'resource'], -'xmlwriter_open_memory' => ['resource'], -'xmlwriter_open_uri' => ['resource', 'uri'=>'string'], -'xmlwriter_output_memory' => ['string', 'writer'=>'resource', 'flush='=>'bool'], -'xmlwriter_set_indent' => ['bool', 'writer'=>'resource', 'enable'=>'bool'], -'xmlwriter_set_indent_string' => ['bool', 'writer'=>'resource', 'indentation'=>'string'], -'xmlwriter_start_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string'], -'xmlwriter_start_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], -'xmlwriter_start_cdata' => ['bool', 'writer'=>'resource'], -'xmlwriter_start_comment' => ['bool', 'writer'=>'resource'], -'xmlwriter_start_document' => ['bool', 'writer'=>'resource', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], -'xmlwriter_start_dtd' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], -'xmlwriter_start_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string'], -'xmlwriter_start_dtd_element' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string'], -'xmlwriter_start_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'isParam'=>'bool'], -'xmlwriter_start_element' => ['bool', 'writer'=>'resource', 'name'=>'string'], -'xmlwriter_start_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], -'xmlwriter_start_pi' => ['bool', 'writer'=>'resource', 'target'=>'string'], -'xmlwriter_text' => ['bool', 'writer'=>'resource', 'content'=>'string'], -'xmlwriter_write_attribute' => ['bool', 'writer'=>'resource', 'name'=>'string', 'value'=>'string'], -'xmlwriter_write_attribute_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], -'xmlwriter_write_cdata' => ['bool', 'writer'=>'resource', 'content'=>'string'], -'xmlwriter_write_comment' => ['bool', 'writer'=>'resource', 'content'=>'string'], -'xmlwriter_write_dtd' => ['bool', 'writer'=>'resource', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], -'xmlwriter_write_dtd_attlist' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], -'xmlwriter_write_dtd_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], -'xmlwriter_write_dtd_entity' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], -'xmlwriter_write_element' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content='=>'string'], -'xmlwriter_write_element_ns' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], -'xmlwriter_write_pi' => ['bool', 'writer'=>'resource', 'target'=>'string', 'content'=>'string'], -'xmlwriter_write_raw' => ['bool', 'writer'=>'resource', 'content'=>'string'], -], + 'added' => [ + 'DateTime::createFromInterface' => ['self', 'object'=>'DateTimeInterface'], + 'DateTimeImmutable::createFromInterface' => ['self', 'object'=>'DateTimeInterface'], + 'fdiv' => ['float', 'num1'=>'float', 'num2'=>'float'], + 'get_debug_type' => ['string', 'value'=>'mixed'], + 'get_resource_id' => ['int', 'resource'=>'resource'], + 'imagegetinterpolation' => ['int', 'image'=>'GdImage'], + 'PhpToken::getTokenName' => ['string'], + 'PhpToken::is' => ['bool', 'kind'=>'string|int|string[]|int[]'], + 'PhpToken::isIgnorable' => ['bool'], + 'PhpToken::tokenize' => ['list', 'code'=>'string', 'flags='=>'int'], + 'ReflectionClass::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], + 'ReflectionClassConstant::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], + 'ReflectionFunctionAbstract::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], + 'ReflectionParameter::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], + 'ReflectionProperty::getAttributes' => ['list', 'name='=>'?string', 'flags='=>'int'], + 'ReflectionUnionType::getTypes' => ['list'], + 'str_contains' => ['bool', 'haystack'=>'string', 'needle'=>'string'], + 'str_ends_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], + 'str_starts_with' => ['bool', 'haystack'=>'string', 'needle'=>'string'], + ], + 'changed' => [ + 'apache_request_headers' => [ + 'old' => ['array|false'], + 'new' => ['array'], + ], + 'array_combine' => [ + 'old' => ['associative-array|false', 'keys'=>'string[]|int[]', 'values'=>'array'], + 'new' => ['associative-array', 'keys'=>'string[]|int[]', 'values'=>'array'], + ], + 'array_key_exists' => [ + 'old' => ['bool', 'key'=>'string|int', 'array'=>'array|ArrayObject'], + 'new' => ['bool', 'key'=>'string|int', 'array'=>'array'], + ], + 'bcdiv' => [ + 'old' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], + 'new' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], + ], + 'bcmod' => [ + 'old' => ['?string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], + 'new' => ['string', 'num1'=>'string', 'num2'=>'string', 'scale='=>'int'], + ], + 'bcpowmod' => [ + 'old' => ['?string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], + 'new' => ['string', 'num'=>'string', 'exponent'=>'string', 'modulus'=>'string', 'scale='=>'int'], + ], + 'collator_get_strength' => [ + 'old' => ['int|false', 'object'=>'collator'], + 'new' => ['int', 'object'=>'collator'], + ], + 'com_load_typelib' => [ + 'old' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'bool'], + 'new' => ['bool', 'typelib'=>'string', 'case_insensitive='=>'true'], + ], + 'count_chars' => [ + 'old' => ['array|false|string', 'string'=>'string', 'mode='=>'int'], + 'new' => ['array|string', 'string'=>'string', 'mode='=>'int'], + ], + 'curl_close' => [ + 'old' => ['void', 'handle'=>'resource'], + 'new' => ['void', 'handle'=>'CurlHandle'], + ], + 'curl_copy_handle' => [ + 'old' => ['resource', 'handle'=>'resource'], + 'new' => ['CurlHandle', 'handle'=>'CurlHandle'], + ], + 'curl_errno' => [ + 'old' => ['int', 'handle'=>'resource'], + 'new' => ['int', 'handle'=>'CurlHandle'], + ], + 'curl_error' => [ + 'old' => ['string', 'handle'=>'resource'], + 'new' => ['string', 'handle'=>'CurlHandle'], + ], + 'curl_escape' => [ + 'old' => ['string|false', 'handle'=>'resource', 'string'=>'string'], + 'new' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], + ], + 'curl_exec' => [ + 'old' => ['bool|string', 'handle'=>'resource'], + 'new' => ['bool|string', 'handle'=>'CurlHandle'], + ], + 'curl_getinfo' => [ + 'old' => ['mixed', 'handle'=>'resource', 'option='=>'int'], + 'new' => ['mixed', 'handle'=>'CurlHandle', 'option='=>'int'], + ], + 'curl_init' => [ + 'old' => ['resource|false', 'url='=>'string'], + 'new' => ['CurlHandle|false', 'url='=>'string'], + ], + 'curl_multi_add_handle' => [ + 'old' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], + 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], + ], + 'curl_multi_close' => [ + 'old' => ['void', 'multi_handle'=>'resource'], + 'new' => ['void', 'multi_handle'=>'CurlMultiHandle'], + ], + 'curl_multi_errno' => [ + 'old' => ['int', 'multi_handle'=>'resource'], + 'new' => ['int', 'multi_handle'=>'CurlMultiHandle'], + ], + 'curl_multi_exec' => [ + 'old' => ['int', 'multi_handle'=>'resource', '&w_still_running'=>'int'], + 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', '&w_still_running'=>'int'], + ], + 'curl_multi_getcontent' => [ + 'old' => ['string', 'handle'=>'resource'], + 'new' => ['string', 'handle'=>'CurlHandle'], + ], + 'curl_multi_info_read' => [ + 'old' => ['array|false', 'multi_handle'=>'resource', '&w_queued_messages='=>'int'], + 'new' => ['array|false', 'multi_handle'=>'CurlMultiHandle', '&w_queued_messages='=>'int'], + ], + 'curl_multi_init' => [ + 'old' => ['resource'], + 'new' => ['CurlMultiHandle'], + ], + 'curl_multi_remove_handle' => [ + 'old' => ['int', 'multi_handle'=>'resource', 'handle'=>'resource'], + 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', 'handle'=>'CurlHandle'], + ], + 'curl_multi_select' => [ + 'old' => ['int', 'multi_handle'=>'resource', 'timeout='=>'float'], + 'new' => ['int', 'multi_handle'=>'CurlMultiHandle', 'timeout='=>'float'], + ], + 'curl_multi_setopt' => [ + 'old' => ['bool', 'multi_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], + 'new' => ['bool', 'multi_handle'=>'CurlMultiHandle', 'option'=>'int', 'value'=>'mixed'], + ], + 'curl_pause' => [ + 'old' => ['int', 'handle'=>'resource', 'flags'=>'int'], + 'new' => ['int', 'handle'=>'CurlHandle', 'flags'=>'int'], + ], + 'curl_reset' => [ + 'old' => ['void', 'handle'=>'resource'], + 'new' => ['void', 'handle'=>'CurlHandle'], + ], + 'curl_setopt' => [ + 'old' => ['bool', 'handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], + 'new' => ['bool', 'handle'=>'CurlHandle', 'option'=>'int', 'value'=>'mixed'], + ], + 'curl_setopt_array' => [ + 'old' => ['bool', 'handle'=>'resource', 'options'=>'array'], + 'new' => ['bool', 'handle'=>'CurlHandle', 'options'=>'array'], + ], + 'curl_share_close' => [ + 'old' => ['void', 'share_handle'=>'resource'], + 'new' => ['void', 'share_handle'=>'CurlShareHandle'], + ], + 'curl_share_errno' => [ + 'old' => ['int', 'share_handle'=>'resource'], + 'new' => ['int', 'share_handle'=>'CurlShareHandle'], + ], + 'curl_share_init' => [ + 'old' => ['resource'], + 'new' => ['CurlShareHandle'], + ], + 'curl_share_setopt' => [ + 'old' => ['bool', 'share_handle'=>'resource', 'option'=>'int', 'value'=>'mixed'], + 'new' => ['bool', 'share_handle'=>'CurlShareHandle', 'option'=>'int', 'value'=>'mixed'], + ], + 'curl_unescape' => [ + 'old' => ['string|false', 'handle'=>'resource', 'string'=>'string'], + 'new' => ['string|false', 'handle'=>'CurlHandle', 'string'=>'string'], + ], + 'date_add' => [ + 'old' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], + 'new' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'], + ], + 'date_date_set' => [ + 'old' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], + 'new' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'month'=>'int', 'day'=>'int'], + ], + 'date_diff' => [ + 'old' => ['DateInterval|false', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], + 'new' => ['DateInterval', 'baseObject'=>'DateTimeInterface', 'targetObject'=>'DateTimeInterface', 'absolute='=>'bool'], + ], + 'date_format' => [ + 'old' => ['string|false', 'object'=>'DateTimeInterface', 'format'=>'string'], + 'new' => ['string', 'object'=>'DateTimeInterface', 'format'=>'string'], + ], + 'date_isodate_set' => [ + 'old' => ['DateTime|false', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], + 'new' => ['DateTime', 'object'=>'DateTime', 'year'=>'int', 'week'=>'int', 'dayOfWeek='=>'int'], + ], + 'date_parse' => [ + 'old' => ['array|false', 'datetime'=>'string'], + 'new' => ['array', 'datetime'=>'string'], + ], + 'date_sub' => [ + 'old' => ['DateTime|false', 'object'=>'DateTime', 'interval'=>'DateInterval'], + 'new' => ['DateTime', 'object'=>'DateTime', 'interval'=>'DateInterval'], + ], + 'date_sun_info' => [ + 'old' => ['array|false', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], + 'new' => ['array', 'timestamp'=>'int', 'latitude'=>'float', 'longitude'=>'float'], + ], + 'date_time_set' => [ + 'old' => ['DateTime|false', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], + 'new' => ['DateTime', 'object'=>'DateTime', 'hour'=>'int', 'minute'=>'int', 'second='=>'int', 'microsecond='=>'int'], + ], + 'date_timestamp_set' => [ + 'old' => ['DateTime|false', 'object'=>'DateTime', 'timestamp'=>'int'], + 'new' => ['DateTime', 'object'=>'DateTime', 'timestamp'=>'int'], + ], + 'date_timezone_set' => [ + 'old' => ['DateTime|false', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], + 'new' => ['DateTime', 'object'=>'DateTime', 'timezone'=>'DateTimeZone'], + ], + 'debug_backtrace' => [ + 'old' => ['list', 'options='=>'int|bool', 'limit='=>'int'], + 'new' => ['list', 'options='=>'int', 'limit='=>'int'], + ], + 'debug_print_backtrace' => [ + 'old' => ['void', 'options='=>'int|bool', 'limit='=>'int'], + 'new' => ['void', 'options='=>'int', 'limit='=>'int'], + ], + 'deflate_add' => [ + 'old' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], + 'new' => ['string|false', 'context'=>'DeflateContext', 'data'=>'string', 'flush_mode='=>'int'], + ], + 'deflate_init' => [ + 'old' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], + 'new' => ['DeflateContext|false', 'encoding'=>'int', 'options='=>'array'], + ], + 'dom_import_simplexml' => [ + 'old' => ['DOMElement|false|null', 'node'=>'SimpleXMLElement'], + 'new' => ['DOMElement|null', 'node'=>'SimpleXMLElement'], + ], + 'easter_date' => [ + 'old' => ['int', 'year='=>'int', 'mode='=>'int'], + 'new' => ['int', 'year='=>'?int', 'mode='=>'int'], + ], + 'enchant_broker_describe' => [ + 'old' => ['array', 'broker'=>'resource'], + 'new' => ['array', 'broker'=>'EnchantBroker'], + ], + 'enchant_broker_dict_exists' => [ + 'old' => ['bool', 'broker'=>'resource', 'tag'=>'string'], + 'new' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string'], + ], + 'enchant_broker_free' => [ + 'old' => ['bool', 'broker'=>'resource'], + 'new' => ['bool', 'broker'=>'EnchantBroker'], + ], + 'enchant_broker_free_dict' => [ + 'old' => ['bool', 'dictionary'=>'resource'], + 'new' => ['bool', 'dictionary'=>'EnchantDictionary'], + ], + 'enchant_broker_get_dict_path' => [ + 'old' => ['string', 'broker'=>'resource', 'type'=>'int'], + 'new' => ['string', 'broker'=>'EnchantBroker', 'type'=>'int'], + ], + 'enchant_broker_get_error' => [ + 'old' => ['string|false', 'broker'=>'resource'], + 'new' => ['string|false', 'broker'=>'EnchantBroker'], + ], + 'enchant_broker_init' => [ + 'old' => ['resource|false'], + 'new' => ['EnchantBroker|false'], + ], + 'enchant_broker_list_dicts' => [ + 'old' => ['array', 'broker'=>'resource'], + 'new' => ['array', 'broker'=>'EnchantBroker'], + ], + 'enchant_broker_request_dict' => [ + 'old' => ['resource|false', 'broker'=>'resource', 'tag'=>'string'], + 'new' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'tag'=>'string'], + ], + 'enchant_broker_request_pwl_dict' => [ + 'old' => ['resource|false', 'broker'=>'resource', 'filename'=>'string'], + 'new' => ['EnchantDictionary|false', 'broker'=>'EnchantBroker', 'filename'=>'string'], + ], + 'enchant_broker_set_dict_path' => [ + 'old' => ['bool', 'broker'=>'resource', 'type'=>'int', 'path'=>'string'], + 'new' => ['bool', 'broker'=>'EnchantBroker', 'type'=>'int', 'path'=>'string'], + ], + 'enchant_broker_set_ordering' => [ + 'old' => ['bool', 'broker'=>'resource', 'tag'=>'string', 'ordering'=>'string'], + 'new' => ['bool', 'broker'=>'EnchantBroker', 'tag'=>'string', 'ordering'=>'string'], + ], + 'enchant_dict_add_to_personal' => [ + 'old' => ['void', 'dictionary'=>'resource', 'word'=>'string'], + 'new' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], + ], + 'enchant_dict_add_to_session' => [ + 'old' => ['void', 'dictionary'=>'resource', 'word'=>'string'], + 'new' => ['void', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], + ], + 'enchant_dict_check' => [ + 'old' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], + 'new' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], + ], + 'enchant_dict_describe' => [ + 'old' => ['array', 'dictionary'=>'resource'], + 'new' => ['array', 'dictionary'=>'EnchantDictionary'], + ], + 'enchant_dict_get_error' => [ + 'old' => ['string', 'dictionary'=>'resource'], + 'new' => ['string', 'dictionary'=>'EnchantDictionary'], + ], + 'enchant_dict_is_in_session' => [ + 'old' => ['bool', 'dictionary'=>'resource', 'word'=>'string'], + 'new' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], + ], + 'enchant_dict_quick_check' => [ + 'old' => ['bool', 'dictionary'=>'resource', 'word'=>'string', '&w_suggestions='=>'array'], + 'new' => ['bool', 'dictionary'=>'EnchantDictionary', 'word'=>'string', '&w_suggestions='=>'array'], + ], + 'enchant_dict_store_replacement' => [ + 'old' => ['void', 'dictionary'=>'resource', 'misspelled'=>'string', 'correct'=>'string'], + 'new' => ['void', 'dictionary'=>'EnchantDictionary', 'misspelled'=>'string', 'correct'=>'string'], + ], + 'enchant_dict_suggest' => [ + 'old' => ['array', 'dictionary'=>'resource', 'word'=>'string'], + 'new' => ['array', 'dictionary'=>'EnchantDictionary', 'word'=>'string'], + ], + 'fpassthru' => [ + 'old' => ['int|false', 'stream'=>'resource'], + 'new' => ['int', 'stream'=>'resource'], + ], + 'gmdate' => [ + 'old' => ['string|false', 'format'=>'string', 'timestamp='=>'int'], + 'new' => ['string', 'format'=>'string', 'timestamp='=>'int'], + ], + 'gmp_binomial' => [ + 'old' => ['GMP|false', 'n'=>'GMP|string|int', 'k'=>'int'], + 'new' => ['GMP', 'n'=>'GMP|string|int', 'k'=>'int'], + ], + 'gmp_export' => [ + 'old' => ['string|false', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], + 'new' => ['string', 'num'=>'GMP|string|int', 'word_size='=>'int', 'flags='=>'int'], + ], + 'gmp_import' => [ + 'old' => ['GMP|false', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], + 'new' => ['GMP', 'data'=>'string', 'word_size='=>'int', 'flags='=>'int'], + ], + 'gmp_random_seed' => [ + 'old' => ['void|false', 'seed'=>'GMP|string|int'], + 'new' => ['void', 'seed'=>'GMP|string|int'], + ], + 'gzpassthru' => [ + 'old' => ['int|false', 'stream'=>'resource'], + 'new' => ['int', 'stream'=>'resource'], + ], + 'hash_hkdf' => [ + 'old' => ['string|false', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], + 'new' => ['string', 'algo'=>'string', 'key'=>'string', 'length='=>'int', 'info='=>'string', 'salt='=>'string'], + ], + 'imageaffine' => [ + 'old' => ['resource|false', 'image'=>'resource', 'affine'=>'array', 'clip='=>'array'], + 'new' => ['false|GdImage', 'image'=>'GdImage', 'affine'=>'array', 'clip='=>'array'], + ], + 'imagealphablending' => [ + 'old' => ['bool', 'image'=>'resource', 'enable'=>'bool'], + 'new' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], + ], + 'imageantialias' => [ + 'old' => ['bool', 'image'=>'resource', 'enable'=>'bool'], + 'new' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], + ], + 'imagearc' => [ + 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int'], + ], + 'imagebmp' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'null|resource|string', 'compressed='=>'bool'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'null|resource|string', 'compressed='=>'bool'], + ], + 'imagechar' => [ + 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], + ], + 'imagecharup' => [ + 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'char'=>'string', 'color'=>'int'], + ], + 'imagecolorallocate' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + ], + 'imagecolorallocatealpha' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + ], + 'imagecolorat' => [ + 'old' => ['int|false', 'image'=>'resource', 'x'=>'int', 'y'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int'], + ], + 'imagecolorclosest' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + ], + 'imagecolorclosestalpha' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + ], + 'imagecolorclosesthwb' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + ], + 'imagecolordeallocate' => [ + 'old' => ['bool', 'image'=>'resource', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'color'=>'int'], + ], + 'imagecolorexact' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + ], + 'imagecolorexactalpha' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + ], + 'imagecolormatch' => [ + 'old' => ['bool', 'image1'=>'resource', 'image2'=>'resource'], + 'new' => ['bool', 'image1'=>'GdImage', 'image2'=>'GdImage'], + ], + 'imagecolorresolve' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int'], + ], + 'imagecolorresolvealpha' => [ + 'old' => ['int|false', 'image'=>'resource', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + 'new' => ['int|false', 'image'=>'GdImage', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha'=>'int'], + ], + 'imagecolorset' => [ + 'old' => ['void', 'image'=>'resource', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], + 'new' => ['void', 'image'=>'GdImage', 'color'=>'int', 'red'=>'int', 'green'=>'int', 'blue'=>'int', 'alpha='=>'int'], + ], + 'imagecolorsforindex' => [ + 'old' => ['array|false', 'image'=>'resource', 'color'=>'int'], + 'new' => ['array|false', 'image'=>'GdImage', 'color'=>'int'], + ], + 'imagecolorstotal' => [ + 'old' => ['int|false', 'image'=>'resource'], + 'new' => ['int', 'image'=>'GdImage'], + ], + 'imagecolortransparent' => [ + 'old' => ['int|false', 'image'=>'resource', 'color='=>'int'], + 'new' => ['int|null', 'image'=>'GdImage', 'color='=>'int'], + ], + 'imageconvolution' => [ + 'old' => ['bool', 'image'=>'resource', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], + 'new' => ['bool', 'image'=>'GdImage', 'matrix'=>'array', 'divisor'=>'float', 'offset'=>'float'], + ], + 'imagecopy' => [ + 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int'], + 'new' => ['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' => [ + 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], + 'new' => ['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'], + ], + 'imagecopymergegray' => [ + 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'src_width'=>'int', 'src_height'=>'int', 'pct'=>'int'], + 'new' => ['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'], + ], + 'imagecopyresampled' => [ + 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], + 'new' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], + ], + 'imagecopyresized' => [ + 'old' => ['bool', 'dst_image'=>'resource', 'src_image'=>'resource', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], + 'new' => ['bool', 'dst_image'=>'GdImage', 'src_image'=>'GdImage', 'dst_x'=>'int', 'dst_y'=>'int', 'src_x'=>'int', 'src_y'=>'int', 'dst_width'=>'int', 'dst_height'=>'int', 'src_width'=>'int', 'src_height'=>'int'], + ], + 'imagecreate' => [ + 'old' => ['resource|false', 'width'=>'int', 'height'=>'int'], + 'new' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], + ], + 'imagecreatefrombmp' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromgd' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromgd2' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromgd2part' => [ + 'old' => ['resource|false', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], + 'new' => ['false|GdImage', 'filename'=>'string', 'x'=>'int', 'y'=>'int', 'width'=>'int', 'height'=>'int'], + ], + 'imagecreatefromgif' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromjpeg' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefrompng' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromstring' => [ + 'old' => ['resource|false', 'data'=>'string'], + 'new' => ['false|GdImage', 'data'=>'string'], + ], + 'imagecreatefromtga' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromwbmp' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromwebp' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromxbm' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatefromxpm' => [ + 'old' => ['resource|false', 'filename'=>'string'], + 'new' => ['false|GdImage', 'filename'=>'string'], + ], + 'imagecreatetruecolor' => [ + 'old' => ['resource|false', 'width'=>'int', 'height'=>'int'], + 'new' => ['false|GdImage', 'width'=>'int', 'height'=>'int'], + ], + 'imagecrop' => [ + 'old' => ['resource|false', 'image'=>'resource', 'rectangle'=>'array'], + 'new' => ['false|GdImage', 'image'=>'GdImage', 'rectangle'=>'array'], + ], + 'imagecropauto' => [ + 'old' => ['resource|false', 'image'=>'resource', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], + 'new' => ['false|GdImage', 'image'=>'GdImage', 'mode='=>'int', 'threshold='=>'float', 'color='=>'int'], + ], + 'imagedashedline' => [ + 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + ], + 'imagedestroy' => [ + 'old' => ['bool', 'image'=>'resource'], + 'new' => ['bool', 'image'=>'GdImage'], + ], + 'imageellipse' => [ + 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], + ], + 'imagefill' => [ + 'old' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'], + ], + 'imagefilledarc' => [ + 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'start_angle'=>'int', 'end_angle'=>'int', 'color'=>'int', 'style'=>'int'], + ], + 'imagefilledellipse' => [ + 'old' => ['bool', 'image'=>'resource', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'center_x'=>'int', 'center_y'=>'int', 'width'=>'int', 'height'=>'int', 'color'=>'int'], + ], + 'imagefilledpolygon' => [ + 'old' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], + ], + 'imagefilledrectangle' => [ + 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + ], + 'imagefilltoborder' => [ + 'old' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'border_color'=>'int', 'color'=>'int'], + ], + 'imagefilter' => [ + 'old' => ['bool', 'image'=>'resource', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'filter'=>'int', '...args='=>'int', 'arg2='=>'int', 'arg3='=>'int', 'arg4='=>'int'], + ], + 'imageflip' => [ + 'old' => ['bool', 'image'=>'resource', 'mode'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'mode'=>'int'], + ], + 'imagefttext' => [ + 'old' => ['array|false', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], + 'new' => ['array|false', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], + ], + 'imagegammacorrect' => [ + 'old' => ['bool', 'image'=>'resource', 'input_gamma'=>'float', 'output_gamma'=>'float'], + 'new' => ['bool', 'image'=>'GdImage', 'input_gamma'=>'float', 'output_gamma'=>'float'], + ], + 'imagegd' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'?string'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'string'], + ], + 'imagegd2' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'chunk_size='=>'int', 'mode='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'string', 'chunk_size='=>'int', 'mode='=>'int'], + ], + 'imagegetclip' => [ + 'old' => ['array|false', 'image'=>'resource'], + 'new' => ['array', 'image'=>'GdImage'], + ], + 'imagegif' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'?string'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string'], + ], + 'imagegrabscreen' => [ + 'old' => ['false|resource'], + 'new' => ['false|GdImage'], + ], + 'imagegrabwindow' => [ + 'old' => ['false|resource', 'handle'=>'int', 'client_area='=>'bool'], + 'new' => ['false|GdImage', 'handle'=>'int', 'client_area='=>'bool'], + ], + 'imageinterlace' => [ + 'old' => ['int|false', 'image'=>'resource', 'enable='=>'?bool'], + 'new' => ['int', 'image'=>'GdImage', 'enable='=>'?bool'], + ], + 'imageistruecolor' => [ + 'old' => ['bool', 'image'=>'resource'], + 'new' => ['bool', 'image'=>'GdImage'], + ], + 'imagejpeg' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'], + ], + 'imagelayereffect' => [ + 'old' => ['bool', 'image'=>'resource', 'effect'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'effect'=>'int'], + ], + 'imageline' => [ + 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + ], + 'imageopenpolygon' => [ + 'old' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], + ], + 'imagepalettecopy' => [ + 'old' => ['void', 'dst'=>'resource', 'src'=>'resource'], + 'new' => ['void', 'dst'=>'GdImage', 'src'=>'GdImage'], + ], + 'imagepalettetotruecolor' => [ + 'old' => ['bool', 'image'=>'resource'], + 'new' => ['bool', 'image'=>'GdImage'], + ], + 'imagepng' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int', 'filters='=>'int'], + ], + 'imagepolygon' => [ + 'old' => ['bool', 'image'=>'resource', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'points'=>'array', 'num_points_or_color'=>'int', 'color='=>'int'], + ], + 'imagerectangle' => [ + 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int', 'color'=>'int'], + ], + 'imageresolution' => [ + 'old' => ['array|bool', 'image'=>'resource', 'resolution_x='=>'int', 'resolution_y='=>'int'], + 'new' => ['array|bool', 'image'=>'GdImage', 'resolution_x='=>'int', 'resolution_y='=>'int'], + ], + 'imagerotate' => [ + 'old' => ['resource|false', 'image'=>'resource', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], + 'new' => ['false|GdImage', 'image'=>'GdImage', 'angle'=>'float', 'background_color'=>'int', 'ignore_transparent='=>'bool'], + ], + 'imagesavealpha' => [ + 'old' => ['bool', 'image'=>'resource', 'enable'=>'bool'], + 'new' => ['bool', 'image'=>'GdImage', 'enable'=>'bool'], + ], + 'imagescale' => [ + 'old' => ['resource|false', 'image'=>'resource', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], + 'new' => ['false|GdImage', 'image'=>'GdImage', 'width'=>'int', 'height='=>'int', 'mode='=>'int'], + ], + 'imagesetbrush' => [ + 'old' => ['bool', 'image'=>'resource', 'brush'=>'resource'], + 'new' => ['bool', 'image'=>'GdImage', 'brush'=>'GdImage'], + ], + 'imagesetclip' => [ + 'old' => ['bool', 'image'=>'resource', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x1'=>'int', 'y1'=>'int', 'x2'=>'int', 'y2'=>'int'], + ], + 'imagesetinterpolation' => [ + 'old' => ['bool', 'image'=>'resource', 'method='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'method='=>'int'], + ], + 'imagesetpixel' => [ + 'old' => ['bool', 'image'=>'resource', 'x'=>'int', 'y'=>'int', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'x'=>'int', 'y'=>'int', 'color'=>'int'], + ], + 'imagesetstyle' => [ + 'old' => ['bool', 'image'=>'resource', 'style'=>'non-empty-array'], + 'new' => ['bool', 'image'=>'GdImage', 'style'=>'non-empty-array'], + ], + 'imagesetthickness' => [ + 'old' => ['bool', 'image'=>'resource', 'thickness'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'thickness'=>'int'], + ], + 'imagesettile' => [ + 'old' => ['bool', 'image'=>'resource', 'tile'=>'resource'], + 'new' => ['bool', 'image'=>'GdImage', 'tile'=>'GdImage'], + ], + 'imagestring' => [ + 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], + ], + 'imagestringup' => [ + 'old' => ['bool', 'image'=>'resource', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'font'=>'int', 'x'=>'int', 'y'=>'int', 'string'=>'string', 'color'=>'int'], + ], + 'imagesx' => [ + 'old' => ['int|false', 'image'=>'resource'], + 'new' => ['int', 'image'=>'GdImage'], + ], + 'imagesy' => [ + 'old' => ['int|false', 'image'=>'resource'], + 'new' => ['int', 'image'=>'GdImage'], + ], + 'imagetruecolortopalette' => [ + 'old' => ['bool', 'image'=>'resource', 'dither'=>'bool', 'num_colors'=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'dither'=>'bool', 'num_colors'=>'int'], + ], + 'imagettftext' => [ + 'old' => ['false|array', 'image'=>'resource', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], + 'new' => ['false|array', 'image'=>'GdImage', 'size'=>'float', 'angle'=>'float', 'x'=>'int', 'y'=>'int', 'color'=>'int', 'font_filename'=>'string', 'text'=>'string', 'options='=>'array'], + ], + 'imagewbmp' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'foreground_color='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'foreground_color='=>'int'], + ], + 'imagewebp' => [ + 'old' => ['bool', 'image'=>'resource', 'file='=>'?string', 'quality='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'file='=>'?string', 'quality='=>'int'], + ], + 'imagexbm' => [ + 'old' => ['bool', 'image'=>'resource', 'filename'=>'?string', 'foreground_color='=>'int'], + 'new' => ['bool', 'image'=>'GdImage', 'filename'=>'?string', 'foreground_color='=>'int'], + ], + 'imap_mailboxmsginfo' => [ + 'old' => ['stdClass|false', 'imap'=>'resource'], + 'new' => ['stdClass', 'imap'=>'resource'], + ], + 'inflate_add' => [ + 'old' => ['string|false', 'context'=>'resource', 'data'=>'string', 'flush_mode='=>'int'], + 'new' => ['string|false', 'context'=>'InflateContext', 'data'=>'string', 'flush_mode='=>'int'], + ], + 'inflate_get_read_len' => [ + 'old' => ['int|false', 'context'=>'resource'], + 'new' => ['int', 'context'=>'InflateContext'], + ], + 'inflate_get_status' => [ + 'old' => ['int|false', 'context'=>'resource'], + 'new' => ['int', 'context'=>'InflateContext'], + ], + 'inflate_init' => [ + 'old' => ['resource|false', 'encoding'=>'int', 'options='=>'array'], + 'new' => ['InflateContext|false', 'encoding'=>'int', 'options='=>'array'], + ], + 'ldap_count_entries' => [ + 'old' => ['int|false', 'ldap'=>'resource', 'result'=>'resource'], + 'new' => ['int', 'ldap'=>'resource', 'result'=>'resource'], + ], + 'ldap_get_attributes' => [ + 'old' => ['array|false', 'ldap'=>'resource', 'entry'=>'resource'], + 'new' => ['array', 'ldap'=>'resource', 'entry'=>'resource'], + ], + 'mb_convert_case' => [ + 'old' => ['string|false', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'mode'=>'int', 'encoding='=>'string'], + ], + 'mb_convert_kana' => [ + 'old' => ['string|false', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'mode='=>'string', 'encoding='=>'string'], + ], + 'mb_decode_numericentity' => [ + 'old' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'is_hex='=>'bool'], + 'new' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string'], + ], + 'mb_encode_mimeheader' => [ + 'old' => ['string|false', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], + 'new' => ['string', 'string'=>'string', 'charset='=>'string', 'transfer_encoding='=>'string', 'newline='=>'string', 'indent='=>'int'], + ], + 'mb_encode_numericentity' => [ + 'old' => ['string|false', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], + 'new' => ['string', 'string'=>'string', 'map'=>'array', 'encoding='=>'string', 'hex='=>'bool'], + ], + 'mb_encoding_aliases' => [ + 'old' => ['list|false', 'encoding'=>'string'], + 'new' => ['list', 'encoding'=>'string'], + ], + 'mb_ereg' => [ + 'old' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], + 'new' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], + ], + 'mb_eregi' => [ + 'old' => ['int|false', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], + 'new' => ['bool', 'pattern'=>'string', 'string'=>'string', '&w_matches='=>'array'], + ], + 'mb_scrub' => [ + 'old' => ['string|false', 'string'=>'string', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'encoding='=>'string'], + ], + 'mb_strcut' => [ + 'old' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'int', 'encoding='=>'string'], + ], + 'mb_strimwidth' => [ + 'old' => ['string|false', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'start'=>'int', 'width'=>'int', 'trim_marker='=>'string', 'encoding='=>'string'], + ], + 'mb_strlen' => [ + 'old' => ['int|false', 'string'=>'string', 'encoding='=>'string'], + 'new' => ['int', 'string'=>'string', 'encoding='=>'string'], + ], + 'mb_strtolower' => [ + 'old' => ['string|false', 'string'=>'string', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'encoding='=>'string'], + ], + 'mb_strtoupper' => [ + 'old' => ['string|false', 'string'=>'string', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'encoding='=>'string'], + ], + 'mb_strwidth' => [ + 'old' => ['int|false', 'string'=>'string', 'encoding='=>'string'], + 'new' => ['int', 'string'=>'string', 'encoding='=>'string'], + ], + 'mb_substr' => [ + 'old' => ['string|false', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], + 'new' => ['string', 'string'=>'string', 'start'=>'int', 'length='=>'?int', 'encoding='=>'string'], + ], + 'mb_substr_count' => [ + 'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], + 'new' => ['int', 'haystack'=>'string', 'needle'=>'string', 'encoding='=>'string'], + ], + 'msg_get_queue' => [ + 'old' => ['resource', 'key'=>'int', 'permissions='=>'int'], + 'new' => ['SysvMessageQueue', 'key'=>'int', 'permissions='=>'int'], + ], + 'msg_remove_queue' => [ + 'old' => ['bool', 'queue'=>'resource'], + 'new' => ['bool', 'queue'=>'SysvMessageQueue'], + ], + 'msg_send' => [ + 'old' => ['bool', 'queue'=>'resource', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], + 'new' => ['bool', 'queue'=>'SysvMessageQueue', 'message_type'=>'int', 'message'=>'array|object|bool|float|int|string|null', 'serialize='=>'bool', 'blocking='=>'bool', '&w_error_code='=>'int'], + ], + 'msg_set_queue' => [ + 'old' => ['bool', 'queue'=>'resource', 'data'=>'array'], + 'new' => ['bool', 'queue'=>'SysvMessageQueue', 'data'=>'array'], + ], + 'msg_stat_queue' => [ + 'old' => ['array', 'queue'=>'resource'], + 'new' => ['array', 'queue'=>'SysvMessageQueue'], + ], + 'mysqli_fetch_fields' => [ + 'old' => ['?array', 'result'=>'mysqli_result'], + 'new' => ['array', 'result'=>'mysqli_result'], + ], + 'mysqli_get_client_stats' => [ + 'old' => ['array|false'], + 'new' => ['array'], + ], + 'mysqli_get_connection_stats' => [ + 'old' => ['array|false', 'mysql'=>'mysqli'], + 'new' => ['array', 'mysql'=>'mysqli'], + ], + 'mysqli_stmt_attr_get' => [ + 'old' => ['int|false', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], + 'new' => ['int', 'statement'=>'mysqli_stmt', 'attribute'=>'int'], + ], + 'numfmt_create' => [ + 'old' => ['NumberFormatter|false', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], + 'new' => ['NumberFormatter|null', 'locale'=>'string', 'style'=>'int', 'pattern='=>'string'], + ], + 'ob_implicit_flush' => [ + 'old' => ['void', 'enable='=>'int'], + 'new' => ['void', 'enable='=>'bool'], + ], + 'oci_collection_append' => [ + 'old' => ['bool', 'collection'=>'resource', 'value'=>'string'], + 'new' => ['bool', 'collection'=>'OCICollection', 'value'=>'string'], + ], + 'oci_collection_assign' => [ + 'old' => ['bool', 'to'=>'resource', 'from'=>'object'], + 'new' => ['bool', 'to'=>'OCICollection', 'from'=>'OCICollection'], + ], + 'oci_collection_element_assign' => [ + 'old' => ['bool', 'collection'=>'resource', 'index'=>'int', 'value'=>'string'], + 'new' => ['bool', 'collection'=>'OCICollection', 'index'=>'int', 'value'=>'string'], + ], + 'oci_collection_element_get' => [ + 'old' => ['string', 'collection'=>'resource', 'index'=>'int'], + 'new' => ['string', 'collection'=>'OCICollection', 'index'=>'int'], + ], + 'oci_collection_max' => [ + 'old' => ['int', 'collection'=>'resource'], + 'new' => ['int', 'collection'=>'OCICollection'], + ], + 'oci_collection_size' => [ + 'old' => ['int', 'collection'=>'resource'], + 'new' => ['int', 'collection'=>'OCICollection'], + ], + 'oci_collection_trim' => [ + 'old' => ['bool', 'collection'=>'resource', 'num'=>'int'], + 'new' => ['bool', 'collection'=>'OCICollection', 'num'=>'int'], + ], + 'oci_fetch_all' => [ + 'old' => ['int|false', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], + 'new' => ['int', 'statement'=>'resource', '&w_output'=>'array', 'offset='=>'int', 'limit='=>'int', 'flags='=>'int'], + ], + 'oci_free_collection' => [ + 'old' => ['bool', 'collection'=>'resource'], + 'new' => ['bool', 'collection'=>'OCICollection'], + ], + 'oci_free_descriptor' => [ + 'old' => ['bool', 'lob'=>'resource'], + 'new' => ['bool', 'lob'=>'OCILob'], + ], + 'oci_new_descriptor' => [ + 'old' => ['OCILob|false', 'connection'=>'resource', 'type='=>'int'], + 'new' => ['?OCILob', 'connection'=>'resource', 'type='=>'int'], + ], + 'openssl_csr_export' => [ + 'old' => ['bool', 'csr'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], + 'new' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', '&w_output'=>'OpenSSLAsymmetricKey', 'no_text='=>'bool'], + ], + 'openssl_csr_export_to_file' => [ + 'old' => ['bool', 'csr'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], + 'new' => ['bool', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'output_filename'=>'string', 'no_text='=>'bool'], + ], + 'openssl_csr_get_public_key' => [ + 'old' => ['resource|false', 'csr'=>'string|resource', 'short_names='=>'bool'], + 'new' => ['OpenSSLAsymmetricKey|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], + ], + 'openssl_csr_get_subject' => [ + 'old' => ['array|false', 'csr'=>'string|resource', 'short_names='=>'bool'], + 'new' => ['array|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'short_names='=>'bool'], + ], + 'openssl_csr_new' => [ + 'old' => ['resource|false', 'distinguished_names'=>'array', '&w_private_key'=>'resource', 'options='=>'array', 'extra_attributes='=>'array'], + 'new' => ['OpenSSLCertificateSigningRequest|false', 'distinguished_names'=>'array', '&w_private_key'=>'OpenSSLAsymmetricKey', 'options='=>'array', 'extra_attributes='=>'array'], + ], + 'openssl_csr_sign' => [ + 'old' => ['resource|false', 'csr'=>'string|resource', 'ca_certificate'=>'string|resource|null', 'private_key'=>'string|resource|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], + 'new' => ['OpenSSLCertificate|false', 'csr'=>'string|OpenSSLCertificateSigningRequest', 'ca_certificate'=>'string|OpenSSLCertificate|null', 'private_key'=>'string|OpenSSLAsymmetricKey|OpenSSLCertificate|array', 'days'=>'int', 'options='=>'array', 'serial='=>'int'], + ], + 'openssl_dh_compute_key' => [ + 'old' => ['string|false', 'public_key'=>'string', 'private_key'=>'resource'], + 'new' => ['string|false', 'public_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey'], + ], + 'openssl_free_key' => [ + 'old' => ['void', 'key'=>'resource'], + 'new' => ['void', 'key'=>'OpenSSLAsymmetricKey'], + ], + 'openssl_get_privatekey' => [ + 'old' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], + 'new' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], + ], + 'openssl_get_publickey' => [ + 'old' => ['resource|false', 'public_key'=>'resource|string'], + 'new' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], + ], + 'openssl_open' => [ + 'old' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'string|array|resource', 'cipher_algo'=>'string', 'iv='=>'string'], + 'new' => ['bool', 'data'=>'string', '&w_output'=>'string', 'encrypted_key'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'cipher_algo'=>'string', 'iv='=>'string'], + ], + 'openssl_pkcs12_export' => [ + 'old' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], + 'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], + ], + 'openssl_pkcs12_export_to_file' => [ + 'old' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'private_key'=>'string|array|resource', 'passphrase'=>'string', 'options='=>'array'], + 'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'passphrase'=>'string', 'options='=>'array'], + ], + 'openssl_pkcs7_decrypt' => [ + 'old' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key='=>'string|resource|array'], + 'new' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key='=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|null|string'], + ], + 'openssl_pkcs7_encrypt' => [ + 'old' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], + 'new' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'cipher_algo='=>'int'], + ], + 'openssl_pkcs7_sign' => [ + 'old' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], + 'new' => ['bool', 'input_filename'=>'string', 'output_filename'=>'string', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'headers'=>'array', 'flags='=>'int', 'untrusted_certificates_filename='=>'string'], + ], + 'openssl_pkey_derive' => [ + 'old' => ['string|false', 'public_key'=>'mixed', 'private_key'=>'mixed', 'key_length='=>'?int'], + 'new' => ['string|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'key_length='=>'int'], + ], + 'openssl_pkey_export' => [ + 'old' => ['bool', 'key'=>'resource', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], + 'new' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', '&w_output'=>'string', 'passphrase='=>'?string', 'options='=>'array'], + ], + 'openssl_pkey_export_to_file' => [ + 'old' => ['bool', 'key'=>'resource|string|array', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], + 'new' => ['bool', 'key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'output_filename'=>'string', 'passphrase='=>'?string', 'options='=>'array'], + ], + 'openssl_pkey_free' => [ + 'old' => ['void', 'key'=>'resource'], + 'new' => ['void', 'key'=>'OpenSSLAsymmetricKey'], + ], + 'openssl_pkey_get_details' => [ + 'old' => ['array|false', 'key'=>'resource'], + 'new' => ['array|false', 'key'=>'OpenSSLAsymmetricKey'], + ], + 'openssl_pkey_get_private' => [ + 'old' => ['resource|false', 'private_key'=>'string', 'passphrase='=>'string'], + 'new' => ['OpenSSLAsymmetricKey|false', 'private_key'=>'string', 'passphrase='=>'string'], + ], + 'openssl_pkey_get_public' => [ + 'old' => ['resource|false', 'public_key'=>'resource|string'], + 'new' => ['OpenSSLAsymmetricKey|false', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string|string'], + ], + 'openssl_pkey_new' => [ + 'old' => ['resource|false', 'options='=>'array'], + 'new' => ['OpenSSLAsymmetricKey|false', 'options='=>'array'], + ], + 'openssl_private_decrypt' => [ + 'old' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], + 'new' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], + ], + 'openssl_private_encrypt' => [ + 'old' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'string|resource|array', 'padding='=>'int'], + 'new' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], + ], + 'openssl_public_decrypt' => [ + 'old' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], + 'new' => ['bool', 'data'=>'string', '&w_decrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], + ], + 'openssl_public_encrypt' => [ + 'old' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'string|resource', 'padding='=>'int'], + 'new' => ['bool', 'data'=>'string', '&w_encrypted_data'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'padding='=>'int'], + ], + 'openssl_random_pseudo_bytes' => [ + 'old' => ['string|false', 'length'=>'int', '&w_strong_result='=>'bool'], + 'new' => ['string', 'length'=>'int', '&w_strong_result='=>'bool'], + ], + 'openssl_sign' => [ + 'old' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'resource|string', 'algorithm='=>'int|string'], + 'new' => ['bool', 'data'=>'string', '&w_signature'=>'string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], + ], + 'openssl_spki_export' => [ + 'old' => ['?string', 'spki'=>'string'], + 'new' => ['false|string', 'spki'=>'string'], + ], + 'openssl_spki_export_challenge' => [ + 'old' => ['?string', 'spki'=>'string'], + 'new' => ['false|string', 'spki'=>'string'], + ], + 'openssl_spki_new' => [ + 'old' => ['?string', 'private_key'=>'resource', 'challenge'=>'string', 'digest_algo='=>'int'], + 'new' => ['false|string', 'private_key'=>'OpenSSLAsymmetricKey', 'challenge'=>'string', 'digest_algo='=>'int'], + ], + 'openssl_verify' => [ + 'old' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'resource|string', 'algorithm='=>'int|string'], + 'new' => ['int', 'data'=>'string', 'signature'=>'string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string', 'algorithm='=>'int|string'], + ], + 'openssl_x509_check_private_key' => [ + 'old' => ['bool', 'certificate'=>'string|resource', 'private_key'=>'string|resource|array'], + 'new' => ['bool', 'certificate'=>'OpenSSLCertificate|string', 'private_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], + ], + 'openssl_x509_checkpurpose' => [ + 'old' => ['bool|int', 'certificate'=>'string|resource', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], + 'new' => ['bool|int', 'certificate'=>'string|OpenSSLCertificate', 'purpose'=>'int', 'ca_info='=>'array', 'untrusted_certificates_file='=>'string'], + ], + 'openssl_x509_export' => [ + 'old' => ['bool', 'certificate'=>'string|resource', '&w_output'=>'string', 'no_text='=>'bool'], + 'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', '&w_output'=>'string', 'no_text='=>'bool'], + ], + 'openssl_x509_export_to_file' => [ + 'old' => ['bool', 'certificate'=>'string|resource', 'output_filename'=>'string', 'no_text='=>'bool'], + 'new' => ['bool', 'certificate'=>'string|OpenSSLCertificate', 'output_filename'=>'string', 'no_text='=>'bool'], + ], + 'openssl_x509_fingerprint' => [ + 'old' => ['string|false', 'certificate'=>'string|resource', 'digest_algo='=>'string', 'binary='=>'bool'], + 'new' => ['string|false', 'certificate'=>'string|OpenSSLCertificate', 'digest_algo='=>'string', 'binary='=>'bool'], + ], + 'openssl_x509_free' => [ + 'old' => ['void', 'certificate'=>'resource'], + 'new' => ['void', 'certificate'=>'OpenSSLCertificate'], + ], + 'openssl_x509_parse' => [ + 'old' => ['array|false', 'certificate'=>'string|resource', 'short_names='=>'bool'], + 'new' => ['array|false', 'certificate'=>'string|OpenSSLCertificate', 'short_names='=>'bool'], + ], + 'openssl_x509_read' => [ + 'old' => ['resource|false', 'certificate'=>'string|resource'], + 'new' => ['OpenSSLCertificate|false', 'certificate'=>'string|OpenSSLCertificate'], + ], + 'openssl_x509_verify' => [ + 'old' => ['int', 'certificate'=>'string|resource', 'public_key'=>'string|resource'], + 'new' => ['int', 'certificate'=>'OpenSSLCertificate|string', 'public_key'=>'OpenSSLAsymmetricKey|OpenSSLCertificate|array|string'], + ], + 'password_hash' => [ + 'old' => ['string|false|null', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], + 'new' => ['string', 'password'=>'string', 'algo'=>'?string|?int', 'options='=>'array'], + ], + 'pg_fetch_all' => [ + 'old' => ['array|false', 'result'=>'resource', 'mode='=>'int'], + 'new' => ['array', 'result'=>'resource', 'mode='=>'int'], + ], + 'pg_fetch_all_columns' => [ + 'old' => ['array|false', 'result'=>'resource', 'field='=>'int'], + 'new' => ['array', 'result'=>'resource', 'field='=>'int'], + ], + 'proc_get_status' => [ + 'old' => ['array|false', 'process'=>'resource'], + 'new' => ['array', 'process'=>'resource'], + ], + 'sem_acquire' => [ + 'old' => ['bool', 'semaphore'=>'resource', 'non_blocking='=>'bool'], + 'new' => ['bool', 'semaphore'=>'SysvSemaphore', 'non_blocking='=>'bool'], + ], + 'sem_get' => [ + 'old' => ['resource|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'], + 'new' => ['SysvSemaphore|false', 'key'=>'int', 'max_acquire='=>'int', 'permissions='=>'int', 'auto_release='=>'bool'], + ], + 'sem_release' => [ + 'old' => ['bool', 'semaphore'=>'resource'], + 'new' => ['bool', 'semaphore'=>'SysvSemaphore'], + ], + 'sem_remove' => [ + 'old' => ['bool', 'semaphore'=>'resource'], + 'new' => ['bool', 'semaphore'=>'SysvSemaphore'], + ], + 'shm_attach' => [ + 'old' => ['resource', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'], + 'new' => ['SysvSharedMemory', 'key'=>'int', 'size='=>'int', 'permissions='=>'int'], + ], + 'shm_detach' => [ + 'old' => ['bool', 'shm'=>'resource'], + 'new' => ['bool', 'shm'=>'SysvSharedMemory'], + ], + 'shm_get_var' => [ + 'old' => ['mixed', 'shm'=>'resource', 'key'=>'int'], + 'new' => ['mixed', 'shm'=>'SysvSharedMemory', 'key'=>'int'], + ], + 'shm_has_var' => [ + 'old' => ['bool', 'shm'=>'resource', 'key'=>'int'], + 'new' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'], + ], + 'shm_put_var' => [ + 'old' => ['bool', 'shm'=>'resource', 'key'=>'int', 'value'=>'mixed'], + 'new' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int', 'value'=>'mixed'], + ], + 'shm_remove' => [ + 'old' => ['bool', 'shm'=>'resource'], + 'new' => ['bool', 'shm'=>'SysvSharedMemory'], + ], + 'shm_remove_var' => [ + 'old' => ['bool', 'shm'=>'resource', 'key'=>'int'], + 'new' => ['bool', 'shm'=>'SysvSharedMemory', 'key'=>'int'], + ], + 'shmop_close' => [ + 'old' => ['void', 'shmop'=>'resource'], + 'new' => ['void', 'shmop'=>'Shmop'], + ], + 'shmop_delete' => [ + 'old' => ['bool', 'shmop'=>'resource'], + 'new' => ['bool', 'shmop'=>'Shmop'], + ], + 'shmop_open' => [ + 'old' => ['resource|false', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], + 'new' => ['Shmop', 'key'=>'int', 'mode'=>'string', 'permissions'=>'int', 'size'=>'int'], + ], + 'shmop_read' => [ + 'old' => ['string|false', 'shmop'=>'resource', 'offset'=>'int', 'size'=>'int'], + 'new' => ['string', 'shmop'=>'Shmop', 'offset'=>'int', 'size'=>'int'], + ], + 'shmop_size' => [ + 'old' => ['int', 'shmop'=>'resource'], + 'new' => ['int', 'shmop'=>'Shmop'], + ], + 'shmop_write' => [ + 'old' => ['int|false', 'shmop'=>'resource', 'data'=>'string', 'offset'=>'int'], + 'new' => ['int', 'shmop'=>'Shmop', 'data'=>'string', 'offset'=>'int'], + ], + 'simplexml_import_dom' => [ + 'old' => ['SimpleXMLElement|false', 'node'=>'DOMNode', 'class_name='=>'string'], + 'new' => ['SimpleXMLElement', 'node'=>'DOMNode', 'class_name='=>'string'], + ], + 'sleep' => [ + 'old' => ['int|false', 'seconds'=>'int'], + 'new' => ['int', 'seconds'=>'int'], + ], + 'socket_accept' => [ + 'old' => ['resource|false', 'socket'=>'resource'], + 'new' => ['Socket|false', 'socket'=>'Socket'], + ], + 'socket_addrinfo_bind' => [ + 'old' => ['?resource', 'address'=>'resource'], + 'new' => ['Socket|false', 'address'=>'AddressInfo'], + ], + 'socket_addrinfo_connect' => [ + 'old' => ['?resource', 'address'=>'resource'], + 'new' => ['Socket|false', 'address'=>'AddressInfo'], + ], + 'socket_addrinfo_explain' => [ + 'old' => ['array', 'address'=>'resource'], + 'new' => ['array', 'address'=>'AddressInfo'], + ], + 'socket_addrinfo_lookup' => [ + 'old' => ['resource[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], + 'new' => ['AddressInfo[]', 'host'=>'string', 'service='=>'?string', 'hints='=>'array'], + ], + 'socket_bind' => [ + 'old' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], + 'new' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], + ], + 'socket_clear_error' => [ + 'old' => ['void', 'socket='=>'resource'], + 'new' => ['void', 'socket='=>'Socket'], + ], + 'socket_close' => [ + 'old' => ['void', 'socket'=>'resource'], + 'new' => ['void', 'socket'=>'Socket'], + ], + 'socket_connect' => [ + 'old' => ['bool', 'socket'=>'resource', 'address'=>'string', 'port='=>'int'], + 'new' => ['bool', 'socket'=>'Socket', 'address'=>'string', 'port='=>'int'], + ], + 'socket_create' => [ + 'old' => ['resource|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], + 'new' => ['Socket|false', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int'], + ], + 'socket_create_listen' => [ + 'old' => ['resource|false', 'port'=>'int', 'backlog='=>'int'], + 'new' => ['Socket|false', 'port'=>'int', 'backlog='=>'int'], + ], + 'socket_create_pair' => [ + 'old' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'resource[]'], + 'new' => ['bool', 'domain'=>'int', 'type'=>'int', 'protocol'=>'int', '&w_pair'=>'Socket[]'], + ], + 'socket_export_stream' => [ + 'old' => ['resource|false', 'socket'=>'resource'], + 'new' => ['resource|false', 'socket'=>'Socket'], + ], + 'socket_get_option' => [ + 'old' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], + 'new' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], + ], + 'socket_get_status' => [ + 'old' => ['array', 'stream'=>'resource'], + 'new' => ['array', 'stream'=>'Socket'], + ], + 'socket_getopt' => [ + 'old' => ['array|false|int', 'socket'=>'resource', 'level'=>'int', 'option'=>'int'], + 'new' => ['array|false|int', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int'], + ], + 'socket_getpeername' => [ + 'old' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], + 'new' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], + ], + 'socket_getsockname' => [ + 'old' => ['bool', 'socket'=>'resource', '&w_address'=>'string', '&w_port='=>'int'], + 'new' => ['bool', 'socket'=>'Socket', '&w_address'=>'string', '&w_port='=>'int'], + ], + 'socket_import_stream' => [ + 'old' => ['resource|false|null', 'stream'=>'resource'], + 'new' => ['Socket|false', 'stream'=>'resource'], + ], + 'socket_last_error' => [ + 'old' => ['int', 'socket='=>'resource'], + 'new' => ['int', 'socket='=>'Socket'], + ], + 'socket_listen' => [ + 'old' => ['bool', 'socket'=>'resource', 'backlog='=>'int'], + 'new' => ['bool', 'socket'=>'Socket', 'backlog='=>'int'], + ], + 'socket_read' => [ + 'old' => ['string|false', 'socket'=>'resource', 'length'=>'int', 'mode='=>'int'], + 'new' => ['string|false', 'socket'=>'Socket', 'length'=>'int', 'mode='=>'int'], + ], + 'socket_recv' => [ + 'old' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], + 'new' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int'], + ], + 'socket_recvfrom' => [ + 'old' => ['int|false', 'socket'=>'resource', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], + 'new' => ['int|false', 'socket'=>'Socket', '&w_data'=>'string', 'length'=>'int', 'flags'=>'int', '&w_address'=>'string', '&w_port='=>'int'], + ], + 'socket_recvmsg' => [ + 'old' => ['int|false', 'socket'=>'resource', '&w_message'=>'array', 'flags='=>'int'], + 'new' => ['int|false', 'socket'=>'Socket', '&w_message'=>'array', 'flags='=>'int'], + ], + 'socket_select' => [ + 'old' => ['int|false', '&rw_read'=>'resource[]|null', '&rw_write'=>'resource[]|null', '&rw_except'=>'resource[]|null', 'seconds'=>'int', 'microseconds='=>'int'], + 'new' => ['int|false', '&rw_read'=>'Socket[]|null', '&rw_write'=>'Socket[]|null', '&rw_except'=>'Socket[]|null', 'seconds'=>'int', 'microseconds='=>'int'], + ], + 'socket_send' => [ + 'old' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int'], + 'new' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int'], + ], + 'socket_sendmsg' => [ + 'old' => ['int|false', 'socket'=>'resource', 'message'=>'array', 'flags='=>'int'], + 'new' => ['int|false', 'socket'=>'Socket', 'message'=>'array', 'flags='=>'int'], + ], + 'socket_sendto' => [ + 'old' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'], + 'new' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length'=>'int', 'flags'=>'int', 'address'=>'string', 'port='=>'int'], + ], + 'socket_set_block' => [ + 'old' => ['bool', 'socket'=>'resource'], + 'new' => ['bool', 'socket'=>'Socket'], + ], + 'socket_set_blocking' => [ + 'old' => ['bool', 'stream'=>'resource', 'enable'=>'bool'], + 'new' => ['bool', 'stream'=>'Socket', 'enable'=>'bool'], + ], + 'socket_set_nonblock' => [ + 'old' => ['bool', 'socket'=>'resource'], + 'new' => ['bool', 'socket'=>'Socket'], + ], + 'socket_set_option' => [ + 'old' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], + 'new' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], + ], + 'socket_setopt' => [ + 'old' => ['bool', 'socket'=>'resource', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], + 'new' => ['bool', 'socket'=>'Socket', 'level'=>'int', 'option'=>'int', 'value'=>'int|string|array'], + ], + 'socket_shutdown' => [ + 'old' => ['bool', 'socket'=>'resource', 'mode='=>'int'], + 'new' => ['bool', 'socket'=>'Socket', 'mode='=>'int'], + ], + 'socket_write' => [ + 'old' => ['int|false', 'socket'=>'resource', 'data'=>'string', 'length='=>'int'], + 'new' => ['int|false', 'socket'=>'Socket', 'data'=>'string', 'length='=>'int'], + ], + 'socket_wsaprotocol_info_export' => [ + 'old' => ['string|false', 'socket'=>'resource', 'process_id'=>'int'], + 'new' => ['string|false', 'socket'=>'Socket', 'process_id'=>'int'], + ], + 'socket_wsaprotocol_info_import' => [ + 'old' => ['resource|false', 'info_id'=>'string'], + 'new' => ['Socket|false', 'info_id'=>'string'], + ], + 'strchr' => [ + 'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], + 'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], + ], + 'stream_bucket_new' => [ + 'old' => ['resource|false', 'stream'=>'resource', 'buffer'=>'string'], + 'new' => ['object', 'stream'=>'resource', 'buffer'=>'string'], + ], + 'stream_set_chunk_size' => [ + 'old' => ['int|false', 'stream'=>'resource', 'size'=>'int'], + 'new' => ['int', 'stream'=>'resource', 'size'=>'int'], + ], + 'stripos' => [ + 'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], + 'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], + ], + 'stristr' => [ + 'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], + 'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], + ], + 'strpos' => [ + 'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], + 'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], + ], + 'strrchr' => [ + 'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int'], + 'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string'], + ], + 'strripos' => [ + 'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], + 'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], + ], + 'strrpos' => [ + 'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string|int', 'offset='=>'int'], + 'new' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset='=>'int'], + ], + 'strstr' => [ + 'old' => ['string|false', 'haystack'=>'string', 'needle'=>'string|int', 'before_needle='=>'bool'], + 'new' => ['string|false', 'haystack'=>'string', 'needle'=>'string', 'before_needle='=>'bool'], + ], + 'substr' => [ + 'old' => ['string|false', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], + 'new' => ['string', 'string'=>'string', 'offset'=>'int', 'length='=>'int'], + ], + 'substr_compare' => [ + 'old' => ['int|false', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], + 'new' => ['int', 'haystack'=>'string', 'needle'=>'string', 'offset'=>'int', 'length='=>'int', 'case_insensitive='=>'bool'], + ], + 'timezone_identifiers_list' => [ + 'old' => ['list|false', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], + 'new' => ['list', 'timezoneGroup='=>'int', 'countryCode='=>'?string'], + ], + 'timezone_offset_get' => [ + 'old' => ['int|false', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], + 'new' => ['int', 'object'=>'DateTimeZone', 'datetime'=>'DateTimeInterface'], + ], + 'version_compare' => [ + 'old' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\''], + 'new' => ['int|bool', 'version1'=>'string', 'version2'=>'string', 'operator='=>'?(\'\x3c\'|\'lt\'|\'\x3c=\'|\'le\'|\'\x3e\'|\'gt\'|\'\x3e=\'|\'ge\'|\'==\'|\'=\'|\'eq\'|\'!=\'|\'\x3c\x3e\'|\'ne\')'], + ], + 'xml_get_current_byte_index' => [ + 'old' => ['int|false', 'parser'=>'resource'], + 'new' => ['int', 'parser'=>'XMLParser'], + ], + 'xml_get_current_column_number' => [ + 'old' => ['int|false', 'parser'=>'resource'], + 'new' => ['int', 'parser'=>'XMLParser'], + ], + 'xml_get_current_line_number' => [ + 'old' => ['int|false', 'parser'=>'resource'], + 'new' => ['int', 'parser'=>'XMLParser'], + ], + 'xml_get_error_code' => [ + 'old' => ['int|false', 'parser'=>'resource'], + 'new' => ['int', 'parser'=>'XMLParser'], + ], + 'xml_parse' => [ + 'old' => ['int', 'parser'=>'resource', 'data'=>'string', 'is_final='=>'bool'], + 'new' => ['int', 'parser'=>'XMLParser', 'data'=>'string', 'is_final='=>'bool'], + ], + 'xml_parse_into_struct' => [ + 'old' => ['int', 'parser'=>'resource', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], + 'new' => ['int', 'parser'=>'XMLParser', 'data'=>'string', '&w_values'=>'array', '&w_index='=>'array'], + ], + 'xml_parser_create' => [ + 'old' => ['resource', 'encoding='=>'string'], + 'new' => ['XMLParser', 'encoding='=>'string'], + ], + 'xml_parser_create_ns' => [ + 'old' => ['resource', 'encoding='=>'string', 'separator='=>'string'], + 'new' => ['XMLParser', 'encoding='=>'string', 'separator='=>'string'], + ], + 'xml_parser_free' => [ + 'old' => ['bool', 'parser'=>'resource'], + 'new' => ['bool', 'parser'=>'XMLParser'], + ], + 'xml_parser_get_option' => [ + 'old' => ['mixed|false', 'parser'=>'resource', 'option'=>'int'], + 'new' => ['int|string', 'parser'=>'XMLParser', 'option'=>'int'], + ], + 'xml_parser_set_option' => [ + 'old' => ['bool', 'parser'=>'resource', 'option'=>'int', 'value'=>'int|string'], + 'new' => ['bool', 'parser'=>'XMLParser', 'option'=>'int', 'value'=>'int|string'], + ], + 'xml_set_character_data_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'xml_set_default_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'xml_set_element_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'start_handler'=>'callable', 'end_handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'start_handler'=>'callable', 'end_handler'=>'callable'], + ], + 'xml_set_end_namespace_decl_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'xml_set_external_entity_ref_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'xml_set_notation_decl_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'xml_set_object' => [ + 'old' => ['bool', 'parser'=>'resource', 'object'=>'object'], + 'new' => ['bool', 'parser'=>'XMLParser', 'object'=>'object'], + ], + 'xml_set_processing_instruction_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'xml_set_start_namespace_decl_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'xml_set_unparsed_entity_decl_handler' => [ + 'old' => ['bool', 'parser'=>'resource', 'handler'=>'callable'], + 'new' => ['bool', 'parser'=>'XMLParser', 'handler'=>'callable'], + ], + 'XMLWriter::flush' => [ + 'old' => ['string|int|false', 'empty='=>'bool'], + 'new' => ['string|int', 'empty='=>'bool'], + ], + 'XMLWriter::startAttributeNs' => [ + 'old' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'?string'], + 'new' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string'], + ], + 'XMLWriter::writeAttributeNs' => [ + 'old' => ['bool', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'], + 'new' => ['bool', 'prefix'=>'?string', 'name'=>'string', 'namespace'=>'?string', 'value'=>'string'], + ], + 'XMLWriter::writeDtdEntity' => [ + 'old' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam'=>'bool', 'publicId'=>'string', 'systemId'=>'string', 'notationData'=>'string'], + 'new' => ['bool', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'?string', 'systemId='=>'?string', 'notationData='=>'?string'], + ], + 'xmlwriter_end_attribute' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_cdata' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_comment' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_document' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_dtd' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_dtd_attlist' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_dtd_element' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_dtd_entity' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_element' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_end_pi' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_flush' => [ + 'old' => ['int|string', 'writer'=>'resource', 'empty='=>'bool'], + 'new' => ['int|string', 'writer'=>'XMLWriter', 'empty='=>'bool'], + ], + 'xmlwriter_full_end_element' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_open_memory' => [ + 'old' => ['resource'], + 'new' => ['XMLWriter'], + ], + 'xmlwriter_open_uri' => [ + 'old' => ['resource', 'uri'=>'string'], + 'new' => ['XMLWriter', 'uri'=>'string'], + ], + 'xmlwriter_output_memory' => [ + 'old' => ['string', 'writer'=>'resource', 'flush='=>'bool'], + 'new' => ['string', 'writer'=>'XMLWriter', 'flush='=>'bool'], + ], + 'xmlwriter_set_indent' => [ + 'old' => ['bool', 'writer'=>'resource', 'enable'=>'bool'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'enable'=>'bool'], + ], + 'xmlwriter_set_indent_string' => [ + 'old' => ['bool', 'writer'=>'resource', 'indentation'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'indentation'=>'string'], + ], + 'xmlwriter_start_attribute' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], + ], + 'xmlwriter_start_attribute_ns' => [ + 'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], + ], + 'xmlwriter_start_cdata' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_start_comment' => [ + 'old' => ['bool', 'writer'=>'resource'], + 'new' => ['bool', 'writer'=>'XMLWriter'], + ], + 'xmlwriter_start_document' => [ + 'old' => ['bool', 'writer'=>'resource', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'version='=>'string', 'encoding='=>'string', 'standalone='=>'string'], + ], + 'xmlwriter_start_dtd' => [ + 'old' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string', 'publicId='=>'string', 'systemId='=>'string'], + ], + 'xmlwriter_start_dtd_attlist' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], + ], + 'xmlwriter_start_dtd_element' => [ + 'old' => ['bool', 'writer'=>'resource', 'qualifiedName'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'qualifiedName'=>'string'], + ], + 'xmlwriter_start_dtd_entity' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'isParam'=>'bool'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'isParam'=>'bool'], + ], + 'xmlwriter_start_element' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string'], + ], + 'xmlwriter_start_element_ns' => [ + 'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string'], + ], + 'xmlwriter_start_pi' => [ + 'old' => ['bool', 'writer'=>'resource', 'target'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string'], + ], + 'xmlwriter_text' => [ + 'old' => ['bool', 'writer'=>'resource', 'content'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], + ], + 'xmlwriter_write_attribute' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'value'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'value'=>'string'], + ], + 'xmlwriter_write_attribute_ns' => [ + 'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'value'=>'string'], + ], + 'xmlwriter_write_cdata' => [ + 'old' => ['bool', 'writer'=>'resource', 'content'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], + ], + 'xmlwriter_write_comment' => [ + 'old' => ['bool', 'writer'=>'resource', 'content'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], + ], + 'xmlwriter_write_dtd' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'publicId='=>'string', 'systemId='=>'string', 'content='=>'string'], + ], + 'xmlwriter_write_dtd_attlist' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], + ], + 'xmlwriter_write_dtd_element' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string'], + ], + 'xmlwriter_write_dtd_entity' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content'=>'string', 'isParam='=>'bool', 'publicId='=>'string', 'systemId='=>'string', 'notationData='=>'string'], + ], + 'xmlwriter_write_element' => [ + 'old' => ['bool', 'writer'=>'resource', 'name'=>'string', 'content='=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'name'=>'string', 'content='=>'string'], + ], + 'xmlwriter_write_element_ns' => [ + 'old' => ['bool', 'writer'=>'resource', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'prefix'=>'string', 'name'=>'string', 'namespace'=>'string', 'content='=>'string'], + ], + 'xmlwriter_write_pi' => [ + 'old' => ['bool', 'writer'=>'resource', 'target'=>'string', 'content'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'target'=>'string', 'content'=>'string'], + ], + 'xmlwriter_write_raw' => [ + 'old' => ['bool', 'writer'=>'resource', 'content'=>'string'], + 'new' => ['bool', 'writer'=>'XMLWriter', 'content'=>'string'], + ], + ], + 'removed' => [ + 'create_function' => ['string', 'args'=>'string', 'code'=>'string'], + 'each' => ['array{0:int|string,key:int|string,1:mixed,value:mixed}', '&r_arr'=>'array'], + 'gmp_random' => ['GMP', 'limiter='=>'int'], + 'gzgetss' => ['string|false', 'zp'=>'resource', 'length'=>'int', 'allowable_tags='=>'string'], + 'image2wbmp' => ['bool', 'im'=>'resource', 'filename='=>'?string', 'threshold='=>'int'], + 'jpeg2wbmp' => ['bool', 'jpegname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], + 'ldap_sort' => ['bool', 'link_identifier'=>'resource', 'result_identifier'=>'resource', 'sortfilter'=>'string'], + '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'], + 'png2wbmp' => ['bool', 'pngname'=>'string', 'wbmpname'=>'string', 'dest_height'=>'int', 'dest_width'=>'int', 'threshold'=>'int'], + 'read_exif_data' => ['array', 'filename'=>'string', 'sections_needed='=>'string', 'sub_arrays='=>'bool', 'read_thumbnail='=>'bool'], + 'ReflectionType::isBuiltin' => ['bool'], + 'SplFileObject::fgetss' => ['string|false', 'allowable_tags='=>'string'], + ], ]; diff --git a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php81_delta.php b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php81_delta.php index a3a81d05..57d72339 100644 --- a/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php81_delta.php +++ b/vendor/phan/phan/src/Phan/Language/Internal/FunctionSignatureMap_php81_delta.php @@ -16,10 +16,12 @@ * @phan-file-suppress PhanPluginMixedKeyNoKey (read by Phan when analyzing this file) */ return [ -'new' => [ -'array_is_list' => ['bool', 'array'=>'array'], -'fsync' => ['bool', 'stream'=>'resource'], -], -'old' => [ -], + 'added' => [ + 'array_is_list' => ['bool', 'array'=>'array'], + 'fsync' => ['bool', 'stream'=>'resource'], + ], + 'changed' => [ + ], + 'removed' => [ + ], ]; diff --git a/vendor/phan/phan/src/Phan/Language/Scope/GlobalScope.php b/vendor/phan/phan/src/Phan/Language/Scope/GlobalScope.php index 9af3ecd0..66d1d796 100644 --- a/vendor/phan/phan/src/Phan/Language/Scope/GlobalScope.php +++ b/vendor/phan/phan/src/Phan/Language/Scope/GlobalScope.php @@ -167,7 +167,7 @@ final class GlobalScope extends Scope } /** - * @return Scope + * @return never * Get the parent scope of this scope */ public function getParentScope(): Scope @@ -175,11 +175,17 @@ final class GlobalScope extends Scope throw new AssertionError("Global scope has no parent scope"); } + /** + * @return never + */ public function getClassFQSEN(): FullyQualifiedClassName { throw new AssertionError("Cannot get class FQSEN on scope"); } + /** + * @return never + */ public function getPropertyFQSEN(): FullyQualifiedPropertyName { throw new AssertionError("Cannot get class FQSEN on scope"); @@ -194,6 +200,9 @@ final class GlobalScope extends Scope return null; } + /** + * @return never + */ public function getFunctionLikeFQSEN() { throw new AssertionError("Cannot get method/function/closure FQSEN on scope"); diff --git a/vendor/phan/phan/src/Phan/Language/Type.php b/vendor/phan/phan/src/Phan/Language/Type.php index f1fe6fc4..ace3e65b 100644 --- a/vendor/phan/phan/src/Phan/Language/Type.php +++ b/vendor/phan/phan/src/Phan/Language/Type.php @@ -111,17 +111,17 @@ class Type implements Stringable * A legal type identifier (e.g. 'int' or 'DateTime') */ public const simple_type_regex = - '(\??)(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)'; + '(\??)(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|numeric-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)'; public const simple_noncapturing_type_regex = - '\\\\?(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|mixed))|[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)'; + '\\\\?(?:callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|numeric-string|mixed))|[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*)'; /** * @var string * A legal type identifier (e.g. 'int' or 'DateTime') */ public const simple_type_regex_or_this = - '(\??)(callable-(?:string|object|array)|associative-array|class-string|lowercase-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*|\$this)'; + '(\??)(callable-(?:string|object|array)|associative-array|class-string|lowercase-string|numeric-string|phan-intersection-type|no-return|never-returns?|non-(?:zero-int|null-mixed|empty-(?:associative-array|array|list|string|lowercase-string|numeric-string|mixed))|\\\\?[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*(?:\\\\[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)*|\$this)'; public const shape_key_regex = '(?:[-.\/^;$%*+_a-zA-Z0-9\x7f-\xff]|\\\\(?:[nrt\\\\]|x[0-9a-fA-F]{2}))+\??'; @@ -255,6 +255,7 @@ class Type implements Stringable 'non-empty-lowercase-string' => true, 'non-zero-int' => true, 'null' => true, + 'numeric-string' => true, 'object' => true, 'phan-intersection-type' => true, 'resource' => true, @@ -383,6 +384,7 @@ class Type implements Stringable /** * @throws Error this should not be called accidentally * @suppress PhanPluginRemoveDebugCall deliberate output before uncatchable Error + * @return never */ public function __wakeup() { @@ -522,6 +524,7 @@ class Type implements Stringable ); break; case 'lowercase-string': + case 'numeric-string': // TODO: Actually support numeric-string $value = StringType::instance($is_nullable); break; case 'class-string': @@ -878,6 +881,7 @@ class Type implements Stringable return ScalarRawType::instance($is_nullable); case 'string': case 'lowercase-string': + case 'numeric-string': return StringType::instance($is_nullable); case 'true': return TrueType::instance($is_nullable); @@ -1173,9 +1177,7 @@ class Type implements Stringable $key_type = GenericArrayType::KEY_MIXED; } - // TODO: Infer non-empty-array from conditions such as count($types) == 1 if (count($types) === 1) { - // @phan-suppress-next-line PhanPossiblyFalseTypeArgument return $make(\reset($types), $key_type); } elseif (count($types) > 1) { return new GenericMultiArrayType( @@ -1281,7 +1283,7 @@ class Type implements Stringable ?CodeBase $code_base, ?Context $context ): Type { - $result = IntersectionType::createFromTypes($template_parameter_type_list, $code_base, $context); + $result = IntersectionType::createFromTypes($template_parameter_type_list, $code_base, $context, true); return $is_nullable ? $result->withIsNullable(true) : $result; } diff --git a/vendor/phan/phan/src/Phan/Language/Type/CallableStringType.php b/vendor/phan/phan/src/Phan/Language/Type/CallableStringType.php index 29fd0554..0d461ad5 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/CallableStringType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/CallableStringType.php @@ -153,6 +153,6 @@ final class CallableStringType extends StringType implements CallableInterface */ protected function isSubtypeOfNonNullableType(Type $type, CodeBase $code_base): bool { - return $type instanceof CallableType || \get_class($type) === StringType::class || $type instanceof MixedType; + return $type instanceof CallableType || \in_array(\get_class($type), [StringType::class, NonEmptyStringType::class], true) || $type instanceof MixedType; } } diff --git a/vendor/phan/phan/src/Phan/Language/Type/ClassStringType.php b/vendor/phan/phan/src/Phan/Language/Type/ClassStringType.php index 025380ea..f4aa2c5c 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/ClassStringType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/ClassStringType.php @@ -132,4 +132,16 @@ final class ClassStringType extends StringType Type::FROM_TYPE ); } + + /** @override */ + public function isPossiblyFalsey(): bool + { + return $this->is_nullable; + } + + /** @override */ + public function isAlwaysTruthy(): bool + { + return !$this->is_nullable; + } } diff --git a/vendor/phan/phan/src/Phan/Language/Type/FunctionLikeDeclarationType.php b/vendor/phan/phan/src/Phan/Language/Type/FunctionLikeDeclarationType.php index 8077ce08..4efc2d25 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/FunctionLikeDeclarationType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/FunctionLikeDeclarationType.php @@ -20,6 +20,7 @@ use Phan\Language\Scope\ClosedScope; use Phan\Language\Type; use Phan\Language\UnionType; use Phan\Library\StringUtil; +use Phan\PluginV3; /** * Phan's base class for representations of `callable(MyClass):MyOtherClass` and `Closure(MyClass):MyOtherClass` @@ -131,9 +132,12 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter }); } + /** + * @return never + */ public function __clone() { - throw new \AssertionError('Should not clone ClosureTypeDeclaration'); + throw new \AssertionError('Should not clone ' . static::class); } /** @@ -389,6 +393,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @unused-param $fqsen + * @return never * @override */ public function setFQSEN(FQSEN $fqsen): void @@ -417,6 +422,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @override + * @return never * @param list $args */ public function analyzeFunctionCall(CodeBase $code_base, Context $context, array $args, Node $node = null): void @@ -428,6 +434,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter * @unused-param $context * @unused-param $code_base * @param Parameter[] $parameter_list @unused-param + * @return never * @override */ public function analyzeWithNewParams(Context $context, CodeBase $code_base, array $parameter_list): Context @@ -438,19 +445,26 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @override * @unused-param $parameter + * @return never */ public function appendParameter(Parameter $parameter): void { throw new \AssertionError('unexpected call to ' . __METHOD__); } - /** @override */ + /** + * @override + * @return never + */ public function clearParameterList(): void { throw new \AssertionError('unexpected call to ' . __METHOD__); } - /** @override */ + /** + * @override + * @return never + */ public function cloneParameterList(): void { throw new \AssertionError('unexpected call to ' . __METHOD__); @@ -485,6 +499,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @override * @param list $args + * @return never */ public function getDependentReturnType(CodeBase $code_base, Context $context, array $args): UnionType { @@ -535,7 +550,10 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter return true; } - /** @override */ + /** + * @override + * @return never + */ public function getInternalScope(): ClosedScope { throw new \AssertionError('unexpected call to ' . __METHOD__); @@ -638,6 +656,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @param list $parameter_list + * @return never */ public function setParameterList(array $parameter_list): void { @@ -646,6 +665,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @internal - moves real parameter defaults to the inferred phpdoc parameters + * @return never */ public function inheritRealParameterDefaults(): void { @@ -697,6 +717,9 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter return false; } + /** + * @return never + */ public function recordOutputReferenceParamName(string $parameter_name): void { throw new \AssertionError('unexpected call to ' . __METHOD__); @@ -709,22 +732,32 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @unused + * @return never */ public function setComment(Comment $comment): void { throw new \AssertionError('unexpected call to ' . __METHOD__); } + /** + * @return never + */ public function setFunctionCallAnalyzer(Closure $analyzer): void { throw new \AssertionError('unexpected call to ' . __METHOD__); } - public function addFunctionCallAnalyzer(Closure $analyzer): void + /** + * @return never + */ + public function addFunctionCallAnalyzer(Closure $closure, PluginV3 $plugin = null): void { throw new \AssertionError('unexpected call to ' . __METHOD__); } + /** + * @return never + */ public function setDependentReturnTypeClosure(Closure $analyzer): void { throw new \AssertionError('unexpected call to ' . __METHOD__); @@ -733,6 +766,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @override * @unused-param $has_return + * @return never */ public function setHasReturn(bool $has_return): void { @@ -742,6 +776,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @override * @unused-param $has_yield + * @return never */ public function setHasYield(bool $has_yield): void { @@ -756,6 +791,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @override * @unused-param $has_static_variable + * @return never */ public function setHasStaticVariable(bool $has_static_variable): void { @@ -767,6 +803,9 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter return false; } + /** + * @return never + */ public function setInternalScope(ClosedScope $scope): void { throw new \AssertionError('unexpected call to ' . __METHOD__); @@ -775,6 +814,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @unused-param $is_return_type_undefined * @override + * @return never */ public function setIsReturnTypeUndefined(bool $is_return_type_undefined): void { @@ -784,6 +824,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @unused-param $number * @override + * @return never */ public function setNumberOfOptionalParameters(int $number): void { @@ -793,12 +834,16 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @unused-param $number * @override + * @return never */ public function setNumberOfRequiredParameters(int $number): void { throw new \AssertionError('unexpected call to ' . __METHOD__); } + /** + * @return never + */ public function setPHPDocParameterTypeMap(array $parameter_map): void { throw new \AssertionError('unexpected call to ' . __METHOD__); @@ -806,6 +851,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @param ?UnionType $union_type the raw phpdoc union type + * @return never */ public function setPHPDocReturnType(?UnionType $union_type): void { @@ -888,12 +934,16 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter /** * @param list $suppress_issue_list + * @return never */ public function setSuppressIssueSet(array $suppress_issue_list): void { throw new \AssertionError('should not call ' . __METHOD__); } + /** + * @return never + */ public function setUnionType(UnionType $type): void { throw new \AssertionError('should not call ' . __METHOD__); @@ -1029,7 +1079,7 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter */ private function getReturnTemplateTypeExtractorClosure(CodeBase $code_base, TemplateType $template_type): ?Closure { - $return_closure = $this->getUnionType()->getTemplateTypeExtractorClosure($code_base, $template_type); + $return_closure = $this->return_type->getTemplateTypeExtractorClosure($code_base, $template_type); if (!$return_closure) { return null; } @@ -1102,6 +1152,9 @@ abstract class FunctionLikeDeclarationType extends Type implements FunctionInter return !$other->isDefiniteNonCallableType($code_base); } + /** + * @return never + */ public function setAttributeList(array $attribute_list): void { throw new \AssertionError('should not call ' . __METHOD__); diff --git a/vendor/phan/phan/src/Phan/Language/Type/GenericArrayType.php b/vendor/phan/phan/src/Phan/Language/Type/GenericArrayType.php index 799cedf5..e613a7a0 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/GenericArrayType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/GenericArrayType.php @@ -763,7 +763,7 @@ class GenericArrayType extends ArrayType implements GenericArrayInterface return $this->asPHPDocUnionType(); } // TODO: Override in array shape subclass - return $new_element_type->asGenericArrayTypes($this->getKeyType()); + return $new_element_type->asGenericArrayTypes($this->key_type); } /** diff --git a/vendor/phan/phan/src/Phan/Language/Type/IntersectionType.php b/vendor/phan/phan/src/Phan/Language/Type/IntersectionType.php index addae907..804b5512 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/IntersectionType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/IntersectionType.php @@ -82,10 +82,11 @@ final class IntersectionType extends Type * @param non-empty-list $types * @param ?CodeBase $code_base * @param ?Context $context @unused-param + * @param bool $suppress_union_type_warnings */ - public static function createFromTypes(array $types, ?CodeBase $code_base, ?Context $context): Type + public static function createFromTypes(array $types, ?CodeBase $code_base, ?Context $context, bool $suppress_union_type_warnings = false): Type { - $new_types = self::flattenTypes($types); + $new_types = self::flattenTypes($types, $code_base, $context, $suppress_union_type_warnings); if (!$new_types) { throw new AssertionError('Saw empty list of type_parts in intersection type'); } @@ -131,14 +132,37 @@ final class IntersectionType extends Type * @param non-empty-list $types * @return non-empty-list */ - private static function flattenTypes(array $types): array + private static function flattenTypes(array $types, ?CodeBase $code_base, ?Context $context, bool $suppress_union_type_warnings): array { $new_types = []; foreach ($types as $type) { if ($type instanceof UnionType) { $type_set = $type->getTypeSet(); if (count($type_set) !== 1) { - throw new AssertionError("Expected union type_parts to contain a single type"); + if ($suppress_union_type_warnings) { + if ($code_base && $context) { + Issue::maybeEmit( + $code_base, + $context, + Issue::CommentUnsupportedUnionType, + $context->getLineNumberStart(), + $type + ); + } + $type = $type->withFlattenedArrayShapeOrLiteralTypeInstances(); + $type_set = $type->getTypeSet(); + if (count($type_set) !== 1) { + if ($type->isArray()) { + $type_set = [ArrayType::instance($type->containsNullable())]; + } elseif ($type->isObject()) { + $type_set = [ObjectType::instance($type->containsNullable())]; + } else { + $type_set = [MixedType::instance(false)]; + } + } + } else { + throw new AssertionError("Expected union type_parts to contain a single type"); + } } $type = reset($type_set); if (!$type instanceof Type) { @@ -152,10 +176,13 @@ final class IntersectionType extends Type } } } - if (!$new_types) { - throw new AssertionError("Did not expect empty list of types for intersection type"); - } + $has_exclusively_truthy = false; + $has_array = false; + $has_object = false; foreach ($new_types as $i => $type) { + if (!$has_exclusively_truthy) { + $has_exclusively_truthy = $type->isAlwaysTruthy(); + } // Convert callable&object to callable-object, etc. if ($type instanceof CallableType) { foreach ($new_types as $j => $other) { @@ -174,8 +201,54 @@ final class IntersectionType extends Type } } } + if ($type instanceof ObjectType) { + $has_object = true; + } elseif ($type instanceof ArrayType) { + $has_array = true; + } + // TODO: Convert iterable to Traversable if another value is an object + } + if ($has_object) { + foreach ($new_types as $j => $other) { + if ($other->isObject()) { + // do nothing + } elseif (!$other->isPossiblyObject()) { + // Emit PhanImpossibleIntersectionType elsewhere + continue; + } else { + $other = $other->asObjectType(); + if ($other) { + $new_types[$j] = $other; + } + } + } + } elseif ($has_array) { + foreach ($new_types as $j => $other) { + if ($other instanceof ArrayType) { + continue; + } + if (!$other instanceof IterableType && !$other instanceof MixedType) { + // Emit PhanImpossibleIntersectionType elsewhere + continue; + } + $other = $other->asArrayType(); + if ($other) { + $new_types[$j] = $other; + } + } + } + if ($has_exclusively_truthy) { + foreach ($new_types as $j => $other) { + if ($other->isAlwaysTruthy()) { + continue; + } + if (!$other->isPossiblyTruthy()) { + // Emit PhanImpossibleIntersectionType elsewhere + continue; + } + $new_types[$j] = $other->asNonFalseyType(); + } } - // @phan-suppress-next-line PhanPartialTypeMismatchReturn return \array_values($new_types); } diff --git a/vendor/phan/phan/src/Phan/Language/Type/LiteralFloatType.php b/vendor/phan/phan/src/Phan/Language/Type/LiteralFloatType.php index a795d8d7..f5cfe7c8 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/LiteralFloatType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/LiteralFloatType.php @@ -32,6 +32,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface * @unused-param $is_nullable * @internal - do not call * @deprecated + * @return never */ public static function instance(bool $is_nullable) { @@ -142,7 +143,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface switch ($type::NAME) { case 'float': if ($type instanceof LiteralFloatType) { - return $type->getValue() === $this->getValue(); + return $type->value === $this->value; } return true; case 'string': @@ -189,7 +190,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface switch ($type::NAME) { case 'float': if ($type instanceof LiteralFloatType) { - return $type->getValue() === $this->getValue(); + return $type->value === $this->value; } return true; default: @@ -210,7 +211,7 @@ final class LiteralFloatType extends FloatType implements LiteralTypeInterface if ($type instanceof ScalarType) { if ($type::NAME === 'float') { if ($type instanceof LiteralFloatType) { - return $type->getValue() === $this->getValue(); + return $type->value === $this->value; } return true; } diff --git a/vendor/phan/phan/src/Phan/Language/Type/LiteralIntType.php b/vendor/phan/phan/src/Phan/Language/Type/LiteralIntType.php index c85e792b..7bb4578c 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/LiteralIntType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/LiteralIntType.php @@ -32,6 +32,7 @@ final class LiteralIntType extends IntType implements LiteralTypeInterface * @unused-param $is_nullable * @internal - do not call * @deprecated + * @return never */ public static function instance(bool $is_nullable) { @@ -152,7 +153,7 @@ final class LiteralIntType extends IntType implements LiteralTypeInterface break; case 'float': if ($type instanceof LiteralFloatType) { - return $type->getValue() == $this->getValue(); + return $type->getValue() == $this->value; } return true; case 'true': @@ -225,7 +226,7 @@ final class LiteralIntType extends IntType implements LiteralTypeInterface return false; } - return parent::canCastToNonNullableType($type, $code_base); + return parent::isSubtypeOfNonNullableType($type, $code_base); } /** diff --git a/vendor/phan/phan/src/Phan/Language/Type/LiteralStringType.php b/vendor/phan/phan/src/Phan/Language/Type/LiteralStringType.php index 3de32718..6ccd8042 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/LiteralStringType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/LiteralStringType.php @@ -15,6 +15,7 @@ use Phan\Language\UnionType; use RuntimeException; use function filter_var; +use function preg_match; use const FILTER_VALIDATE_FLOAT; use const FILTER_VALIDATE_INT; @@ -45,6 +46,7 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface * @internal * @deprecated * @throws RuntimeException to prevent this from being called + * @return never */ public static function instance(bool $is_nullable) { @@ -232,6 +234,8 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface { if ($type instanceof ScalarType) { switch ($type::NAME) { + case 'class-string': + return preg_match(self::NAMESPACED_CLASS_REGEX, $this->value) > 0; case 'callable-string': return !$this->isDefiniteNonCallableType($code_base); case 'string': @@ -282,6 +286,8 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface { if ($type instanceof ScalarType) { switch ($type::NAME) { + case 'class-string': + return preg_match(self::NAMESPACED_CLASS_REGEX, $this->value) > 0; case 'callable-string': return !$this->isDefiniteNonCallableType($code_base); case 'string': @@ -324,6 +330,8 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface { if ($type instanceof ScalarType) { switch ($type::NAME) { + case 'class-string': + return preg_match(self::NAMESPACED_CLASS_REGEX, $this->value) > 0; case 'callable-string': return !$this->isDefiniteNonCallableType($code_base); case 'string': @@ -334,7 +342,7 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface case 'non-empty-string': return (bool)$this->value; default: - return false; + return $type instanceof StringType; } } @@ -342,7 +350,8 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface } private const IDENTIFIER = '[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'; - private const NAMESPACED_CLASS = self::IDENTIFIER . '(\\\\' . self::IDENTIFIER . ')*'; + private const NAMESPACED_CLASS = '\\\\?' . self::IDENTIFIER . '(\\\\' . self::IDENTIFIER . ')*'; + private const NAMESPACED_CLASS_REGEX = '/^(' . self::NAMESPACED_CLASS . ')$/D'; // Obviously doesn't account for anonymous classes with null bytes but those shouldn't be generated by Phan. // This assumes that internal classes/methods/functions have valid identifiers, which is not always the case (e.g. Oci-Collections in PHP 7) private const CALLABLE_STRING_REGEX = '/^(' . self::NAMESPACED_CLASS . '(::|\\\\))?' . self::IDENTIFIER . '$/D'; @@ -354,7 +363,7 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface public function isDefiniteNonCallableType(CodeBase $code_base): bool { // TODO: Extract class name and check if that has the method or __callStatic? - return !\preg_match(self::CALLABLE_STRING_REGEX, $this->value); + return !preg_match(self::CALLABLE_STRING_REGEX, $this->value); } /** @@ -367,12 +376,13 @@ final class LiteralStringType extends StringType implements LiteralTypeInterface if ($type instanceof StringType) { if ($type instanceof LiteralStringType) { return $type->value === $this->value; + } elseif ($type instanceof CallableStringType) { + return !$this->isDefiniteNonCallableType($code_base); + } elseif ($type instanceof ClassStringType) { + return preg_match(self::NAMESPACED_CLASS_REGEX, $this->value) > 0; } elseif ($type instanceof NonEmptyStringType) { return (bool)$this->value; } - if ($type instanceof CallableStringType) { - return !$this->isDefiniteNonCallableType($code_base); - } return true; } return false; diff --git a/vendor/phan/phan/src/Phan/Language/Type/NativeType.php b/vendor/phan/phan/src/Phan/Language/Type/NativeType.php index 43af06a9..a640753f 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/NativeType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/NativeType.php @@ -216,6 +216,7 @@ abstract class NativeType extends Type // TODO: Handle other subtypes of mixed? MixedType::NAME => true, NeverType::NAME => in_array(NeverType::NAME, $permitted_cast_type_names, true), + NonEmptyStringType::NAME => in_array(NonEmptyStringType::NAME, $permitted_cast_type_names, true), NullType::NAME => in_array(NullType::NAME, $permitted_cast_type_names, true), ObjectType::NAME => in_array(ObjectType::NAME, $permitted_cast_type_names, true), ResourceType::NAME => in_array(ResourceType::NAME, $permitted_cast_type_names, true), @@ -236,8 +237,8 @@ abstract class NativeType extends Type CallableArrayType::NAME => $generate_row(CallableArrayType::NAME, CallableType::NAME, ArrayType::NAME), CallableObjectType::NAME => $generate_row(CallableObjectType::NAME, CallableType::NAME, ObjectType::NAME), CallableType::NAME => $generate_row(CallableType::NAME), - CallableStringType::NAME => $generate_row(CallableStringType::NAME, CallableType::NAME, StringType::NAME), - ClassStringType::NAME => $generate_row(ClassStringType::NAME, CallableType::NAME, StringType::NAME), + CallableStringType::NAME => $generate_row(CallableStringType::NAME, CallableType::NAME, StringType::NAME, NonEmptyStringType::NAME), + ClassStringType::NAME => $generate_row(ClassStringType::NAME, StringType::NAME, NonEmptyStringType::NAME), FalseType::NAME => $generate_row(FalseType::NAME, BoolType::NAME, ScalarRawType::NAME), FloatType::NAME => $generate_row(FloatType::NAME, ScalarRawType::NAME), IntType::NAME => $generate_row(IntType::NAME, FloatType::NAME, ScalarRawType::NAME), @@ -247,7 +248,8 @@ abstract class NativeType extends Type NullType::NAME => $generate_row(NullType::NAME), ObjectType::NAME => $generate_row(ObjectType::NAME), ResourceType::NAME => $generate_row(ResourceType::NAME), - StringType::NAME => $generate_row(StringType::NAME, CallableType::NAME, ScalarRawType::NAME, CallableStringType::NAME, ClassStringType::NAME), + StringType::NAME => $generate_row(StringType::NAME, CallableType::NAME, ScalarRawType::NAME, CallableStringType::NAME, ClassStringType::NAME, NonEmptyStringType::NAME), + NonEmptyStringType::NAME => $generate_row(NonEmptyStringType::NAME, StringType::NAME, CallableType::NAME, ScalarRawType::NAME, CallableStringType::NAME, ClassStringType::NAME), TrueType::NAME => $generate_row(TrueType::NAME, BoolType::NAME, ScalarRawType::NAME), VoidType::NAME => $generate_row(VoidType::NAME), ]; diff --git a/vendor/phan/phan/src/Phan/Language/Type/NonEmptyStringType.php b/vendor/phan/phan/src/Phan/Language/Type/NonEmptyStringType.php index 0c9b5862..a09b3ce3 100644 --- a/vendor/phan/phan/src/Phan/Language/Type/NonEmptyStringType.php +++ b/vendor/phan/phan/src/Phan/Language/Type/NonEmptyStringType.php @@ -13,7 +13,7 @@ use Phan\Language\Type; * Excludes '' and '0'. * @phan-pure */ -final class NonEmptyStringType extends StringType +class NonEmptyStringType extends StringType { use NativeTypeTrait; @@ -31,18 +31,6 @@ final class NonEmptyStringType extends StringType return $this->is_nullable; } - /** @override */ - public function isAlwaysFalsey(): bool - { - return false; - } - - /** @override */ - public function isPossiblyTruthy(): bool - { - return true; - } - /** @override */ public function isAlwaysTruthy(): bool { @@ -111,8 +99,6 @@ final class NonEmptyStringType extends StringType return (bool)$type->getValue(); } return true; - default: - return false; } } diff --git a/vendor/phan/phan/src/Phan/Language/UnionType.php b/vendor/phan/phan/src/Phan/Language/UnionType.php index a09e4b7a..74889c51 100644 --- a/vendor/phan/phan/src/Phan/Language/UnionType.php +++ b/vendor/phan/phan/src/Phan/Language/UnionType.php @@ -3807,7 +3807,10 @@ class UnionType implements Serializable, Stringable /** * @return bool - * True if this is exclusively generic types + * True if this is non-empty and exclusively generic array types such as array or array{x:int} + * + * @see UnionType::isArray to check for all possible arrays + * @suppress PhanUnreferencedPublicMethod */ public function isGenericArray(): bool { @@ -3820,6 +3823,36 @@ class UnionType implements Serializable, Stringable }); } + /** + * @return bool + * True if this is non-empty and exclusively array types + */ + public function isArray(): bool + { + if ($this->isEmpty()) { + return false; + } + + return $this->allTypesMatchCallback(static function (Type $type): bool { + return $type instanceof ArrayType; + }); + } + + /** + * @return bool + * True if this is non-empty and exclusively object types + */ + public function isObject(): bool + { + if ($this->isEmpty()) { + return false; + } + + return $this->allTypesMatchCallback(static function (Type $type): bool { + return $type->isObject(); + }); + } + /** * @return bool * True if any of the types in this UnionType made $matcher_callback return true @@ -4633,23 +4666,12 @@ class UnionType implements Serializable, Stringable */ public static function internalFunctionSignatureMap(int $target_php_version): array { - static $php73_map = []; + static $php80_map = []; - if (!$php73_map) { - $php73_map = self::computeLatestFunctionSignatureMap(); + if (!$php80_map) { + $php80_map = self::computeLatestFunctionSignatureMap(); } - if ($target_php_version >= 70400) { - static $php74_map = []; - if (!$php74_map) { - $php74_map = self::computePHP74FunctionSignatureMap($php73_map); - } - if ($target_php_version < 80000) { - return $php74_map; - } - static $php80_map = []; - if (!$php80_map) { - $php80_map = self::computePHP80FunctionSignatureMap($php74_map); - } + if ($target_php_version >= 80000) { if ($target_php_version < 80100) { return $php80_map; } @@ -4659,6 +4681,17 @@ class UnionType implements Serializable, Stringable } return $php81_map; } + static $php74_map = []; + if (!$php74_map) { + $php74_map = self::computePHP74FunctionSignatureMap($php80_map); + } + if ($target_php_version >= 70400) { + return $php74_map; + } + static $php73_map = []; + if (!$php73_map) { + $php73_map = self::computePHP73FunctionSignatureMap($php74_map); + } if ($target_php_version >= 70300) { return $php73_map; } @@ -4746,23 +4779,23 @@ class UnionType implements Serializable, Stringable } /** - * @param array> $php74_map + * @param array> $php80_map * @return array> */ - private static function computePHP80FunctionSignatureMap(array $php74_map): array + private static function computePHP74FunctionSignatureMap(array $php80_map): array { $delta_raw = require(__DIR__ . '/Internal/FunctionSignatureMap_php80_delta.php'); - return self::applyDeltaToGetNewerSignatures($php74_map, $delta_raw); + return self::applyDeltaToGetOlderSignatures($php80_map, $delta_raw); } /** - * @param array> $php73_map + * @param array> $php74_map * @return array> */ - private static function computePHP74FunctionSignatureMap(array $php73_map): array + private static function computePHP73FunctionSignatureMap(array $php74_map): array { $delta_raw = require(__DIR__ . '/Internal/FunctionSignatureMap_php74_delta.php'); - return self::applyDeltaToGetNewerSignatures($php73_map, $delta_raw); + return self::applyDeltaToGetOlderSignatures($php74_map, $delta_raw); } /** @@ -4807,7 +4840,7 @@ class UnionType implements Serializable, Stringable /** * @param array> $older_map - * @param array{new:array>,old:array>} $delta + * @param array{added:array>,removed:array>,changed:array,new:associative-array}>} $delta * @return array> * * @see applyDeltaToGetOlderSignatures - This is doing the exact same thing in reverse. @@ -4815,24 +4848,37 @@ class UnionType implements Serializable, Stringable */ private static function applyDeltaToGetNewerSignatures(array $older_map, array $delta): array { - return self::applyDeltaToGetOlderSignatures($older_map, [ - 'old' => $delta['new'], - 'new' => $delta['old'], - ]); + foreach ($delta['removed'] as $key => $unused_signature) { + // Would also unset alternates, but that step isn't necessary yet. + unset($older_map[\strtolower($key)]); + } + foreach ($delta['added'] as $key => $signature) { + // Would also unset alternates, but that step isn't necessary yet. + $older_map[\strtolower($key)] = $signature; + } + foreach ($delta['changed'] as $key => ['new' => $signature]) { + // Would also unset alternates, but that step isn't necessary yet. + $older_map[\strtolower($key)] = $signature; + } + return $older_map; } /** * @param array> $newer_map - * @param array{new:array>,old:array>} $delta + * @param array{added:array>,removed:array>,changed:array,new:associative-array}>} $delta * @return array> */ private static function applyDeltaToGetOlderSignatures(array $newer_map, array $delta): array { - foreach ($delta['new'] as $key => $unused_signature) { + foreach ($delta['added'] as $key => $unused_signature) { // Would also unset alternates, but that step isn't necessary yet. unset($newer_map[\strtolower($key)]); } - foreach ($delta['old'] as $key => $signature) { + foreach ($delta['removed'] as $key => $signature) { + // Would also unset alternates, but that step isn't necessary yet. + $newer_map[\strtolower($key)] = $signature; + } + foreach ($delta['changed'] as $key => ['old' => $signature]) { // Would also unset alternates, but that step isn't necessary yet. $newer_map[\strtolower($key)] = $signature; } @@ -4935,6 +4981,7 @@ class UnionType implements Serializable, Stringable /** * @param UnionType[] $union_types * @return UnionType union of these UnionTypes + * @suppress PhanPartialTypeMismatchArgument false positive seen when no real types are known. count() would throw in php 8.0+ for non-countables. */ public static function merge(array $union_types, bool $normalize_array_shapes = true): UnionType { @@ -5907,7 +5954,6 @@ class UnionType implements Serializable, Stringable return null; } $type = \reset($type_set); - // @phan-suppress-next-line PhanPossiblyFalseTypeArgumentInternal TODO: Infer non-empty-array from count switch (\get_class($type)) { case LiteralIntType::class: return $type->isNullable() ? null : $type->getValue(); diff --git a/vendor/phan/phan/src/Phan/LanguageServer/LanguageServer.php b/vendor/phan/phan/src/Phan/LanguageServer/LanguageServer.php index 9f9dfd93..1fb25d72 100644 --- a/vendor/phan/phan/src/Phan/LanguageServer/LanguageServer.php +++ b/vendor/phan/phan/src/Phan/LanguageServer/LanguageServer.php @@ -1066,6 +1066,7 @@ class LanguageServer extends AdvancedJsonRpc\Dispatcher /** * A notification to ask the server to exit its process. + * @return never */ public function exit(): void { diff --git a/vendor/phan/phan/src/Phan/LanguageServer/Utils.php b/vendor/phan/phan/src/Phan/LanguageServer/Utils.php index 3988f515..8b19cd92 100644 --- a/vendor/phan/phan/src/Phan/LanguageServer/Utils.php +++ b/vendor/phan/phan/src/Phan/LanguageServer/Utils.php @@ -27,7 +27,7 @@ class Utils */ public static function crash(Throwable $err): void { - Loop\nextTick(static function () use ($err): void { + Loop\nextTick(/** @return never */ static function () use ($err): void { // @phan-suppress-next-line PhanThrowTypeAbsent this is meant to crash the loop for debugging. throw $err; }); diff --git a/vendor/phan/phan/src/Phan/Library/None.php b/vendor/phan/phan/src/Phan/Library/None.php index 3676194c..40adc53c 100644 --- a/vendor/phan/phan/src/Phan/Library/None.php +++ b/vendor/phan/phan/src/Phan/Library/None.php @@ -49,7 +49,7 @@ final class None extends Option } /** - * @return null + * @return never * @throws Exception to indicate that get() was called without checking for a value. */ public function get() diff --git a/vendor/phan/phan/src/Phan/Library/StringUtil.php b/vendor/phan/phan/src/Phan/Library/StringUtil.php index c233376c..2a2d1f04 100644 --- a/vendor/phan/phan/src/Phan/Library/StringUtil.php +++ b/vendor/phan/phan/src/Phan/Library/StringUtil.php @@ -36,7 +36,7 @@ class StringUtil */ public static function varExportPretty($value): string { - return \var_representation($value, VAR_REPRESENTATION_SINGLE_LINE); + return \var_representation($value, \VAR_REPRESENTATION_SINGLE_LINE); } /** diff --git a/vendor/phan/phan/src/Phan/Parse/ParseVisitor.php b/vendor/phan/phan/src/Phan/Parse/ParseVisitor.php index f86264ce..fa1466f5 100644 --- a/vendor/phan/phan/src/Phan/Parse/ParseVisitor.php +++ b/vendor/phan/phan/src/Phan/Parse/ParseVisitor.php @@ -329,7 +329,7 @@ class ParseVisitor extends ScopeVisitor } $method = Method::fromNode( - clone($context), + clone $context, $code_base, $node, $method_fqsen, @@ -359,10 +359,15 @@ class ParseVisitor extends ScopeVisitor $this->addPromotedConstructorPropertyFromParam($class, $method, $parameter, $node->children['params']->children[$i]); } } - } elseif ('__tostring' === $method_name_lower - && !$this->context->isStrictTypes() - ) { - $class->addAdditionalType(StringType::instance(false)); + } elseif ('__tostring' === $method_name_lower) { + if (!$this->context->isStrictTypes()) { + $class->addAdditionalType(StringType::instance(false)); + } + // In PHP 8 and later having a __toString method automatically adds the Stringable interface, #4476 + if (Config::get_closest_minimum_target_php_version_id() >= 80000) { + // @phan-suppress-next-line PhanThrowTypeAbsentForCall should not happen, built in type + $class->addAdditionalType(Type::fromFullyQualifiedString('\Stringable')); + } } @@ -383,7 +388,7 @@ class ParseVisitor extends ScopeVisitor Node $parameter_node ): void { $lineno = $parameter_node->lineno; - $context = (clone($this->context))->withLineNumberStart($lineno); + $context = (clone $this->context)->withLineNumberStart($lineno); if ($parameter_node->flags & ast\flags\PARAM_VARIADIC) { $this->emitIssue( Issue::InvalidNode, @@ -509,7 +514,7 @@ class ParseVisitor extends ScopeVisitor . 'Got ' . \print_r($property_name, true) . ' at ' - . (clone($this->context))->withLineNumberStart($child_node->lineno) + . (clone $this->context)->withLineNumberStart($child_node->lineno) ); } $this->addProperty( @@ -544,7 +549,7 @@ class ParseVisitor extends ScopeVisitor // type and try to figure it out later $future_union_type_node = null; - $context_for_property = (clone($this->context))->withLineNumberStart($lineno); + $context_for_property = (clone $this->context)->withLineNumberStart($lineno); $real_type_set = $real_union_type->getTypeSet(); if ($default_node === null) { @@ -578,7 +583,7 @@ class ParseVisitor extends ScopeVisitor $union_type = UnionType::empty(); } } else { - if (!$union_type->isStrictSubtypeOf($this->code_base, $real_union_type)) { + if (!$union_type->canCastToUnionType($real_union_type, $this->code_base)) { $this->emitIssue( Issue::TypeMismatchPropertyDefaultReal, $context_for_property->getLineNumberStart(), diff --git a/vendor/phan/phan/src/Phan/Plugin/ConfigPluginSet.php b/vendor/phan/phan/src/Phan/Plugin/ConfigPluginSet.php index 58af63ae..fad9aee5 100644 --- a/vendor/phan/phan/src/Phan/Plugin/ConfigPluginSet.php +++ b/vendor/phan/phan/src/Phan/Plugin/ConfigPluginSet.php @@ -159,7 +159,7 @@ final class ConfigPluginSet extends PluginV3 implements /** @var list|null - plugins to analyze class declarations. */ private $analyze_class_plugin_set; - /** @var list|null - plugins to analyze invocations of subsets of functions and methods. */ + /** @var list|null - plugins to analyze invocations of subsets of functions and methods. */ private $analyze_function_call_plugin_set; /** @var list|null - plugins to analyze function declarations. */ @@ -719,6 +719,15 @@ final class ConfigPluginSet extends PluginV3 implements return $result; } + /** + * @return list + * @internal + */ + public function getAnalyzeFunctionCallPluginSet(): array + { + return $this->analyze_function_call_plugin_set ?? []; + } + /** * @param CodeBase $code_base * @return array maps FQSEN string to closure @@ -1071,29 +1080,31 @@ final class ConfigPluginSet extends PluginV3 implements */ private static function registerMergeVariableInfoClosure(array $plugin_set): void { + $closures = []; foreach (self::filterByClass($plugin_set, MergeVariableInfoCapability::class) as $plugin) { - $closure = $plugin->getMergeVariableInfoClosure(); - self::$mergeVariableInfoClosure = self::mergeMergeVariableInfoClosures($closure, self::$mergeVariableInfoClosure); - } - } - - /** - * @param Closure(Variable,Scope[],bool):void $a - * @param ?Closure(Variable,Scope[],bool):void $b - * @return Closure(Variable,Scope[],bool):void - */ - private static function mergeMergeVariableInfoClosures(Closure $a, Closure $b = null): Closure - { - if (!$b) { - return $a; + $closures[] = $plugin->getMergeVariableInfoClosure(); } + // If we have no plugins registering closures, no overall closure is needed + if (!$closures) { + self::$mergeVariableInfoClosure = null; + return; + } + + // If we have only one plugin registering a closure, just use that + if (count($closures) === 1) { + self::$mergeVariableInfoClosure = reset($closures); + return; + } + + // If we have multiple plugins registering closures, combine them /** * @param list $child_scopes */ - return static function (Variable $variable, array $child_scopes, bool $var_exists_in_all_branches) use ($a, $b): void { - $a($variable, $child_scopes, $var_exists_in_all_branches); - $b($variable, $child_scopes, $var_exists_in_all_branches); + self::$mergeVariableInfoClosure = static function (Variable $variable, array $child_scopes, bool $var_exists_in_all_branches) use ($closures): void { + foreach ($closures as $c) { + $c($variable, $child_scopes, $var_exists_in_all_branches); + } }; } @@ -1151,7 +1162,7 @@ final class ConfigPluginSet extends PluginV3 implements // @see PreAnalyzeNodeCapability (magic to create parent_node_list) $closure = self::getGenericClosureForPluginAwarePreAnalysisVisitor($plugin_analysis_class); $handled_node_kinds = $plugin_analysis_class::getHandledNodeKinds(); - if (\count($handled_node_kinds) === 0) { + if (!$handled_node_kinds) { // @phan-suppress-next-line PhanPluginRemoveDebugCall \fprintf( STDERR, @@ -1250,7 +1261,7 @@ final class ConfigPluginSet extends PluginV3 implements $closure = self::getGenericClosureForPluginAwarePostAnalysisVisitor($plugin_analysis_class); $handled_node_kinds = $plugin_analysis_class::getHandledNodeKinds(); - if (\count($handled_node_kinds) === 0) { + if (!$handled_node_kinds) { // @phan-suppress-next-line PhanPluginRemoveDebugCall \fprintf( STDERR, @@ -1350,7 +1361,7 @@ final class ConfigPluginSet extends PluginV3 implements $closure = self::getGenericClosureForBeforeLoopBodyAnalysisVisitor($plugin_analysis_class); $handled_node_kinds = $plugin_analysis_class::getHandledNodeKinds(); - if (\count($handled_node_kinds) === 0) { + if (!$handled_node_kinds) { // @phan-suppress-next-line PhanPluginRemoveDebugCall \fprintf( STDERR, @@ -1417,7 +1428,7 @@ final class ConfigPluginSet extends PluginV3 implements * @template T * @param list $plugin_set * @param class-string $interface_name - * @return list + * @return list * @suppress PhanPartialTypeMismatchReturn unable to infer this */ private static function filterByClass(array $plugin_set, string $interface_name): array diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/ArrayReturnTypeOverridePlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/ArrayReturnTypeOverridePlugin.php index a12d0e37..16118f30 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/ArrayReturnTypeOverridePlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/ArrayReturnTypeOverridePlugin.php @@ -352,7 +352,7 @@ final class ArrayReturnTypeOverridePlugin extends PluginV3 implements ) use ( $nullable_array_type_set, $real_nullable_array -): UnionType { + ): UnionType { // TODO: Handle non-empty-array in these methods and convert to non-empty-array. if (\count($args) < 2) { return $real_nullable_array; @@ -445,7 +445,7 @@ final class ArrayReturnTypeOverridePlugin extends PluginV3 implements $possible_return_types = $new_element_types; } } - if (!$possible_return_types || $possible_return_types->isEmpty()) { + if ($possible_return_types->isEmpty()) { // This will always be a real array in php 8.0+ return $array_map_function->getUnionType(); } @@ -550,7 +550,7 @@ final class ArrayReturnTypeOverridePlugin extends PluginV3 implements RedundantCondition::emitInstance( $args[0], $code_base, - (clone($context))->withLineNumberStart($args[0]->lineno ?? $context->getLineNumberStart()), + (clone $context)->withLineNumberStart($args[0]->lineno ?? $context->getLineNumberStart()), Issue::RedundantArrayValuesCall, [ $union_type->asRealUnionType(), diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/CallableParamPlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/CallableParamPlugin.php index 2663f93d..c0118c6d 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/CallableParamPlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/CallableParamPlugin.php @@ -198,7 +198,7 @@ final class CallableParamPlugin extends PluginV3 implements ): void { $closure = self::generateClosureForFunctionInterface($function); if ($closure) { - $function->addFunctionCallAnalyzer($closure); + $function->addFunctionCallAnalyzer($closure, $this); } } diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/DependencyGraphPlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/DependencyGraphPlugin.php index 6320a2ef..666aae32 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/DependencyGraphPlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/DependencyGraphPlugin.php @@ -56,6 +56,12 @@ final class DependencyGraphPlugin extends PluginV3 implements */ public static $static_vars = []; + /** + * A list of instantiations observed by this plugin + * @var list>> + */ + public static $instantiations = []; + /** * Build : string */ @@ -276,6 +282,22 @@ final class DependencyGraphPlugin extends PluginV3 implements $this->cgraph[$cnode][$c[$cnode]['class']] = 'v:' . $c[$cnode]['lineno']; } } + + if (!($flags & \PDEP_IGNORE_NEW)) { + foreach (self::$instantiations as $c) { + $cnode = \key($c); + if ($cnode === null) { + continue; + } + if (!\array_key_exists($cnode, $this->class_to_file)) { + continue; + } + $fnode = self::getFileLineno($this->class_to_file["$cnode"])[0]; + $this->fgraph[$fnode][$c[$cnode]['file']] = 'i:' . $c[$cnode]['lineno']; + $this->cgraph[$cnode][$c[$cnode]['class']] = 'i:' . $c[$cnode]['lineno']; + } + } + $this->processGraph(); } @@ -377,11 +399,19 @@ final class DependencyGraphPlugin extends PluginV3 implements // Don't overlap stdout with the progress bar on stderr. \fwrite(\STDERR, "\n"); } - if (($flags & \PDEP_IGNORE_STATIC) && $cached_graph) { - foreach ($graph as $node => $els) { - foreach ($els as $el => $val) { - if (\substr((string)$val, 0, 2) === 'v:' || \substr((string)$val, 0, 2) === 's:') { - unset($graph[$node][$el]); + if ($cached_graph) { + $ignore_static = $flags & \PDEP_IGNORE_STATIC; + $ignore_new = $flags & \PDEP_IGNORE_NEW; + if ($ignore_static || $ignore_new) { + foreach ($graph as $node => $els) { + foreach ($els as $el => $val) { + $s = \substr((string)$val, 0, 2); + if ($ignore_static && ($s === 'v:' || $s === 's:')) { + unset($graph[$node][$el]); + } + if ($ignore_new && $s === 'i:') { + unset($graph[$node][$el]); + } } } } @@ -433,6 +463,9 @@ final class DependencyGraphPlugin extends PluginV3 implements if ($type === 'v') { $style = ',color="#5D3A9B",style=dashed'; } + if ($type === 'i') { + $style = ',color="#008080"'; + } echo "\"$dnode\" -> \"$node\" [taillabel=$lineno,labelfontsize=10,labeldistance=1.4{$style}]\n"; if (empty($shape_defined[$dnode])) { $shapes .= "\"$dnode\" [shape=box]\n"; @@ -668,7 +701,7 @@ class DependencyGraphVisitor extends PluginAwarePostAnalysisVisitor } $called_class_name = (string)$called_class->children['name']; // None of these add any dependency data we don't already have, so ignore them - if (\in_array($called_class_name, ['self', 'parent', 'class', 'static'], true)) { + if (\in_array(\strtolower($called_class_name), ['self', 'parent', 'class', 'static'], true)) { return; } $fqsen = (string)FullyQualifiedClassName::fromStringInContext($called_class_name, $context); @@ -695,12 +728,40 @@ class DependencyGraphVisitor extends PluginAwarePostAnalysisVisitor return; } $called_class_name = (string)$called_class->children['name']; - if (\in_array($called_class_name, ['self', 'parent', 'class', 'static'], true)) { + if (\in_array(\strtolower($called_class_name), ['self', 'parent', 'class', 'static'], true)) { return; } $fqsen = (string)FullyQualifiedClassName::fromStringInContext($called_class_name, $context); DependencyGraphPlugin::$static_calls[] = [$fqsen => ['class' => (string)$class_fqsen,'file' => $context->getFile(),'lineno' => $context->getLineNumberStart()]]; } + + /** + * When we hit an AST_NEW + * @throws Exception + */ + public function visitNew(Node $node): void + { + $context = $this->context; + try { + $class_fqsen = $context->getClassFQSEN(); + } catch (Throwable $unused_e) { + return; + } + if ($context->isInGlobalScope()) { + return; + } + $called_class = $node->children['class']; + if (!isset($called_class->children['name'])) { + return; + } + $called_class_name = (string)$called_class->children['name']; + // None of these add any dependency data we don't already have, so ignore them + if (\in_array(\strtolower($called_class_name), ['self', 'parent', 'class', 'static'], true)) { + return; + } + $fqsen = (string)FullyQualifiedClassName::fromStringInContext($called_class_name, $context); + DependencyGraphPlugin::$instantiations[] = [$fqsen => ['class' => (string)$class_fqsen,'file' => $context->getFile(),'lineno' => $context->getLineNumberStart()]]; + } } return new DependencyGraphPlugin(); diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/DependentReturnTypeOverridePlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/DependentReturnTypeOverridePlugin.php index 7b349243..7e517c70 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/DependentReturnTypeOverridePlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/DependentReturnTypeOverridePlugin.php @@ -78,7 +78,7 @@ final class DependentReturnTypeOverridePlugin extends PluginV3 implements $type_if_unknown, $type_if_false, $expected_bool_pos -): UnionType { + ): UnionType { if (count($args) <= $expected_bool_pos) { return $type_if_false; } @@ -142,7 +142,7 @@ final class DependentReturnTypeOverridePlugin extends PluginV3 implements $arg_pos, $type_if_exists, $type_if_missing -): UnionType { + ): UnionType { return isset($args[$arg_pos]) ? $type_if_exists : $type_if_missing; }; }; @@ -167,7 +167,7 @@ final class DependentReturnTypeOverridePlugin extends PluginV3 implements $json_decode_array_types, $json_decode_object_types, $json_decode_array_or_object_types -): UnionType { + ): UnionType { // mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] ) // $options can include JSON_OBJECT_AS_ARRAY in a bitmask // TODO: reject `...` operator? (Low priority) @@ -319,7 +319,7 @@ final class DependentReturnTypeOverridePlugin extends PluginV3 implements array $args ) use ( $string_union_type_with_null_in_real -): UnionType { + ): UnionType { if (count($args) !== 1) { if (count($args) !== 2) { // Cut down on false positive warnings about substr($str, 0, $len) possibly being false @@ -440,7 +440,7 @@ final class DependentReturnTypeOverridePlugin extends PluginV3 implements ) use ( $string_union_type, $callable -): UnionType { + ): UnionType { if (count($args) !== 1) { // Cut down on false positive warnings about substr($str, 0, $len) possibly being false return $string_union_type; diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/DumpPHPDocPlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/DumpPHPDocPlugin.php index 4c3a3aca..b0f4dc36 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/DumpPHPDocPlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/DumpPHPDocPlugin.php @@ -206,6 +206,7 @@ final class DumpPHPDocPlugin extends PluginV3 implements * * @unused-param $code_base * @override + * @return never */ public function finalizeProcess(CodeBase $code_base): void { diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/ExtendedDependentReturnTypeOverridePlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/ExtendedDependentReturnTypeOverridePlugin.php index 08212fd4..893bd131 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/ExtendedDependentReturnTypeOverridePlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/ExtendedDependentReturnTypeOverridePlugin.php @@ -118,7 +118,7 @@ final class ExtendedDependentReturnTypeOverridePlugin extends PluginV3 implement ) use ( $cb, $cb_fallback -): UnionType { + ): UnionType { $result = $cb($code_base, $context, $function_decl, $args); if ($result !== $function_decl->getUnionType()) { return $result; diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/IssueFixingPlugin/IssueFixer.php b/vendor/phan/phan/src/Phan/Plugin/Internal/IssueFixingPlugin/IssueFixer.php index 109ec9ee..b43be4d1 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/IssueFixingPlugin/IssueFixer.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/IssueFixingPlugin/IssueFixer.php @@ -211,7 +211,7 @@ class IssueFixer ) use ( $closure, $instance -): ?FileEditSet { + ): ?FileEditSet { self::debug("Calling for $instance\n"); return $closure($code_base, $file_contents, $instance); }; diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/LoopVariableReuseVisitor.php b/vendor/phan/phan/src/Phan/Plugin/Internal/LoopVariableReuseVisitor.php index 1c24bfbd..3a3aad1b 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/LoopVariableReuseVisitor.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/LoopVariableReuseVisitor.php @@ -146,7 +146,7 @@ class LoopVariableReuseVisitor extends PluginAwarePostAnalysisVisitor $inner_node = $variables[$variable_name]; $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($inner_node->lineno), + (clone $this->context)->withLineNumberStart($inner_node->lineno), 'PhanPluginLoopVariableReuse', 'Variable ${VARIABLE} used in loop was also used in an outer loop on line {LINE}', [$variable_name, $node->lineno] diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/MethodSearcherPlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/MethodSearcherPlugin.php index d88d257e..2cd6d607 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/MethodSearcherPlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/MethodSearcherPlugin.php @@ -148,6 +148,11 @@ final class MethodSearcherPlugin extends PluginV3 implements } } + /** + * Prints all function/method signatures that match the search input, and exits + * + * @return never + */ public function beforeAnalyze(CodeBase $code_base): void { self::addMissingNamespacesToTypes($code_base); diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/RedundantConditionVisitor.php b/vendor/phan/phan/src/Phan/Plugin/Internal/RedundantConditionVisitor.php index c377a00b..be3b0b69 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/RedundantConditionVisitor.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/RedundantConditionVisitor.php @@ -494,7 +494,7 @@ class RedundantConditionVisitor extends PluginAwarePostAnalysisVisitor RedundantCondition::emitInstance( $var_node, $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), Issue::RedundantCondition, [ ASTReverter::toShortString($var_node), @@ -509,7 +509,7 @@ class RedundantConditionVisitor extends PluginAwarePostAnalysisVisitor RedundantCondition::emitInstance( $var_node, $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), Issue::ImpossibleCondition, [ ASTReverter::toShortString($var_node), @@ -597,7 +597,7 @@ class RedundantConditionVisitor extends PluginAwarePostAnalysisVisitor RedundantCondition::emitInstance( $expr_node, $code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), Issue::RedundantCondition, [ ASTReverter::toShortString($expr_node), @@ -612,7 +612,7 @@ class RedundantConditionVisitor extends PluginAwarePostAnalysisVisitor RedundantCondition::emitInstance( $expr_node, $code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), Issue::ImpossibleCondition, [ ASTReverter::toShortString($expr_node), diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/StringFunctionPlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/StringFunctionPlugin.php index 11f3bdca..b60e4a72 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/StringFunctionPlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/StringFunctionPlugin.php @@ -83,7 +83,7 @@ final class StringFunctionPlugin extends PluginV3 implements $expected_const_pos, $expected_variable_pos, $expected_arg_count -): void { + ): void { if (\count($args) < $expected_arg_count) { return; } diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php index 5e3885c8..13e46466 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin.php @@ -148,7 +148,7 @@ class UseReturnValuePlugin extends PluginV3 implements PostAnalyzeNodeCapability continue; } $line = (int)$matches[1]; - $context = (clone($context))->withLineNumberStart($line); + $context = (clone $context)->withLineNumberStart($line); if ($known_must_use_return_value) { self::emitIssue( $code_base, diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/RedundantReturnVisitor.php b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/RedundantReturnVisitor.php index e0a3ba51..01252f7f 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/RedundantReturnVisitor.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/RedundantReturnVisitor.php @@ -124,7 +124,7 @@ class RedundantReturnVisitor if ($stmts !== $this->stmts || !($exit_status & BlockExitStatusChecker::STATUS_PROCEED)) { return $possible_return_nodes; } - // This is the function body, and there's one code path where it will not return a value. + // This is the function body, and there's one code path where it will proceed and not return a value. $line = $this->stmts->lineno; $possible_return_nodes[] = new Node(ast\AST_RETURN, 0, [ 'expr' => new Node(ast\AST_CONST, 0, [ diff --git a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php index 64cfd2c1..ed763124 100644 --- a/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php +++ b/vendor/phan/phan/src/Phan/Plugin/Internal/UseReturnValuePlugin/UseReturnValueVisitor.php @@ -135,7 +135,7 @@ class UseReturnValueVisitor extends PluginAwarePostAnalysisVisitor // To reduce false positives, only emit this issue if all functions have the same return type $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), UseReturnValuePlugin::UseReturnValueOfNever, "Saw use of value of expression {CODE} which likely uses the {CODE} statement with a return type of '{TYPE}' - this will not return normally", [ASTReverter::toShortString($node), 'exit', 'never'] @@ -233,7 +233,7 @@ class UseReturnValueVisitor extends PluginAwarePostAnalysisVisitor // To reduce false positives, only emit this issue if all functions have the same return type $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), UseReturnValuePlugin::UseReturnValueOfNever, "Saw use of value of expression {CODE} which likely uses the function {FUNCTIONLIKE} with a return type of '{TYPE}' - this will not return normally", [ASTReverter::toShortString($node), $function->getRepresentationForIssue(true), 'never'] @@ -367,7 +367,7 @@ class UseReturnValueVisitor extends PluginAwarePostAnalysisVisitor { $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), UseReturnValuePlugin::UseReturnValueCallableConvert, 'Expected to use the Closure created from {CODE}', [ASTReverter::toShortString($node)] @@ -437,7 +437,7 @@ class UseReturnValueVisitor extends PluginAwarePostAnalysisVisitor if ($function->hasYield() || $function->getUnionType()->isExclusivelyGenerators()) { $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), UseReturnValuePlugin::UseReturnValueGenerator, 'Expected to use the return value of the function/method {FUNCTION} returning a generator of type {TYPE}', [$function->getRepresentationForIssue(true), $function->getUnionType()] @@ -541,7 +541,7 @@ class UseReturnValueVisitor extends PluginAwarePostAnalysisVisitor if ($method->isPHPInternal()) { $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), UseReturnValuePlugin::UseReturnValueInternalKnown, 'Expected to use the return value of the internal function/method {FUNCTION}', [$fqsen] @@ -554,7 +554,7 @@ class UseReturnValueVisitor extends PluginAwarePostAnalysisVisitor } $this->emitPluginIssue( $this->code_base, - (clone($this->context))->withLineNumberStart($node->lineno), + (clone $this->context)->withLineNumberStart($node->lineno), UseReturnValuePlugin::UseReturnValueKnown, 'Expected to use the return value of the user-defined function/method {FUNCTION} defined at {FILE}:{LINE}', [$method->getRepresentationForIssue(), $method->getContext()->getFile(), $method->getContext()->getLineNumberStart()] diff --git a/vendor/phan/phan/tool/dump_markdown_preview b/vendor/phan/phan/tool/dump_markdown_preview old mode 100644 new mode 100755 diff --git a/vendor/phan/phan/tool/make_ctags_for_phan_project b/vendor/phan/phan/tool/make_ctags_for_phan_project old mode 100644 new mode 100755 diff --git a/vendor/phan/phan/tool/make_stubs b/vendor/phan/phan/tool/make_stubs old mode 100644 new mode 100755 index 085b70aa..fc71da8a --- a/vendor/phan/phan/tool/make_stubs +++ b/vendor/phan/phan/tool/make_stubs @@ -29,7 +29,7 @@ class StubsGenerator { /** - * @return void (does not return) + * @return never (does not return) */ public static function printHelpAndExit(string $message = '', int $exit_code = 1) : void { diff --git a/vendor/phan/phan/tool/pdep b/vendor/phan/phan/tool/pdep old mode 100644 new mode 100755 index f5daaf4b..4ee4ec28 --- a/vendor/phan/phan/tool/pdep +++ b/vendor/phan/phan/tool/pdep @@ -8,8 +8,12 @@ use Phan\Phan; define("PDEP_IGNORE_STATIC", 1 << 0); define("PDEP_HIDE_LABELS", 1 << 1); +define("PDEP_IGNORE_NEW", 1 << 2); -/** Prints a usage message for 'pdep' and exits. */ +/** + * Prints a usage message for 'pdep' and exits. + * @return never + */ function pdep_usage(int $status) : void { global $argv; echo <<