@@ -893,20 +893,21 @@ uint32_t zend_modifier_token_to_flag(zend_modifier_target target, uint32_t token
893893 }
894894 break ;
895895 case T_READONLY :
896- if (target == ZEND_MODIFIER_TARGET_PROPERTY || target == ZEND_MODIFIER_TARGET_CPP ) {
896+ if (target == ZEND_MODIFIER_TARGET_PROPERTY || target == ZEND_MODIFIER_TARGET_CPP || target == ZEND_MODIFIER_TARGET_NESTED_CLASS ) {
897897 return ZEND_ACC_READONLY ;
898898 }
899899 break ;
900900 case T_ABSTRACT :
901- if (target == ZEND_MODIFIER_TARGET_METHOD || target == ZEND_MODIFIER_TARGET_PROPERTY ) {
901+ if (target == ZEND_MODIFIER_TARGET_METHOD || target == ZEND_MODIFIER_TARGET_PROPERTY || target == ZEND_MODIFIER_TARGET_NESTED_CLASS ) {
902902 return ZEND_ACC_ABSTRACT ;
903903 }
904904 break ;
905905 case T_FINAL :
906906 if (target == ZEND_MODIFIER_TARGET_METHOD
907907 || target == ZEND_MODIFIER_TARGET_CONSTANT
908908 || target == ZEND_MODIFIER_TARGET_PROPERTY
909- || target == ZEND_MODIFIER_TARGET_PROPERTY_HOOK ) {
909+ || target == ZEND_MODIFIER_TARGET_PROPERTY_HOOK
910+ || target == ZEND_MODIFIER_TARGET_NESTED_CLASS ) {
910911 return ZEND_ACC_FINAL ;
911912 }
912913 break ;
@@ -943,6 +944,8 @@ uint32_t zend_modifier_token_to_flag(zend_modifier_target target, uint32_t token
943944 member = "parameter" ;
944945 } else if (target == ZEND_MODIFIER_TARGET_PROPERTY_HOOK ) {
945946 member = "property hook" ;
947+ } else if (target == ZEND_MODIFIER_TARGET_NESTED_CLASS ) {
948+ member = "nested class" ;
946949 } else {
947950 ZEND_UNREACHABLE ();
948951 }
@@ -1050,6 +1053,37 @@ uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag, zend_modifi
10501053 return 0 ;
10511054 }
10521055 }
1056+ if (target == ZEND_MODIFIER_TARGET_NESTED_CLASS ) {
1057+ if ((flags & ZEND_ACC_PPP_MASK ) && (new_flag & ZEND_ACC_PPP_MASK )) {
1058+ zend_throw_exception (zend_ce_compile_error ,
1059+ "Multiple access type modifiers are not allowed" , 0 );
1060+ return 0 ;
1061+ }
1062+
1063+ if ((flags & ZEND_ACC_STATIC ) || (new_flag & ZEND_ACC_STATIC )) {
1064+ zend_throw_exception (zend_ce_compile_error ,
1065+ "Static inner classes are not allowed" , 0 );
1066+ return 0 ;
1067+ }
1068+
1069+ if ((flags & ZEND_ACC_PUBLIC_SET ) || (new_flag & ZEND_ACC_PUBLIC_SET )) {
1070+ zend_throw_exception (zend_ce_compile_error ,
1071+ "Public(set) inner classes are not allowed" , 0 );
1072+ return 0 ;
1073+ }
1074+
1075+ if ((flags & ZEND_ACC_PROTECTED_SET ) || (new_flag & ZEND_ACC_PROTECTED_SET )) {
1076+ zend_throw_exception (zend_ce_compile_error ,
1077+ "Protected(set) inner classes are not allowed" , 0 );
1078+ return 0 ;
1079+ }
1080+
1081+ if ((flags & ZEND_ACC_PRIVATE_SET ) || (new_flag & ZEND_ACC_PRIVATE_SET )) {
1082+ zend_throw_exception (zend_ce_compile_error ,
1083+ "Private(set) inner classes are not allowed" , 0 );
1084+ return 0 ;
1085+ }
1086+ }
10531087 return new_flags ;
10541088}
10551089/* }}} */
0 commit comments