Use new known "self" and "parent" zend_strings (#17766)

This commit is contained in:
Gina Peter Banyard 2025-02-12 15:30:55 +00:00 committed by GitHub
parent 48866b760f
commit 65d433161a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
10 changed files with 24 additions and 27 deletions

View file

@ -2088,8 +2088,8 @@ ZEND_API void zend_alloc_ce_cache(zend_string *type_name)
return; return;
} }
if (zend_string_equals_literal_ci(type_name, "self") if (zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_SELF))
|| zend_string_equals_literal_ci(type_name, "parent")) { || zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_PARENT))) {
return; return;
} }

View file

@ -3760,7 +3760,7 @@ static bool zend_is_callable_check_class(zend_string *name, zend_class_entry *sc
zend_str_tolower_copy(ZSTR_VAL(lcname), ZSTR_VAL(name), name_len); zend_str_tolower_copy(ZSTR_VAL(lcname), ZSTR_VAL(name), name_len);
*strict_class = 0; *strict_class = 0;
if (zend_string_equals_literal(lcname, "self")) { if (zend_string_equals(lcname, ZSTR_KNOWN(ZEND_STR_SELF))) {
if (!scope) { if (!scope) {
if (error) *error = estrdup("cannot access \"self\" when no class scope is active"); if (error) *error = estrdup("cannot access \"self\" when no class scope is active");
} else { } else {
@ -3777,7 +3777,7 @@ static bool zend_is_callable_check_class(zend_string *name, zend_class_entry *sc
} }
ret = 1; ret = 1;
} }
} else if (zend_string_equals_literal(lcname, "parent")) { } else if (zend_string_equals(lcname, ZSTR_KNOWN(ZEND_STR_PARENT))) {
if (!scope) { if (!scope) {
if (error) *error = estrdup("cannot access \"parent\" when no class scope is active"); if (error) *error = estrdup("cannot access \"parent\" when no class scope is active");
} else if (!scope->parent) { } else if (!scope->parent) {

View file

@ -2257,10 +2257,10 @@ simple_list:
/* The const expr representation stores the fetch type instead. */ /* The const expr representation stores the fetch type instead. */
switch (ast->attr) { switch (ast->attr) {
case ZEND_FETCH_CLASS_SELF: case ZEND_FETCH_CLASS_SELF:
smart_str_appends(str, "self"); smart_str_append(str, ZSTR_KNOWN(ZEND_STR_SELF));
break; break;
case ZEND_FETCH_CLASS_PARENT: case ZEND_FETCH_CLASS_PARENT:
smart_str_appends(str, "parent"); smart_str_append(str, ZSTR_KNOWN(ZEND_STR_PARENT));
break; break;
EMPTY_SWITCH_DEFAULT_CASE() EMPTY_SWITCH_DEFAULT_CASE()
} }

View file

@ -1382,9 +1382,9 @@ static zend_string *add_type_string(zend_string *type, zend_string *new_type, bo
static zend_string *resolve_class_name(zend_string *name, zend_class_entry *scope) { static zend_string *resolve_class_name(zend_string *name, zend_class_entry *scope) {
if (scope) { if (scope) {
if (zend_string_equals_literal_ci(name, "self")) { if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_SELF))) {
name = scope->name; name = scope->name;
} else if (zend_string_equals_literal_ci(name, "parent") && scope->parent) { } else if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_PARENT)) && scope->parent) {
name = scope->parent->name; name = scope->parent->name;
} }
} }
@ -1730,9 +1730,9 @@ static inline bool class_name_refers_to_active_ce(zend_string *class_name, uint3
uint32_t zend_get_class_fetch_type(const zend_string *name) /* {{{ */ uint32_t zend_get_class_fetch_type(const zend_string *name) /* {{{ */
{ {
if (zend_string_equals_literal_ci(name, "self")) { if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_SELF))) {
return ZEND_FETCH_CLASS_SELF; return ZEND_FETCH_CLASS_SELF;
} else if (zend_string_equals_literal_ci(name, "parent")) { } else if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_PARENT))) {
return ZEND_FETCH_CLASS_PARENT; return ZEND_FETCH_CLASS_PARENT;
} else if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_STATIC))) { } else if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_STATIC))) {
return ZEND_FETCH_CLASS_STATIC; return ZEND_FETCH_CLASS_STATIC;

View file

@ -312,13 +312,13 @@ ZEND_API zval *zend_get_class_constant_ex(zend_string *class_name, zend_string *
if (!ce) { if (!ce) {
ce = zend_fetch_class(class_name, flags); ce = zend_fetch_class(class_name, flags);
} }
} else if (zend_string_equals_literal_ci(class_name, "self")) { } else if (zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_SELF))) {
if (UNEXPECTED(!scope)) { if (UNEXPECTED(!scope)) {
zend_throw_error(NULL, "Cannot access \"self\" when no class scope is active"); zend_throw_error(NULL, "Cannot access \"self\" when no class scope is active");
goto failure; goto failure;
} }
ce = scope; ce = scope;
} else if (zend_string_equals_literal_ci(class_name, "parent")) { } else if (zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_PARENT))) {
if (UNEXPECTED(!scope)) { if (UNEXPECTED(!scope)) {
zend_throw_error(NULL, "Cannot access \"parent\" when no class scope is active"); zend_throw_error(NULL, "Cannot access \"parent\" when no class scope is active");
goto failure; goto failure;

View file

@ -951,9 +951,9 @@ ZEND_API ZEND_COLD void ZEND_FASTCALL zend_asymmetric_visibility_property_modifi
} }
static const zend_class_entry *resolve_single_class_type(zend_string *name, const zend_class_entry *self_ce) { static const zend_class_entry *resolve_single_class_type(zend_string *name, const zend_class_entry *self_ce) {
if (zend_string_equals_literal_ci(name, "self")) { if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_SELF))) {
return self_ce; return self_ce;
} else if (zend_string_equals_literal_ci(name, "parent")) { } else if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_PARENT))) {
return self_ce->parent; return self_ce->parent;
} else { } else {
return zend_lookup_class_ex(name, NULL, ZEND_FETCH_CLASS_NO_AUTOLOAD); return zend_lookup_class_ex(name, NULL, ZEND_FETCH_CLASS_NO_AUTOLOAD);

View file

@ -227,13 +227,13 @@ static const char *zend_asymmetric_visibility_string(uint32_t fn_flags) /* {{{ *
static zend_string *resolve_class_name(const zend_class_entry *scope, zend_string *name) { static zend_string *resolve_class_name(const zend_class_entry *scope, zend_string *name) {
ZEND_ASSERT(scope); ZEND_ASSERT(scope);
if (zend_string_equals_literal_ci(name, "parent") && scope->parent) { if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_PARENT)) && scope->parent) {
if (scope->ce_flags & ZEND_ACC_RESOLVED_PARENT) { if (scope->ce_flags & ZEND_ACC_RESOLVED_PARENT) {
return scope->parent->name; return scope->parent->name;
} else { } else {
return scope->parent_name; return scope->parent_name;
} }
} else if (zend_string_equals_literal_ci(name, "self")) { } else if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_SELF))) {
return scope->name; return scope->name;
} else { } else {
return name; return name;
@ -390,8 +390,8 @@ static void track_class_dependency(zend_class_entry *ce, zend_string *class_name
ZEND_ASSERT(class_name); ZEND_ASSERT(class_name);
if (!CG(current_linking_class) || ce == CG(current_linking_class)) { if (!CG(current_linking_class) || ce == CG(current_linking_class)) {
return; return;
} else if (zend_string_equals_literal_ci(class_name, "self") } else if (zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_SELF))
|| zend_string_equals_literal_ci(class_name, "parent")) { || zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_PARENT))) {
return; return;
} }

View file

@ -328,8 +328,8 @@ uint32_t zend_accel_get_class_name_map_ptr(zend_string *type_name)
{ {
uint32_t ret; uint32_t ret;
if (zend_string_equals_literal_ci(type_name, "self") || if (zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_SELF)) ||
zend_string_equals_literal_ci(type_name, "parent")) { zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_PARENT))) {
return 0; return 0;
} }

View file

@ -2666,14 +2666,14 @@ ZEND_METHOD(ReflectionParameter, getClass)
zend_string *class_name; zend_string *class_name;
class_name = ZEND_TYPE_NAME(param->arg_info->type); class_name = ZEND_TYPE_NAME(param->arg_info->type);
if (zend_string_equals_literal_ci(class_name, "self")) { if (zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_SELF))) {
ce = param->fptr->common.scope; ce = param->fptr->common.scope;
if (!ce) { if (!ce) {
zend_throw_exception_ex(reflection_exception_ptr, 0, zend_throw_exception_ex(reflection_exception_ptr, 0,
"Parameter uses \"self\" as type but function is not a class member"); "Parameter uses \"self\" as type but function is not a class member");
RETURN_THROWS(); RETURN_THROWS();
} }
} else if (zend_string_equals_literal_ci(class_name, "parent")) { } else if (zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_PARENT))) {
ce = param->fptr->common.scope; ce = param->fptr->common.scope;
if (!ce) { if (!ce) {
zend_throw_exception_ex(reflection_exception_ptr, 0, zend_throw_exception_ex(reflection_exception_ptr, 0,

View file

@ -291,10 +291,7 @@ static HashTable *browscap_entry_to_array(browser_data *bdata, browscap_entry *e
if (entry->parent) { if (entry->parent) {
ZVAL_STR_COPY(&tmp, entry->parent); ZVAL_STR_COPY(&tmp, entry->parent);
key = ZSTR_INIT_LITERAL("parent", 0); zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_PARENT), &tmp);
ZSTR_H(key) = zend_inline_hash_func("parent", sizeof("parent")-1);
zend_hash_add_new(ht, key, &tmp);
zend_string_release_ex(key, false);
} }
browscap_entry_add_kv_to_existing_array(bdata, entry, ht); browscap_entry_add_kv_to_existing_array(bdata, entry, ht);
@ -333,7 +330,7 @@ static void php_browscap_parser_cb(zval *arg1, zval *arg2, zval *arg3, int callb
new_value = browscap_intern_str(ctx, Z_STR_P(arg2), persistent); new_value = browscap_intern_str(ctx, Z_STR_P(arg2), persistent);
} }
if (zend_string_equals_literal_ci(Z_STR_P(arg1), "parent")) { if (zend_string_equals_ci(Z_STR_P(arg1), ZSTR_KNOWN(ZEND_STR_PARENT))) {
/* parent entry cannot be same as current section -> causes infinite loop! */ /* parent entry cannot be same as current section -> causes infinite loop! */
if (ctx->current_section_name != NULL && if (ctx->current_section_name != NULL &&
zend_string_equals_ci(ctx->current_section_name, Z_STR_P(arg2)) zend_string_equals_ci(ctx->current_section_name, Z_STR_P(arg2))