@@ -893,20 +893,21 @@ uint32_t zend_modifier_token_to_flag(zend_modifier_target target, uint32_t token
893
893
}
894
894
break ;
895
895
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_INNER_CLASS ) {
897
897
return ZEND_ACC_READONLY ;
898
898
}
899
899
break ;
900
900
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_INNER_CLASS ) {
902
902
return ZEND_ACC_ABSTRACT ;
903
903
}
904
904
break ;
905
905
case T_FINAL :
906
906
if (target == ZEND_MODIFIER_TARGET_METHOD
907
907
|| target == ZEND_MODIFIER_TARGET_CONSTANT
908
908
|| target == ZEND_MODIFIER_TARGET_PROPERTY
909
- || target == ZEND_MODIFIER_TARGET_PROPERTY_HOOK ) {
909
+ || target == ZEND_MODIFIER_TARGET_PROPERTY_HOOK
910
+ || target == ZEND_MODIFIER_TARGET_INNER_CLASS ) {
910
911
return ZEND_ACC_FINAL ;
911
912
}
912
913
break ;
@@ -943,6 +944,8 @@ uint32_t zend_modifier_token_to_flag(zend_modifier_target target, uint32_t token
943
944
member = "parameter" ;
944
945
} else if (target == ZEND_MODIFIER_TARGET_PROPERTY_HOOK ) {
945
946
member = "property hook" ;
947
+ } else if (target == ZEND_MODIFIER_TARGET_INNER_CLASS ) {
948
+ member = "nested class" ;
946
949
} else {
947
950
ZEND_UNREACHABLE ();
948
951
}
@@ -1050,6 +1053,37 @@ uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag, zend_modifi
1050
1053
return 0 ;
1051
1054
}
1052
1055
}
1056
+ if (target == ZEND_MODIFIER_TARGET_INNER_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
+ }
1053
1087
return new_flags ;
1054
1088
}
1055
1089
/* }}} */
0 commit comments