Skip to content

Commit b43a7ac

Browse files
authored
Zend: Make EG(fake_scope) a const zend_class_entry* (#19060)
1 parent 64e2832 commit b43a7ac

File tree

9 files changed

+34
-34
lines changed

9 files changed

+34
-34
lines changed

UPGRADING.INTERNALS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ PHP 8.5 INTERNALS UPGRADE NOTES
6565
* zend_register_double_constant()
6666
* zend_register_string_constant()
6767
* zend_register_stringl_constant()
68+
. EG(fake_scope) now is a _const_ zend_class_entry*.
6869

6970
========================
7071
2. Build system changes

Zend/Optimizer/zend_inference.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2409,7 +2409,7 @@ static const zend_property_info *lookup_prop_info(const zend_class_entry *ce, ze
24092409
/* If the class is linked, reuse the precise runtime logic. */
24102410
if ((ce->ce_flags & ZEND_ACC_LINKED)
24112411
&& (!scope || (scope->ce_flags & ZEND_ACC_LINKED))) {
2412-
zend_class_entry *prev_scope = EG(fake_scope);
2412+
const zend_class_entry *prev_scope = EG(fake_scope);
24132413
EG(fake_scope) = scope;
24142414
prop_info = zend_get_property_info(ce, name, 1);
24152415
EG(fake_scope) = prev_scope;

Zend/zend_API.c

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1400,13 +1400,14 @@ ZEND_API void zend_merge_properties(zval *obj, HashTable *properties) /* {{{ */
14001400
{
14011401
zend_object *zobj = Z_OBJ_P(obj);
14021402
zend_object_write_property_t write_property = zobj->handlers->write_property;
1403-
zend_class_entry *old_scope = EG(fake_scope);
14041403
zend_string *key;
14051404
zval *value;
14061405

14071406
if (HT_IS_PACKED(properties)) {
14081407
return;
14091408
}
1409+
1410+
const zend_class_entry *old_scope = EG(fake_scope);
14101411
EG(fake_scope) = Z_OBJCE_P(obj);
14111412
ZEND_HASH_MAP_FOREACH_STR_KEY_VAL(properties, key, value) {
14121413
if (key) {
@@ -1746,7 +1747,7 @@ ZEND_API void object_properties_load(zend_object *object, HashTable *properties)
17461747
size_t prop_name_len;
17471748
if (zend_unmangle_property_name_ex(key, &class_name, &prop_name, &prop_name_len) == SUCCESS) {
17481749
zend_string *pname = zend_string_init(prop_name, prop_name_len, 0);
1749-
zend_class_entry *prev_scope = EG(fake_scope);
1750+
const zend_class_entry *prev_scope = EG(fake_scope);
17501751
if (class_name && class_name[0] != '*') {
17511752
zend_string *cname = zend_string_init(class_name, strlen(class_name), 0);
17521753
EG(fake_scope) = zend_lookup_class(cname);
@@ -5001,7 +5002,7 @@ ZEND_API void zend_declare_class_constant_string(zend_class_entry *ce, const cha
50015002

50025003
ZEND_API void zend_update_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, zval *value) /* {{{ */
50035004
{
5004-
zend_class_entry *old_scope = EG(fake_scope);
5005+
const zend_class_entry *old_scope = EG(fake_scope);
50055006

50065007
EG(fake_scope) = scope;
50075008

@@ -5014,7 +5015,7 @@ ZEND_API void zend_update_property_ex(zend_class_entry *scope, zend_object *obje
50145015
ZEND_API void zend_update_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length, zval *value) /* {{{ */
50155016
{
50165017
zend_string *property;
5017-
zend_class_entry *old_scope = EG(fake_scope);
5018+
const zend_class_entry *old_scope = EG(fake_scope);
50185019

50195020
EG(fake_scope) = scope;
50205021

@@ -5038,7 +5039,7 @@ ZEND_API void zend_update_property_null(zend_class_entry *scope, zend_object *ob
50385039
ZEND_API void zend_unset_property(zend_class_entry *scope, zend_object *object, const char *name, size_t name_length) /* {{{ */
50395040
{
50405041
zend_string *property;
5041-
zend_class_entry *old_scope = EG(fake_scope);
5042+
const zend_class_entry *old_scope = EG(fake_scope);
50425043

50435044
EG(fake_scope) = scope;
50445045

@@ -5110,14 +5111,14 @@ ZEND_API zend_result zend_update_static_property_ex(zend_class_entry *scope, zen
51105111
{
51115112
zval *property, tmp;
51125113
zend_property_info *prop_info;
5113-
zend_class_entry *old_scope = EG(fake_scope);
51145114

51155115
if (UNEXPECTED(!(scope->ce_flags & ZEND_ACC_CONSTANTS_UPDATED))) {
51165116
if (UNEXPECTED(zend_update_class_constants(scope) != SUCCESS)) {
51175117
return FAILURE;
51185118
}
51195119
}
51205120

5121+
const zend_class_entry *old_scope = EG(fake_scope);
51215122
EG(fake_scope) = scope;
51225123
property = zend_std_get_static_property_with_info(scope, name, BP_VAR_W, &prop_info);
51235124
EG(fake_scope) = old_scope;
@@ -5210,7 +5211,7 @@ ZEND_API zend_result zend_update_static_property_stringl(zend_class_entry *scope
52105211
ZEND_API zval *zend_read_property_ex(zend_class_entry *scope, zend_object *object, zend_string *name, bool silent, zval *rv) /* {{{ */
52115212
{
52125213
zval *value;
5213-
zend_class_entry *old_scope = EG(fake_scope);
5214+
const zend_class_entry *old_scope = EG(fake_scope);
52145215

52155216
EG(fake_scope) = scope;
52165217

@@ -5236,7 +5237,7 @@ ZEND_API zval *zend_read_property(zend_class_entry *scope, zend_object *object,
52365237
ZEND_API zval *zend_read_static_property_ex(zend_class_entry *scope, zend_string *name, bool silent) /* {{{ */
52375238
{
52385239
zval *property;
5239-
zend_class_entry *old_scope = EG(fake_scope);
5240+
const zend_class_entry *old_scope = EG(fake_scope);
52405241

52415242
EG(fake_scope) = scope;
52425243
property = zend_std_get_static_property(scope, name, silent ? BP_VAR_IS : BP_VAR_R);

Zend/zend_exceptions.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,7 @@ static void zend_update_property_num_checked(zend_class_entry *scope, zend_objec
274274
return;
275275
}
276276
#if ZEND_DEBUG
277-
zend_class_entry *old_scope = EG(fake_scope);
277+
const zend_class_entry *old_scope = EG(fake_scope);
278278
EG(fake_scope) = i_get_exception_base(object);
279279
const zend_property_info *prop_info = zend_get_property_info(object->ce, member, true);
280280
ZEND_ASSERT(OBJ_PROP_TO_NUM(prop_info->offset) == prop_num);

Zend/zend_execute.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -932,7 +932,7 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_object_released_while_assigning_to_pr
932932
ZEND_API ZEND_COLD void ZEND_FASTCALL zend_asymmetric_visibility_property_modification_error(
933933
const zend_property_info *prop_info, const char *operation
934934
) {
935-
zend_class_entry *scope;
935+
const zend_class_entry *scope;
936936
if (EG(fake_scope)) {
937937
scope = EG(fake_scope);
938938
} else {

Zend/zend_execute_API.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -814,7 +814,6 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_
814814
zend_function *func;
815815
uint32_t call_info;
816816
void *object_or_called_scope;
817-
zend_class_entry *orig_fake_scope;
818817

819818
ZVAL_UNDEF(fci->retval);
820819

@@ -1003,7 +1002,7 @@ zend_result zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_
10031002
fci_cache->function_handler = NULL;
10041003
}
10051004

1006-
orig_fake_scope = EG(fake_scope);
1005+
const zend_class_entry *orig_fake_scope = EG(fake_scope);
10071006
EG(fake_scope) = NULL;
10081007
if (func->type == ZEND_USER_FUNCTION) {
10091008
uint32_t orig_jit_trace_num = EG(jit_trace_num);

Zend/zend_globals.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ struct _zend_executor_globals {
198198
size_t vm_stack_page_size;
199199

200200
struct _zend_execute_data *current_execute_data;
201-
zend_class_entry *fake_scope; /* used to avoid checks accessing properties */
201+
const zend_class_entry *fake_scope; /* used to avoid checks accessing properties */
202202

203203
uint32_t jit_trace_num; /* Used by tracing JIT to reference the currently running trace */
204204

Zend/zend_object_handlers.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@ static ZEND_COLD zend_never_inline void zend_readonly_property_unset_error(
350350
ZSTR_VAL(ce->name), ZSTR_VAL(member));
351351
}
352352

353-
static zend_always_inline zend_class_entry *get_fake_or_executed_scope(void)
353+
static zend_always_inline const zend_class_entry *get_fake_or_executed_scope(void)
354354
{
355355
if (UNEXPECTED(EG(fake_scope))) {
356356
return EG(fake_scope);
@@ -391,7 +391,7 @@ static zend_always_inline uintptr_t zend_get_property_offset(zend_class_entry *c
391391
flags = property_info->flags;
392392

393393
if (flags & (ZEND_ACC_CHANGED|ZEND_ACC_PRIVATE|ZEND_ACC_PROTECTED)) {
394-
zend_class_entry *scope = get_fake_or_executed_scope();
394+
const zend_class_entry *scope = get_fake_or_executed_scope();
395395

396396
if (property_info->ce != scope) {
397397
if (flags & ZEND_ACC_CHANGED) {
@@ -491,7 +491,7 @@ ZEND_API zend_property_info *zend_get_property_info(const zend_class_entry *ce,
491491
flags = property_info->flags;
492492

493493
if (flags & (ZEND_ACC_CHANGED|ZEND_ACC_PRIVATE|ZEND_ACC_PROTECTED)) {
494-
zend_class_entry *scope = get_fake_or_executed_scope();
494+
const zend_class_entry *scope = get_fake_or_executed_scope();
495495
if (property_info->ce != scope) {
496496
if (flags & ZEND_ACC_CHANGED) {
497497
zend_property_info *p = zend_get_parent_private_property(scope, ce, member);
@@ -583,7 +583,7 @@ ZEND_API zend_result zend_check_property_access(const zend_object *zobj, zend_st
583583
ZEND_API bool ZEND_FASTCALL zend_asymmetric_property_has_set_access(const zend_property_info *prop_info) {
584584
ZEND_ASSERT(prop_info->flags & ZEND_ACC_PPP_SET_MASK);
585585
ZEND_ASSERT(!(prop_info->flags & ZEND_ACC_PUBLIC_SET));
586-
zend_class_entry *scope = get_fake_or_executed_scope();
586+
const zend_class_entry *scope = get_fake_or_executed_scope();
587587
if (prop_info->ce == scope) {
588588
return true;
589589
}
@@ -2030,7 +2030,7 @@ ZEND_API zval *zend_std_get_static_property_with_info(zend_class_entry *ce, zend
20302030
}
20312031

20322032
if (!(property_info->flags & ZEND_ACC_PUBLIC)) {
2033-
zend_class_entry *scope = get_fake_or_executed_scope();
2033+
const zend_class_entry *scope = get_fake_or_executed_scope();
20342034
if (property_info->ce != scope) {
20352035
if (UNEXPECTED(property_info->flags & ZEND_ACC_PRIVATE)
20362036
|| UNEXPECTED(!is_protected_compatible_scope(property_info->ce, scope))) {
@@ -2114,7 +2114,7 @@ ZEND_API zend_function *zend_std_get_constructor(zend_object *zobj) /* {{{ */
21142114

21152115
if (constructor) {
21162116
if (UNEXPECTED(!(constructor->common.fn_flags & ZEND_ACC_PUBLIC))) {
2117-
zend_class_entry *scope = get_fake_or_executed_scope();
2117+
const zend_class_entry *scope = get_fake_or_executed_scope();
21182118
ZEND_ASSERT(!(constructor->common.fn_flags & ZEND_ACC_PUBLIC));
21192119
if (!zend_check_method_accessible(constructor, scope)) {
21202120
zend_bad_constructor_call(constructor, scope);

ext/reflection/php_reflection.c

Lines changed: 13 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4190,7 +4190,7 @@ ZEND_METHOD(ReflectionClass, getStaticProperties)
41904190
ZEND_METHOD(ReflectionClass, getStaticPropertyValue)
41914191
{
41924192
reflection_object *intern;
4193-
zend_class_entry *ce, *old_scope;
4193+
zend_class_entry *ce;
41944194
zend_string *name;
41954195
zval *prop, *def_value = NULL;
41964196

@@ -4204,7 +4204,7 @@ ZEND_METHOD(ReflectionClass, getStaticPropertyValue)
42044204
RETURN_THROWS();
42054205
}
42064206

4207-
old_scope = EG(fake_scope);
4207+
const zend_class_entry *old_scope = EG(fake_scope);
42084208
EG(fake_scope) = ce;
42094209
prop = zend_std_get_static_property(ce, name, BP_VAR_IS);
42104210
EG(fake_scope) = old_scope;
@@ -4231,7 +4231,7 @@ ZEND_METHOD(ReflectionClass, getStaticPropertyValue)
42314231
ZEND_METHOD(ReflectionClass, setStaticPropertyValue)
42324232
{
42334233
reflection_object *intern;
4234-
zend_class_entry *ce, *old_scope;
4234+
zend_class_entry *ce;
42354235
zend_property_info *prop_info;
42364236
zend_string *name;
42374237
zval *variable_ptr, *value;
@@ -4245,7 +4245,7 @@ ZEND_METHOD(ReflectionClass, setStaticPropertyValue)
42454245
if (UNEXPECTED(zend_update_class_constants(ce) != SUCCESS)) {
42464246
RETURN_THROWS();
42474247
}
4248-
old_scope = EG(fake_scope);
4248+
const zend_class_entry *old_scope = EG(fake_scope);
42494249
EG(fake_scope) = ce;
42504250
variable_ptr = zend_std_get_static_property_with_info(ce, name, BP_VAR_W, &prop_info);
42514251
EG(fake_scope) = old_scope;
@@ -4998,7 +4998,7 @@ ZEND_METHOD(ReflectionClass, isInstance)
49984998
ZEND_METHOD(ReflectionClass, newInstance)
49994999
{
50005000
reflection_object *intern;
5001-
zend_class_entry *ce, *old_scope;
5001+
zend_class_entry *ce;
50025002
zend_function *constructor;
50035003

50045004
GET_REFLECTION_OBJECT_PTR(ce);
@@ -5007,7 +5007,7 @@ ZEND_METHOD(ReflectionClass, newInstance)
50075007
return;
50085008
}
50095009

5010-
old_scope = EG(fake_scope);
5010+
const zend_class_entry *old_scope = EG(fake_scope);
50115011
EG(fake_scope) = ce;
50125012
constructor = Z_OBJ_HT_P(return_value)->get_constructor(Z_OBJ_P(return_value));
50135013
EG(fake_scope) = old_scope;
@@ -5065,7 +5065,7 @@ ZEND_METHOD(ReflectionClass, newInstanceWithoutConstructor)
50655065
ZEND_METHOD(ReflectionClass, newInstanceArgs)
50665066
{
50675067
reflection_object *intern;
5068-
zend_class_entry *ce, *old_scope;
5068+
zend_class_entry *ce;
50695069
int argc = 0;
50705070
HashTable *args = NULL;
50715071
zend_function *constructor;
@@ -5084,7 +5084,7 @@ ZEND_METHOD(ReflectionClass, newInstanceArgs)
50845084
return;
50855085
}
50865086

5087-
old_scope = EG(fake_scope);
5087+
const zend_class_entry *old_scope = EG(fake_scope);
50885088
EG(fake_scope) = ce;
50895089
constructor = Z_OBJ_HT_P(return_value)->get_constructor(Z_OBJ_P(return_value));
50905090
EG(fake_scope) = old_scope;
@@ -5908,7 +5908,7 @@ ZEND_METHOD(ReflectionProperty, getValue)
59085908
}
59095909
}
59105910

5911-
zend_class_entry *old_scope = EG(fake_scope);
5911+
const zend_class_entry *old_scope = EG(fake_scope);
59125912
EG(fake_scope) = intern->ce;
59135913
member_p = Z_OBJ_P(object)->handlers->read_property(Z_OBJ_P(object),
59145914
ref->unmangled_name, BP_VAR_R, ref->cache_slot, &rv);
@@ -5967,7 +5967,7 @@ ZEND_METHOD(ReflectionProperty, setValue)
59675967
Z_PARAM_ZVAL(value)
59685968
ZEND_PARSE_PARAMETERS_END();
59695969

5970-
zend_class_entry *old_scope = EG(fake_scope);
5970+
const zend_class_entry *old_scope = EG(fake_scope);
59715971
EG(fake_scope) = intern->ce;
59725972
object->handlers->write_property(object, ref->unmangled_name, value, ref->cache_slot);
59735973
EG(fake_scope) = old_scope;
@@ -6026,7 +6026,7 @@ ZEND_METHOD(ReflectionProperty, getRawValue)
60266026

60276027
if (!prop || !prop->hooks || !prop->hooks[ZEND_PROPERTY_HOOK_GET]) {
60286028
zval rv;
6029-
zend_class_entry *old_scope = EG(fake_scope);
6029+
const zend_class_entry *old_scope = EG(fake_scope);
60306030
EG(fake_scope) = intern->ce;
60316031
zval *member_p = Z_OBJ_P(object)->handlers->read_property(
60326032
Z_OBJ_P(object), ref->unmangled_name, BP_VAR_R,
@@ -6052,7 +6052,7 @@ static void reflection_property_set_raw_value(zend_property_info *prop,
60526052
zend_object *object, zval *value)
60536053
{
60546054
if (!prop || !prop->hooks || !prop->hooks[ZEND_PROPERTY_HOOK_SET]) {
6055-
zend_class_entry *old_scope = EG(fake_scope);
6055+
const zend_class_entry *old_scope = EG(fake_scope);
60566056
EG(fake_scope) = intern->ce;
60576057
object->handlers->write_property(object, unmangled_name, value, cache_slot);
60586058
EG(fake_scope) = old_scope;
@@ -6275,7 +6275,6 @@ ZEND_METHOD(ReflectionProperty, isInitialized)
62756275
}
62766276
RETURN_FALSE;
62776277
} else {
6278-
zend_class_entry *old_scope;
62796278
int retval;
62806279

62816280
if (!object) {
@@ -6298,7 +6297,7 @@ ZEND_METHOD(ReflectionProperty, isInitialized)
62986297
}
62996298
}
63006299

6301-
old_scope = EG(fake_scope);
6300+
const zend_class_entry *old_scope = EG(fake_scope);
63026301
EG(fake_scope) = intern->ce;
63036302
retval = Z_OBJ_HT_P(object)->has_property(Z_OBJ_P(object),
63046303
ref->unmangled_name, ZEND_PROPERTY_EXISTS, ref->cache_slot);

0 commit comments

Comments
 (0)