Skip to content

Commit a81615b

Browse files
committed
Define visibility flags for namespace-scoped members
Add flag definitions for the upcoming private(namespace) visibility feature: - ZEND_ACC_NAMESPACE_PRIVATE (bit 30): Primary visibility for methods/properties - ZEND_ACC_NAMESPACE_PRIVATE_SET (bit 13): Asymmetric visibility for property writes Also updates visibility masks and conversion functions to include the new flags. These flags will be set by the parser and checked at runtime during method/property access.
1 parent 047860b commit a81615b

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

Zend/zend_compile.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,9 @@ typedef struct _zend_oparray_context {
221221
#define ZEND_ACC_PROTECTED (1 << 1) /* | X | X | X */
222222
#define ZEND_ACC_PRIVATE (1 << 2) /* | X | X | X */
223223
/* | | | */
224+
/* Namespace-scoped visibility | | | */
225+
#define ZEND_ACC_NAMESPACE_PRIVATE (1 << 30) /* | X | X | */
226+
/* | | | */
224227
/* Property or method overrides private one | | | */
225228
#define ZEND_ACC_CHANGED (1 << 3) /* | X | X | */
226229
/* | | | */
@@ -274,6 +277,7 @@ typedef struct _zend_oparray_context {
274277
#define ZEND_ACC_PUBLIC_SET (1 << 10) /* | | X | */
275278
#define ZEND_ACC_PROTECTED_SET (1 << 11) /* | | X | */
276279
#define ZEND_ACC_PRIVATE_SET (1 << 12) /* | | X | */
280+
#define ZEND_ACC_NAMESPACE_PRIVATE_SET (1 << 13) /* | | X | */
277281
/* | | | */
278282
/* Class Flags (unused: 31) | | | */
279283
/* =========== | | | */
@@ -418,8 +422,8 @@ typedef struct _zend_oparray_context {
418422
/* | | | */
419423
/* #define ZEND_ACC2_EXAMPLE (1 << 0) | X | | */
420424

421-
#define ZEND_ACC_PPP_MASK (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE)
422-
#define ZEND_ACC_PPP_SET_MASK (ZEND_ACC_PUBLIC_SET | ZEND_ACC_PROTECTED_SET | ZEND_ACC_PRIVATE_SET)
425+
#define ZEND_ACC_PPP_MASK (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE | ZEND_ACC_NAMESPACE_PRIVATE)
426+
#define ZEND_ACC_PPP_SET_MASK (ZEND_ACC_PUBLIC_SET | ZEND_ACC_PROTECTED_SET | ZEND_ACC_PRIVATE_SET | ZEND_ACC_NAMESPACE_PRIVATE_SET)
423427

424428
static zend_always_inline uint32_t zend_visibility_to_set_visibility(uint32_t visibility)
425429
{
@@ -430,6 +434,8 @@ static zend_always_inline uint32_t zend_visibility_to_set_visibility(uint32_t vi
430434
return ZEND_ACC_PROTECTED_SET;
431435
case ZEND_ACC_PRIVATE:
432436
return ZEND_ACC_PRIVATE_SET;
437+
case ZEND_ACC_NAMESPACE_PRIVATE:
438+
return ZEND_ACC_NAMESPACE_PRIVATE_SET;
433439
EMPTY_SWITCH_DEFAULT_CASE();
434440
}
435441
}

Zend/zend_inheritance.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,8 @@ const char *zend_visibility_string(uint32_t fn_flags) /* {{{ */
204204
{
205205
if (fn_flags & ZEND_ACC_PUBLIC) {
206206
return "public";
207+
} else if (fn_flags & ZEND_ACC_NAMESPACE_PRIVATE) {
208+
return "private(namespace)";
207209
} else if (fn_flags & ZEND_ACC_PRIVATE) {
208210
return "private";
209211
} else {
@@ -215,7 +217,9 @@ const char *zend_visibility_string(uint32_t fn_flags) /* {{{ */
215217

216218
static const char *zend_asymmetric_visibility_string(uint32_t fn_flags) /* {{{ */
217219
{
218-
if (fn_flags & ZEND_ACC_PRIVATE_SET) {
220+
if (fn_flags & ZEND_ACC_NAMESPACE_PRIVATE_SET) {
221+
return "private(namespace)(set)";
222+
} else if (fn_flags & ZEND_ACC_PRIVATE_SET) {
219223
return "private(set)";
220224
} else if (fn_flags & ZEND_ACC_PROTECTED_SET) {
221225
return "protected(set)";

0 commit comments

Comments
 (0)