@@ -2622,6 +2622,13 @@ public function __construct(
26222622 ?ExposedDocComment $ exposedDocComment ,
26232623 bool $ isFileCacheAllowed
26242624 ) {
2625+ foreach ($ attributes as $ attr ) {
2626+ if ($ attr ->class === "Deprecated " ) {
2627+ $ isDeprecated = true ;
2628+ break ;
2629+ }
2630+ }
2631+
26252632 $ this ->name = $ name ;
26262633 $ this ->value = $ value ;
26272634 $ this ->valueString = $ valueString ;
@@ -2915,17 +2922,11 @@ protected function getFlagsByPhpVersion(): array
29152922 {
29162923 $ flags = parent ::getFlagsByPhpVersion ();
29172924
2925+ // $this->isDeprecated also accounts for any #[\Deprecated] attributes
29182926 if ($ this ->isDeprecated ) {
29192927 $ flags = $ this ->addFlagForVersionsAbove ($ flags , "ZEND_ACC_DEPRECATED " , PHP_80_VERSION_ID );
29202928 }
29212929
2922- foreach ($ this ->attributes as $ attr ) {
2923- if ($ attr ->class === "Deprecated " ) {
2924- $ flags = $ this ->addFlagForVersionsAbove ($ flags , "ZEND_ACC_DEPRECATED " , PHP_80_VERSION_ID );
2925- break ;
2926- }
2927- }
2928-
29292930 if ($ this ->flags & Modifiers::FINAL ) {
29302931 $ flags = $ this ->addFlagForVersionsAbove ($ flags , "ZEND_ACC_FINAL " , PHP_81_VERSION_ID );
29312932 }
@@ -4340,7 +4341,7 @@ private function handleStatements(array $stmts, PrettyPrinterAbstract $prettyPri
43404341 $ cond ,
43414342 $ this ->isUndocumentable ,
43424343 $ this ->getMinimumPhpVersionIdCompatibility (),
4343- []
4344+ AttributeInfo:: createFromGroups ( $ stmt -> attrGroups )
43444345 );
43454346 }
43464347 continue ;
@@ -5177,7 +5178,9 @@ static function (FuncInfo $funcInfo) use ($fileInfo, &$generatedFunctionDeclarat
51775178 $ php80MinimumCompatibility = $ fileInfo ->getMinimumPhpVersionIdCompatibility () === null || $ fileInfo ->getMinimumPhpVersionIdCompatibility () >= PHP_80_VERSION_ID ;
51785179
51795180 if ($ fileInfo ->generateClassEntries ) {
5180- if ($ attributeInitializationCode = generateFunctionAttributeInitialization ($ fileInfo ->funcInfos , $ allConstInfos , $ fileInfo ->getMinimumPhpVersionIdCompatibility (), null )) {
5181+ $ attributeInitializationCode = generateFunctionAttributeInitialization ($ fileInfo ->funcInfos , $ allConstInfos , $ fileInfo ->getMinimumPhpVersionIdCompatibility (), null );
5182+ $ attributeInitializationCode .= generateGlobalConstantAttributeInitialization ($ fileInfo ->constInfos , $ allConstInfos , $ fileInfo ->getMinimumPhpVersionIdCompatibility (), null );
5183+ if ($ attributeInitializationCode ) {
51815184 if (!$ php80MinimumCompatibility ) {
51825185 $ attributeInitializationCode = "\n#if (PHP_VERSION_ID >= " . PHP_80_VERSION_ID . ") " . $ attributeInitializationCode . "#endif \n" ;
51835186 }
@@ -5289,6 +5292,51 @@ static function (FuncInfo $funcInfo) use ($allConstInfos, $phpVersionIdMinimumCo
52895292 );
52905293}
52915294
5295+ /**
5296+ * @param iterable<ConstInfo> $constInfos
5297+ * @param array<string, ConstInfo> $allConstInfos
5298+ */
5299+ function generateGlobalConstantAttributeInitialization (
5300+ iterable $ constInfos ,
5301+ array $ allConstInfos ,
5302+ ?int $ phpVersionIdMinimumCompatibility ,
5303+ ?string $ parentCond = null
5304+ ): string {
5305+ $ isConditional = false ;
5306+ if ($ phpVersionIdMinimumCompatibility !== null && $ phpVersionIdMinimumCompatibility < PHP_85_VERSION_ID ) {
5307+ $ isConditional = true ;
5308+ $ phpVersionIdMinimumCompatibility = PHP_85_VERSION_ID ;
5309+ }
5310+ $ code = generateCodeWithConditions (
5311+ $ constInfos ,
5312+ "" ,
5313+ static function (ConstInfo $ constInfo ) use ($ allConstInfos , $ phpVersionIdMinimumCompatibility ) {
5314+ if ($ constInfo ->attributes === []) {
5315+ return null ;
5316+ }
5317+ $ constName = str_replace ('\\' , '\\\\' , $ constInfo ->name ->__toString ());
5318+ $ constVarName = 'const_ ' . $ constName ;
5319+
5320+ $ code .= "\tzend_constant * $ constVarName = zend_hash_str_find_ptr(EG(zend_constants), \"" . $ constName . "\", sizeof( \"" . $ constName . "\") - 1); \n" ;
5321+ foreach ($ constInfo ->attributes as $ key => $ attribute ) {
5322+ $ code .= $ attribute ->generateCode (
5323+ "zend_add_global_constant_attribute( $ constVarName " ,
5324+ $ constVarName . "_ $ key " ,
5325+ $ allConstInfos ,
5326+ $ phpVersionIdMinimumCompatibility
5327+ );
5328+ }
5329+
5330+ return $ code ;
5331+ },
5332+ $ parentCond
5333+ );
5334+ if ($ code && $ isConditional ) {
5335+ return "\n#if (PHP_VERSION_ID >= " . PHP_85_VERSION_ID . ") \n" . $ code . "#endif \n" ;
5336+ }
5337+ return $ code ;
5338+ }
5339+
52925340/**
52935341 * @param iterable<ConstInfo> $constInfos
52945342 * @param array<string, ConstInfo> $allConstInfos
@@ -6030,7 +6078,7 @@ function initPhpParser() {
60306078 }
60316079
60326080 $ isInitialized = true ;
6033- $ version = "5.3.1 " ;
6081+ $ version = "5.5.0 " ;
60346082 $ phpParserDir = __DIR__ . "/PHP-Parser- $ version " ;
60356083 if (!is_dir ($ phpParserDir )) {
60366084 installPhpParser ($ version , $ phpParserDir );
0 commit comments