@@ -1390,7 +1390,13 @@ public function getFunctionEntry(): string {
1390
1390
$ name = "zim_ " . $ this ->name ->getDeclarationClassName () . "_ " . $ this ->name ->methodName ;
1391
1391
1392
1392
if ($ isVanillaEntry ) {
1393
- $ functionEntryCode = "\tZEND_ME( " . $ this ->name ->getDeclarationClassName () . ", " . $ this ->name ->methodName . ", $ argInfoName, " . implode ("| " , reset ($ flagsByPhpVersions )) . ") " ;
1393
+ $ template = "\tZEND_ME( " . $ this ->name ->getDeclarationClassName () . ", " . $ this ->name ->methodName . ", $ argInfoName, %s) \n" ;
1394
+ $ flagsCode = generateVersionDependentFlagCode (
1395
+ $ template ,
1396
+ $ flagsByPhpVersions ,
1397
+ $ this ->minimumPhpVersionIdCompatibility
1398
+ );
1399
+ $ functionEntryCode = rtrim ( implode ("" , $ flagsCode ) );
1394
1400
}
1395
1401
}
1396
1402
}
@@ -1406,7 +1412,15 @@ public function getFunctionEntry(): string {
1406
1412
$ zendName = '" ' . $ functionName . '" ' ;
1407
1413
$ name = "zif_ $ declarationName " ;
1408
1414
1409
- if ($ isVanillaEntry && reset ($ flagsByPhpVersions ) === ["0 " ]) {
1415
+ // Can only use ZEND_FE() if we have no flags for *all* versions
1416
+ $ hasFlags = false ;
1417
+ foreach ($ flagsByPhpVersions as $ flags ) {
1418
+ if ($ flags !== ['0 ' ]) {
1419
+ $ hasFlags = true ;
1420
+ break ;
1421
+ }
1422
+ }
1423
+ if ($ isVanillaEntry && !$ hasFlags ) {
1410
1424
$ functionEntryCode = "\tZEND_FE( $ declarationName, $ argInfoName) " ;
1411
1425
}
1412
1426
}
@@ -1523,9 +1537,6 @@ private function getArginfoFlagsByPhpVersions(): array
1523
1537
case "Deprecated " :
1524
1538
$ flags [] = "ZEND_ACC_DEPRECATED " ;
1525
1539
break ;
1526
- case "NoDiscard " :
1527
- $ flags [] = "ZEND_ACC_NODISCARD " ;
1528
- break ;
1529
1540
}
1530
1541
}
1531
1542
@@ -1534,12 +1545,24 @@ private function getArginfoFlagsByPhpVersions(): array
1534
1545
$ php82AndAboveFlags [] = "ZEND_ACC_COMPILE_TIME_EVAL " ;
1535
1546
}
1536
1547
1548
+ $ php85AndAboveFlags = $ php82AndAboveFlags ;
1549
+ foreach ($ this ->attributes as $ attr ) {
1550
+ switch ($ attr ->class ) {
1551
+ case "NoDiscard " :
1552
+ $ php85AndAboveFlags [] = "ZEND_ACC_NODISCARD " ;
1553
+ break ;
1554
+ }
1555
+ }
1556
+
1537
1557
if (empty ($ flags )) {
1538
1558
$ flags [] = "0 " ;
1539
1559
}
1540
1560
if (empty ($ php82AndAboveFlags )) {
1541
1561
$ php82AndAboveFlags [] = "0 " ;
1542
1562
}
1563
+ if (empty ($ php85AndAboveFlags )) {
1564
+ $ php85AndAboveFlags [] = "0 " ;
1565
+ }
1543
1566
1544
1567
return [
1545
1568
PHP_70_VERSION_ID => $ flags ,
@@ -1548,7 +1571,7 @@ private function getArginfoFlagsByPhpVersions(): array
1548
1571
PHP_82_VERSION_ID => $ php82AndAboveFlags ,
1549
1572
PHP_83_VERSION_ID => $ php82AndAboveFlags ,
1550
1573
PHP_84_VERSION_ID => $ php82AndAboveFlags ,
1551
- PHP_85_VERSION_ID => $ php82AndAboveFlags ,
1574
+ PHP_85_VERSION_ID => $ php85AndAboveFlags ,
1552
1575
];
1553
1576
}
1554
1577
0 commit comments