1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

gen_stub: ZEND_ACC_NODISCARD is for PHP 8.5+ (#18465)

This commit is contained in:
DanielEScherzer
2025-05-04 15:08:37 -07:00
committed by GitHub
parent 9ac5b04487
commit 940ee1a641
2 changed files with 39 additions and 8 deletions

View File

@@ -1390,7 +1390,13 @@ class FuncInfo {
$name = "zim_" . $this->name->getDeclarationClassName() . "_" . $this->name->methodName; $name = "zim_" . $this->name->getDeclarationClassName() . "_" . $this->name->methodName;
if ($isVanillaEntry) { if ($isVanillaEntry) {
$functionEntryCode = "\tZEND_ME(" . $this->name->getDeclarationClassName() . ", " . $this->name->methodName . ", $argInfoName, " . implode("|", reset($flagsByPhpVersions)) . ")"; $template = "\tZEND_ME(" . $this->name->getDeclarationClassName() . ", " . $this->name->methodName . ", $argInfoName, %s)\n";
$flagsCode = generateVersionDependentFlagCode(
$template,
$flagsByPhpVersions,
$this->minimumPhpVersionIdCompatibility
);
$functionEntryCode = rtrim(implode("", $flagsCode));
} }
} }
} }
@@ -1406,7 +1412,15 @@ class FuncInfo {
$zendName = '"' . $functionName . '"'; $zendName = '"' . $functionName . '"';
$name = "zif_$declarationName"; $name = "zif_$declarationName";
if ($isVanillaEntry && reset($flagsByPhpVersions) === ["0"]) { // Can only use ZEND_FE() if we have no flags for *all* versions
$hasFlags = false;
foreach ($flagsByPhpVersions as $flags) {
if ($flags !== ['0']) {
$hasFlags = true;
break;
}
}
if ($isVanillaEntry && !$hasFlags) {
$functionEntryCode = "\tZEND_FE($declarationName, $argInfoName)"; $functionEntryCode = "\tZEND_FE($declarationName, $argInfoName)";
} }
} }
@@ -1523,9 +1537,6 @@ class FuncInfo {
case "Deprecated": case "Deprecated":
$flags[] = "ZEND_ACC_DEPRECATED"; $flags[] = "ZEND_ACC_DEPRECATED";
break; break;
case "NoDiscard":
$flags[] = "ZEND_ACC_NODISCARD";
break;
} }
} }
@@ -1534,12 +1545,24 @@ class FuncInfo {
$php82AndAboveFlags[] = "ZEND_ACC_COMPILE_TIME_EVAL"; $php82AndAboveFlags[] = "ZEND_ACC_COMPILE_TIME_EVAL";
} }
$php85AndAboveFlags = $php82AndAboveFlags;
foreach ($this->attributes as $attr) {
switch ($attr->class) {
case "NoDiscard":
$php85AndAboveFlags[] = "ZEND_ACC_NODISCARD";
break;
}
}
if (empty($flags)) { if (empty($flags)) {
$flags[] = "0"; $flags[] = "0";
} }
if (empty($php82AndAboveFlags)) { if (empty($php82AndAboveFlags)) {
$php82AndAboveFlags[] = "0"; $php82AndAboveFlags[] = "0";
} }
if (empty($php85AndAboveFlags)) {
$php85AndAboveFlags[] = "0";
}
return [ return [
PHP_70_VERSION_ID => $flags, PHP_70_VERSION_ID => $flags,
@@ -1548,7 +1571,7 @@ class FuncInfo {
PHP_82_VERSION_ID => $php82AndAboveFlags, PHP_82_VERSION_ID => $php82AndAboveFlags,
PHP_83_VERSION_ID => $php82AndAboveFlags, PHP_83_VERSION_ID => $php82AndAboveFlags,
PHP_84_VERSION_ID => $php82AndAboveFlags, PHP_84_VERSION_ID => $php82AndAboveFlags,
PHP_85_VERSION_ID => $php82AndAboveFlags, PHP_85_VERSION_ID => $php85AndAboveFlags,
]; ];
} }

View File

@@ -368,14 +368,22 @@ static const zend_function_entry ext_functions[] = {
ZEND_RAW_FENTRY("zend_test_deprecated_attr", zif_zend_test_deprecated_attr, arginfo_zend_test_deprecated_attr, ZEND_ACC_DEPRECATED) ZEND_RAW_FENTRY("zend_test_deprecated_attr", zif_zend_test_deprecated_attr, arginfo_zend_test_deprecated_attr, ZEND_ACC_DEPRECATED)
#endif #endif
#if (PHP_VERSION_ID >= 80400) #if (PHP_VERSION_ID >= 80400)
#if (PHP_VERSION_ID >= 80500)
ZEND_RAW_FENTRY("zend_test_nodiscard", zif_zend_test_nodiscard, arginfo_zend_test_nodiscard, ZEND_ACC_NODISCARD, NULL, NULL) ZEND_RAW_FENTRY("zend_test_nodiscard", zif_zend_test_nodiscard, arginfo_zend_test_nodiscard, ZEND_ACC_NODISCARD, NULL, NULL)
#elif (PHP_VERSION_ID >= 80400)
ZEND_RAW_FENTRY("zend_test_nodiscard", zif_zend_test_nodiscard, arginfo_zend_test_nodiscard, 0, NULL, NULL)
#endif
#else #else
ZEND_RAW_FENTRY("zend_test_nodiscard", zif_zend_test_nodiscard, arginfo_zend_test_nodiscard, ZEND_ACC_NODISCARD) ZEND_RAW_FENTRY("zend_test_nodiscard", zif_zend_test_nodiscard, arginfo_zend_test_nodiscard, 0)
#endif #endif
#if (PHP_VERSION_ID >= 80400) #if (PHP_VERSION_ID >= 80400)
#if (PHP_VERSION_ID >= 80500)
ZEND_RAW_FENTRY("zend_test_deprecated_nodiscard", zif_zend_test_deprecated_nodiscard, arginfo_zend_test_deprecated_nodiscard, ZEND_ACC_DEPRECATED|ZEND_ACC_NODISCARD, NULL, NULL) ZEND_RAW_FENTRY("zend_test_deprecated_nodiscard", zif_zend_test_deprecated_nodiscard, arginfo_zend_test_deprecated_nodiscard, ZEND_ACC_DEPRECATED|ZEND_ACC_NODISCARD, NULL, NULL)
#elif (PHP_VERSION_ID >= 80400)
ZEND_RAW_FENTRY("zend_test_deprecated_nodiscard", zif_zend_test_deprecated_nodiscard, arginfo_zend_test_deprecated_nodiscard, ZEND_ACC_DEPRECATED, NULL, NULL)
#endif
#else #else
ZEND_RAW_FENTRY("zend_test_deprecated_nodiscard", zif_zend_test_deprecated_nodiscard, arginfo_zend_test_deprecated_nodiscard, ZEND_ACC_DEPRECATED|ZEND_ACC_NODISCARD) ZEND_RAW_FENTRY("zend_test_deprecated_nodiscard", zif_zend_test_deprecated_nodiscard, arginfo_zend_test_deprecated_nodiscard, ZEND_ACC_DEPRECATED)
#endif #endif
#if (PHP_VERSION_ID >= 80400) #if (PHP_VERSION_ID >= 80400)
ZEND_RAW_FENTRY("zend_test_aliased", zif_zend_test_void_return, arginfo_zend_test_aliased, 0, NULL, NULL) ZEND_RAW_FENTRY("zend_test_aliased", zif_zend_test_void_return, arginfo_zend_test_aliased, 0, NULL, NULL)