From 77ee3da479e1796aa30870f2744eaff9871abb95 Mon Sep 17 00:00:00 2001 From: Gina Peter Banyard Date: Tue, 11 Feb 2025 15:55:22 +0000 Subject: [PATCH] Use new known "self" and "parent" zend_strings --- Zend/zend.c | 4 ++-- Zend/zend_API.c | 4 ++-- Zend/zend_ast.c | 4 ++-- Zend/zend_compile.c | 8 ++++---- Zend/zend_constants.c | 4 ++-- Zend/zend_execute.c | 4 ++-- Zend/zend_inheritance.c | 8 ++++---- ext/opcache/zend_persist.c | 4 ++-- ext/reflection/php_reflection.c | 4 ++-- ext/standard/browscap.c | 7 ++----- 10 files changed, 24 insertions(+), 27 deletions(-) diff --git a/Zend/zend.c b/Zend/zend.c index fcac6c08ac14..2d8a0f455f8b 100644 --- a/Zend/zend.c +++ b/Zend/zend.c @@ -2088,8 +2088,8 @@ ZEND_API void zend_alloc_ce_cache(zend_string *type_name) return; } - if (zend_string_equals_literal_ci(type_name, "self") - || zend_string_equals_literal_ci(type_name, "parent")) { + if (zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_SELF)) + || zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_PARENT))) { return; } diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 90bb9370e1fd..32c9f4613ae9 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -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); *strict_class = 0; - if (zend_string_equals_literal(lcname, "self")) { + if (zend_string_equals(lcname, ZSTR_KNOWN(ZEND_STR_SELF))) { if (!scope) { if (error) *error = estrdup("cannot access \"self\" when no class scope is active"); } else { @@ -3777,7 +3777,7 @@ static bool zend_is_callable_check_class(zend_string *name, zend_class_entry *sc } ret = 1; } - } else if (zend_string_equals_literal(lcname, "parent")) { + } else if (zend_string_equals(lcname, ZSTR_KNOWN(ZEND_STR_PARENT))) { if (!scope) { if (error) *error = estrdup("cannot access \"parent\" when no class scope is active"); } else if (!scope->parent) { diff --git a/Zend/zend_ast.c b/Zend/zend_ast.c index 535003736229..d4f71ee5ad99 100644 --- a/Zend/zend_ast.c +++ b/Zend/zend_ast.c @@ -2257,10 +2257,10 @@ static ZEND_COLD void zend_ast_export_ex(smart_str *str, zend_ast *ast, int prio /* The const expr representation stores the fetch type instead. */ switch (ast->attr) { case ZEND_FETCH_CLASS_SELF: - smart_str_appends(str, "self"); + smart_str_append(str, ZSTR_KNOWN(ZEND_STR_SELF)); break; case ZEND_FETCH_CLASS_PARENT: - smart_str_appends(str, "parent"); + smart_str_append(str, ZSTR_KNOWN(ZEND_STR_PARENT)); break; EMPTY_SWITCH_DEFAULT_CASE() } diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 797ed8cdb08c..b4dea55414ff 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -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) { if (scope) { - if (zend_string_equals_literal_ci(name, "self")) { + if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_SELF))) { 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; } } @@ -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) /* {{{ */ { - if (zend_string_equals_literal_ci(name, "self")) { + if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_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; } else if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_STATIC))) { return ZEND_FETCH_CLASS_STATIC; diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c index 4d9a769f1de3..c95f6f4289f6 100644 --- a/Zend/zend_constants.c +++ b/Zend/zend_constants.c @@ -312,13 +312,13 @@ ZEND_API zval *zend_get_class_constant_ex(zend_string *class_name, zend_string * if (!ce) { 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)) { zend_throw_error(NULL, "Cannot access \"self\" when no class scope is active"); goto failure; } 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)) { zend_throw_error(NULL, "Cannot access \"parent\" when no class scope is active"); goto failure; diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index cab54b5a6f5b..9742eaa19016 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -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) { - if (zend_string_equals_literal_ci(name, "self")) { + if (zend_string_equals_ci(name, ZSTR_KNOWN(ZEND_STR_SELF))) { 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; } else { return zend_lookup_class_ex(name, NULL, ZEND_FETCH_CLASS_NO_AUTOLOAD); diff --git a/Zend/zend_inheritance.c b/Zend/zend_inheritance.c index 5b051af9bb83..23806af57f69 100644 --- a/Zend/zend_inheritance.c +++ b/Zend/zend_inheritance.c @@ -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) { 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) { return scope->parent->name; } else { 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; } else { return name; @@ -390,8 +390,8 @@ static void track_class_dependency(zend_class_entry *ce, zend_string *class_name ZEND_ASSERT(class_name); if (!CG(current_linking_class) || ce == CG(current_linking_class)) { return; - } else if (zend_string_equals_literal_ci(class_name, "self") - || zend_string_equals_literal_ci(class_name, "parent")) { + } else if (zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_SELF)) + || zend_string_equals_ci(class_name, ZSTR_KNOWN(ZEND_STR_PARENT))) { return; } diff --git a/ext/opcache/zend_persist.c b/ext/opcache/zend_persist.c index 9e89980b67e1..bf0b3d198814 100644 --- a/ext/opcache/zend_persist.c +++ b/ext/opcache/zend_persist.c @@ -328,8 +328,8 @@ uint32_t zend_accel_get_class_name_map_ptr(zend_string *type_name) { uint32_t ret; - if (zend_string_equals_literal_ci(type_name, "self") || - zend_string_equals_literal_ci(type_name, "parent")) { + if (zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_SELF)) || + zend_string_equals_ci(type_name, ZSTR_KNOWN(ZEND_STR_PARENT))) { return 0; } diff --git a/ext/reflection/php_reflection.c b/ext/reflection/php_reflection.c index fdde5998db93..fcaa5c270e25 100644 --- a/ext/reflection/php_reflection.c +++ b/ext/reflection/php_reflection.c @@ -2666,14 +2666,14 @@ ZEND_METHOD(ReflectionParameter, getClass) zend_string *class_name; 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; if (!ce) { zend_throw_exception_ex(reflection_exception_ptr, 0, "Parameter uses \"self\" as type but function is not a class member"); 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; if (!ce) { zend_throw_exception_ex(reflection_exception_ptr, 0, diff --git a/ext/standard/browscap.c b/ext/standard/browscap.c index e8fe9d4da3d7..685fe09357d0 100644 --- a/ext/standard/browscap.c +++ b/ext/standard/browscap.c @@ -291,10 +291,7 @@ static HashTable *browscap_entry_to_array(browser_data *bdata, browscap_entry *e if (entry->parent) { ZVAL_STR_COPY(&tmp, entry->parent); - key = ZSTR_INIT_LITERAL("parent", 0); - ZSTR_H(key) = zend_inline_hash_func("parent", sizeof("parent")-1); - zend_hash_add_new(ht, key, &tmp); - zend_string_release_ex(key, false); + zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_PARENT), &tmp); } 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); } - 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! */ if (ctx->current_section_name != NULL && zend_string_equals_ci(ctx->current_section_name, Z_STR_P(arg2))