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:
@@ -1390,7 +1390,13 @@ class FuncInfo {
|
||||
$name = "zim_" . $this->name->getDeclarationClassName() . "_" . $this->name->methodName;
|
||||
|
||||
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 . '"';
|
||||
$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)";
|
||||
}
|
||||
}
|
||||
@@ -1523,9 +1537,6 @@ class FuncInfo {
|
||||
case "Deprecated":
|
||||
$flags[] = "ZEND_ACC_DEPRECATED";
|
||||
break;
|
||||
case "NoDiscard":
|
||||
$flags[] = "ZEND_ACC_NODISCARD";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1534,12 +1545,24 @@ class FuncInfo {
|
||||
$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)) {
|
||||
$flags[] = "0";
|
||||
}
|
||||
if (empty($php82AndAboveFlags)) {
|
||||
$php82AndAboveFlags[] = "0";
|
||||
}
|
||||
if (empty($php85AndAboveFlags)) {
|
||||
$php85AndAboveFlags[] = "0";
|
||||
}
|
||||
|
||||
return [
|
||||
PHP_70_VERSION_ID => $flags,
|
||||
@@ -1548,7 +1571,7 @@ class FuncInfo {
|
||||
PHP_82_VERSION_ID => $php82AndAboveFlags,
|
||||
PHP_83_VERSION_ID => $php82AndAboveFlags,
|
||||
PHP_84_VERSION_ID => $php82AndAboveFlags,
|
||||
PHP_85_VERSION_ID => $php82AndAboveFlags,
|
||||
PHP_85_VERSION_ID => $php85AndAboveFlags,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
12
ext/zend_test/test_arginfo.h
generated
12
ext/zend_test/test_arginfo.h
generated
@@ -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)
|
||||
#endif
|
||||
#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)
|
||||
#elif (PHP_VERSION_ID >= 80400)
|
||||
ZEND_RAW_FENTRY("zend_test_nodiscard", zif_zend_test_nodiscard, arginfo_zend_test_nodiscard, 0, NULL, NULL)
|
||||
#endif
|
||||
#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
|
||||
#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)
|
||||
#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
|
||||
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
|
||||
#if (PHP_VERSION_ID >= 80400)
|
||||
ZEND_RAW_FENTRY("zend_test_aliased", zif_zend_test_void_return, arginfo_zend_test_aliased, 0, NULL, NULL)
|
||||
|
||||
Reference in New Issue
Block a user