@@ -3769,12 +3769,16 @@ protected function pName_FullyQualified(Name\FullyQualified $node) {
37693769 return $ fileInfo ;
37703770}
37713771
3772- function funcInfoToCode (FuncInfo $ funcInfo ): string {
3772+ function funcInfoToCode (FileInfo $ fileInfo , FuncInfo $ funcInfo ): string {
37733773 $ code = '' ;
37743774 $ returnType = $ funcInfo ->return ->type ;
37753775 $ isTentativeReturnType = $ funcInfo ->return ->tentativeReturnType ;
3776+ $ php81MinimumCompatibility = $ fileInfo ->generateLegacyArginfoForPhpVersionId === null || $ fileInfo ->generateLegacyArginfoForPhpVersionId >= PHP_81_VERSION_ID ;
37763777
37773778 if ($ returnType !== null ) {
3779+ if ($ isTentativeReturnType && !$ php81MinimumCompatibility ) {
3780+ $ code .= "#if (PHP_VERSION_ID >= " . PHP_81_VERSION_ID . ") \n" ;
3781+ }
37783782 if (null !== $ simpleReturnType = $ returnType ->tryToSimpleType ()) {
37793783 if ($ simpleReturnType ->isBuiltin ) {
37803784 $ code .= sprintf (
@@ -3813,6 +3817,12 @@ function funcInfoToCode(FuncInfo $funcInfo): string {
38133817 );
38143818 }
38153819 }
3820+ if ($ isTentativeReturnType && !$ php81MinimumCompatibility ) {
3821+ $ code .= sprintf (
3822+ "#else \nZEND_BEGIN_ARG_INFO_EX(%s, 0, %d, %d) \n#endif \n" ,
3823+ $ funcInfo ->getArgInfoName (), $ funcInfo ->return ->byRef , $ funcInfo ->numRequiredArgs
3824+ );
3825+ }
38163826 } else {
38173827 $ code .= sprintf (
38183828 "ZEND_BEGIN_ARG_INFO_EX(%s, 0, %d, %d) \n" ,
@@ -3925,15 +3935,15 @@ function generateArgInfoCode(
39253935 $ generatedFuncInfos = [];
39263936 $ code .= generateCodeWithConditions (
39273937 $ fileInfo ->getAllFuncInfos (), "\n" ,
3928- static function (FuncInfo $ funcInfo ) use (&$ generatedFuncInfos ) {
3938+ static function (FuncInfo $ funcInfo ) use (&$ generatedFuncInfos, $ fileInfo ) {
39293939 /* If there already is an equivalent arginfo structure, only emit a #define */
39303940 if ($ generatedFuncInfo = findEquivalentFuncInfo ($ generatedFuncInfos , $ funcInfo )) {
39313941 $ code = sprintf (
39323942 "#define %s %s \n" ,
39333943 $ funcInfo ->getArgInfoName (), $ generatedFuncInfo ->getArgInfoName ()
39343944 );
39353945 } else {
3936- $ code = funcInfoToCode ($ funcInfo );
3946+ $ code = funcInfoToCode ($ fileInfo , $ funcInfo );
39373947 }
39383948
39393949 $ generatedFuncInfos [] = $ funcInfo ;
0 commit comments