From 68e2620baa24a33895138b0b8f7cd03eb33a61b6 Mon Sep 17 00:00:00 2001 From: Sergii Dolgushev Date: Fri, 20 Jun 2025 17:01:35 +0100 Subject: [PATCH 1/7] Add Asymmetric Visibility flags --- README.md | 3 +++ ast.c | 18 +++++++++++++++++- ast_stub.php | 3 +++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a48b45..35ef082 100644 --- a/README.md +++ b/README.md @@ -237,6 +237,9 @@ ast\flags\MODIFIER_STATIC ast\flags\MODIFIER_ABSTRACT ast\flags\MODIFIER_FINAL ast\flags\MODIFIER_READONLY +ast\flags\MODIFIER_PUBLIC_SET +ast\flags\MODIFIER_PROTECTED_SET +ast\flags\MODIFIER_PRIVATE_SET // Used by ast\AST_CLOSURE, ast\AST_ARROW_FUNC (combinable) ast\flags\MODIFIER_STATIC diff --git a/ast.c b/ast.c index e372d75..6907114 100644 --- a/ast.c +++ b/ast.c @@ -117,6 +117,16 @@ # define ZEND_ENCAPS_VAR_DOLLAR_CURLY_VAR_VAR (1<<1) #endif +#if PHP_VERSION_ID < 80400 +# define MODIFIER_PUBLIC_SET (1 << 10) +# define MODIFIER_PROTECTED_SET (1 << 11) +# define MODIFIER_PRIVATE_SET (1 << 12) +#else +# define MODIFIER_PUBLIC_SET ZEND_ACC_PUBLIC_SET +# define MODIFIER_PROTECTED_SET ZEND_ACC_PROTECTED_SET +# define MODIFIER_PRIVATE_SET ZEND_ACC_PRIVATE_SET +#endif + #if PHP_VERSION_ID >= 80400 # define ZEND_DIM_ALTERNATIVE_SYNTAX (1<<1) #endif @@ -287,7 +297,10 @@ static const char *closure_use_flags[] = { AST_FLAG(MODIFIER_STATIC), \ AST_FLAG(MODIFIER_ABSTRACT), \ AST_FLAG(MODIFIER_FINAL), \ - AST_FLAG(MODIFIER_READONLY) + AST_FLAG(MODIFIER_READONLY) , \ + AST_FLAG(MODIFIER_PUBLIC_SET) , \ + AST_FLAG(MODIFIER_PROTECTED_SET) , \ + AST_FLAG(MODIFIER_PRIVATE_SET) static const char *modifier_flags[] = { AST_MODIFIER_FLAGS, @@ -1466,6 +1479,9 @@ PHP_MINIT_FUNCTION(ast) { ast_register_flag_constant("MODIFIER_ABSTRACT", ZEND_ACC_ABSTRACT); ast_register_flag_constant("MODIFIER_FINAL", ZEND_ACC_FINAL); ast_register_flag_constant("MODIFIER_READONLY", ZEND_ACC_READONLY); + ast_register_flag_constant("MODIFIER_PUBLIC_SET", MODIFIER_PUBLIC_SET); + ast_register_flag_constant("MODIFIER_PROTECTED_SET", MODIFIER_PROTECTED_SET); + ast_register_flag_constant("MODIFIER_PRIVATE_SET", MODIFIER_PRIVATE_SET); ast_register_flag_constant("PARAM_MODIFIER_PUBLIC", PARAM_MODIFIER_PUBLIC); ast_register_flag_constant("PARAM_MODIFIER_PROTECTED", PARAM_MODIFIER_PROTECTED); diff --git a/ast_stub.php b/ast_stub.php index 3a6cfcd..e5e5c2a 100644 --- a/ast_stub.php +++ b/ast_stub.php @@ -129,6 +129,9 @@ const MODIFIER_ABSTRACT = 64; const MODIFIER_FINAL = 32; const MODIFIER_READONLY = 128; +const MODIFIER_PUBLIC_SET = 1024; +const MODIFIER_PROTECTED_SET = 2048; +const MODIFIER_PRIVATE_SET = 4096; const PARAM_MODIFIER_PUBLIC = 1; const PARAM_MODIFIER_PROTECTED = 2; const PARAM_MODIFIER_PRIVATE = 4; From 18b863793ae4343395ad98c6bba282e127916fda Mon Sep 17 00:00:00 2001 From: Sergii Dolgushev Date: Fri, 20 Jun 2025 17:32:53 +0100 Subject: [PATCH 2/7] Fix tests --- tests/metadata.phpt | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tests/metadata.phpt b/tests/metadata.phpt index 615e151..1c7c9b6 100644 --- a/tests/metadata.phpt +++ b/tests/metadata.phpt @@ -37,9 +37,9 @@ AST_SWITCH_LIST: [] AST_CATCH_LIST: [] AST_PARAM_LIST: [] AST_CLOSURE_USES: [] -AST_PROP_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] +AST_PROP_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] AST_CONST_DECL: [] -AST_CLASS_CONST_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] +AST_CLASS_CONST_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] AST_NAME_LIST: [] AST_TRAIT_ADAPTATIONS: [] AST_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST] @@ -51,12 +51,12 @@ AST_MATCH_ARM_LIST: [] AST_NAME: [NAME_FQ, NAME_NOT_FQ, NAME_RELATIVE] AST_CLOSURE_VAR: [CLOSURE_USE_REF] AST_NULLABLE_TYPE: [] -AST_FUNC_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] -AST_CLOSURE: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] -AST_METHOD: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] -AST_ARROW_FUNC: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_FUNC_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_CLOSURE: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_METHOD: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_ARROW_FUNC: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] AST_CLASS: (combinable) [CLASS_ABSTRACT, CLASS_FINAL, CLASS_TRAIT, CLASS_INTERFACE, CLASS_ANONYMOUS, CLASS_ENUM, CLASS_READONLY] -AST_PROPERTY_HOOK: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_PROPERTY_HOOK: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] AST_MAGIC_CONST: [MAGIC_LINE, MAGIC_FILE, MAGIC_DIR, MAGIC_NAMESPACE, MAGIC_FUNCTION, MAGIC_METHOD, MAGIC_CLASS, MAGIC_TRAIT] AST_TYPE: [TYPE_NULL, TYPE_FALSE, TYPE_TRUE, TYPE_BOOL, TYPE_LONG, TYPE_DOUBLE, TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT, TYPE_CALLABLE, TYPE_VOID, TYPE_ITERABLE, TYPE_STATIC, TYPE_MIXED, TYPE_NEVER] AST_CALLABLE_CONVERT: [] @@ -90,7 +90,7 @@ AST_BREAK: [] AST_CONTINUE: [] AST_CLASS_NAME: [] AST_PROPERTY_HOOK_SHORT_BODY: [] -AST_CLASS_CONST_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] +AST_CLASS_CONST_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] AST_DIM: (combinable) [DIM_ALTERNATIVE_SYNTAX, ENCAPS_VAR_DOLLAR_CURLY] AST_PROP: [] AST_NULLSAFE_PROP: [] @@ -113,14 +113,14 @@ AST_SWITCH: [] AST_SWITCH_CASE: [] AST_DECLARE: [] AST_PROP_ELEM: [] -AST_PROP_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] +AST_PROP_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] AST_CONST_ELEM: [] AST_USE_TRAIT: [] AST_TRAIT_PRECEDENCE: [] AST_METHOD_REFERENCE: [] AST_NAMESPACE: [] AST_USE_ELEM: [USE_NORMAL, USE_FUNCTION, USE_CONST] -AST_TRAIT_ALIAS: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] +AST_TRAIT_ALIAS: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] AST_GROUP_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST] AST_ATTRIBUTE: [] AST_MATCH: [] From 381b82c2ad03108f115c8daaa4dc5c3de0829655 Mon Sep 17 00:00:00 2001 From: Sergii Dolgushev Date: Fri, 20 Jun 2025 17:34:11 +0100 Subject: [PATCH 3/7] Review feedback --- ast.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ast.c b/ast.c index 6907114..e67b308 100644 --- a/ast.c +++ b/ast.c @@ -297,9 +297,9 @@ static const char *closure_use_flags[] = { AST_FLAG(MODIFIER_STATIC), \ AST_FLAG(MODIFIER_ABSTRACT), \ AST_FLAG(MODIFIER_FINAL), \ - AST_FLAG(MODIFIER_READONLY) , \ - AST_FLAG(MODIFIER_PUBLIC_SET) , \ - AST_FLAG(MODIFIER_PROTECTED_SET) , \ + AST_FLAG(MODIFIER_READONLY), \ + AST_FLAG(MODIFIER_PUBLIC_SET), \ + AST_FLAG(MODIFIER_PROTECTED_SET), \ AST_FLAG(MODIFIER_PRIVATE_SET) static const char *modifier_flags[] = { From d04a1d6099957deb7ab27c46dad2e53ef4dcc0f9 Mon Sep 17 00:00:00 2001 From: Sergii Dolgushev Date: Fri, 20 Jun 2025 17:46:24 +0100 Subject: [PATCH 4/7] Added test --- package.xml | 1 + tests/asymmetric_visibility.phpt | 134 +++++++++++++++++++++++++++++++ 2 files changed, 135 insertions(+) create mode 100644 tests/asymmetric_visibility.phpt diff --git a/package.xml b/package.xml index b5680ab..ad0363b 100644 --- a/package.xml +++ b/package.xml @@ -52,6 +52,7 @@ + diff --git a/tests/asymmetric_visibility.phpt b/tests/asymmetric_visibility.phpt new file mode 100644 index 0000000..78562ae --- /dev/null +++ b/tests/asymmetric_visibility.phpt @@ -0,0 +1,134 @@ +--TEST-- +Asymmetric Visibility in php 8.4 +--SKIPIF-- +=8.4 only'); ?> +--FILE-- + Date: Mon, 23 Jun 2025 07:38:15 +0100 Subject: [PATCH 5/7] Undefine new flags for <8.4 --- ast.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ast.c b/ast.c index e67b308..d9514e1 100644 --- a/ast.c +++ b/ast.c @@ -118,9 +118,9 @@ #endif #if PHP_VERSION_ID < 80400 -# define MODIFIER_PUBLIC_SET (1 << 10) -# define MODIFIER_PROTECTED_SET (1 << 11) -# define MODIFIER_PRIVATE_SET (1 << 12) +# define MODIFIER_PUBLIC_SET 0 +# define MODIFIER_PROTECTED_SET 0 +# define MODIFIER_PRIVATE_SET 0 #else # define MODIFIER_PUBLIC_SET ZEND_ACC_PUBLIC_SET # define MODIFIER_PROTECTED_SET ZEND_ACC_PROTECTED_SET From 2f18242a5c4e2e9fe0e5c90de6cb5c238068c830 Mon Sep 17 00:00:00 2001 From: Sergii Dolgushev Date: Mon, 23 Jun 2025 14:21:20 +0100 Subject: [PATCH 6/7] Introduce ASYMMETRIC_VISIBILITY only for properties --- ast.c | 15 ++++++++++++--- tests/metadata.phpt | 16 ++++++++-------- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/ast.c b/ast.c index d9514e1..2706b12 100644 --- a/ast.c +++ b/ast.c @@ -297,7 +297,9 @@ static const char *closure_use_flags[] = { AST_FLAG(MODIFIER_STATIC), \ AST_FLAG(MODIFIER_ABSTRACT), \ AST_FLAG(MODIFIER_FINAL), \ - AST_FLAG(MODIFIER_READONLY), \ + AST_FLAG(MODIFIER_READONLY) + +#define AST_ASYMMETRIC_VISIBILITY_FLAGS \ AST_FLAG(MODIFIER_PUBLIC_SET), \ AST_FLAG(MODIFIER_PROTECTED_SET), \ AST_FLAG(MODIFIER_PRIVATE_SET) @@ -307,6 +309,13 @@ static const char *modifier_flags[] = { NULL }; +static const char *property_modifier_flags[] = { + AST_MODIFIER_FLAGS, + AST_ASYMMETRIC_VISIBILITY_FLAGS, + NULL +}; + + static const char *func_flags[] = { AST_MODIFIER_FLAGS, AST_FLAG(FUNC_RETURNS_REF), @@ -354,8 +363,8 @@ static const ast_flag_info flag_info[] = { { ZEND_AST_CLOSURE, 1, func_flags }, { ZEND_AST_ARROW_FUNC, 1, func_flags }, { ZEND_AST_PROPERTY_HOOK, 1, func_flags }, - { ZEND_AST_PROP_DECL, 1, modifier_flags }, - { ZEND_AST_PROP_GROUP, 1, modifier_flags }, + { ZEND_AST_PROP_DECL, 1, property_modifier_flags }, + { ZEND_AST_PROP_GROUP, 1, property_modifier_flags }, { ZEND_AST_CLASS_CONST_DECL, 1, modifier_flags }, { ZEND_AST_CLASS_CONST_GROUP, 1, modifier_flags }, { ZEND_AST_TRAIT_ALIAS, 1, modifier_flags }, diff --git a/tests/metadata.phpt b/tests/metadata.phpt index 1c7c9b6..a8165b2 100644 --- a/tests/metadata.phpt +++ b/tests/metadata.phpt @@ -39,7 +39,7 @@ AST_PARAM_LIST: [] AST_CLOSURE_USES: [] AST_PROP_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] AST_CONST_DECL: [] -AST_CLASS_CONST_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] +AST_CLASS_CONST_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] AST_NAME_LIST: [] AST_TRAIT_ADAPTATIONS: [] AST_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST] @@ -51,12 +51,12 @@ AST_MATCH_ARM_LIST: [] AST_NAME: [NAME_FQ, NAME_NOT_FQ, NAME_RELATIVE] AST_CLOSURE_VAR: [CLOSURE_USE_REF] AST_NULLABLE_TYPE: [] -AST_FUNC_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] -AST_CLOSURE: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] -AST_METHOD: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] -AST_ARROW_FUNC: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_FUNC_DECL: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_CLOSURE: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_METHOD: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_ARROW_FUNC: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] AST_CLASS: (combinable) [CLASS_ABSTRACT, CLASS_FINAL, CLASS_TRAIT, CLASS_INTERFACE, CLASS_ANONYMOUS, CLASS_ENUM, CLASS_READONLY] -AST_PROPERTY_HOOK: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET, FUNC_RETURNS_REF, FUNC_GENERATOR] +AST_PROPERTY_HOOK: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, FUNC_RETURNS_REF, FUNC_GENERATOR] AST_MAGIC_CONST: [MAGIC_LINE, MAGIC_FILE, MAGIC_DIR, MAGIC_NAMESPACE, MAGIC_FUNCTION, MAGIC_METHOD, MAGIC_CLASS, MAGIC_TRAIT] AST_TYPE: [TYPE_NULL, TYPE_FALSE, TYPE_TRUE, TYPE_BOOL, TYPE_LONG, TYPE_DOUBLE, TYPE_STRING, TYPE_ARRAY, TYPE_OBJECT, TYPE_CALLABLE, TYPE_VOID, TYPE_ITERABLE, TYPE_STATIC, TYPE_MIXED, TYPE_NEVER] AST_CALLABLE_CONVERT: [] @@ -90,7 +90,7 @@ AST_BREAK: [] AST_CONTINUE: [] AST_CLASS_NAME: [] AST_PROPERTY_HOOK_SHORT_BODY: [] -AST_CLASS_CONST_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] +AST_CLASS_CONST_GROUP: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] AST_DIM: (combinable) [DIM_ALTERNATIVE_SYNTAX, ENCAPS_VAR_DOLLAR_CURLY] AST_PROP: [] AST_NULLSAFE_PROP: [] @@ -120,7 +120,7 @@ AST_TRAIT_PRECEDENCE: [] AST_METHOD_REFERENCE: [] AST_NAMESPACE: [] AST_USE_ELEM: [USE_NORMAL, USE_FUNCTION, USE_CONST] -AST_TRAIT_ALIAS: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY, MODIFIER_PUBLIC_SET, MODIFIER_PROTECTED_SET, MODIFIER_PRIVATE_SET] +AST_TRAIT_ALIAS: (combinable) [MODIFIER_PUBLIC, MODIFIER_PROTECTED, MODIFIER_PRIVATE, MODIFIER_STATIC, MODIFIER_ABSTRACT, MODIFIER_FINAL, MODIFIER_READONLY] AST_GROUP_USE: [USE_NORMAL, USE_FUNCTION, USE_CONST] AST_ATTRIBUTE: [] AST_MATCH: [] From da561300b7a08003ed5248c47581be6a3b4990a3 Mon Sep 17 00:00:00 2001 From: Sergii Dolgushev Date: Mon, 23 Jun 2025 14:22:33 +0100 Subject: [PATCH 7/7] Introduce ASYMMETRIC_VISIBILITY only for properties #2 --- ast.c | 1 - 1 file changed, 1 deletion(-) diff --git a/ast.c b/ast.c index 2706b12..e45b874 100644 --- a/ast.c +++ b/ast.c @@ -315,7 +315,6 @@ static const char *property_modifier_flags[] = { NULL }; - static const char *func_flags[] = { AST_MODIFIER_FLAGS, AST_FLAG(FUNC_RETURNS_REF),