Skip to content

Commit a505fe5

Browse files
committed
keep cased namespace names
1 parent ac364dc commit a505fe5

File tree

4 files changed

+8
-23
lines changed

4 files changed

+8
-23
lines changed

Zend/zend.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,6 @@ struct _zend_class_entry {
210210
uint32_t num_traits;
211211
uint32_t num_hooked_props;
212212
uint32_t num_hooked_prop_variance_checks;
213-
uint32_t num_nested_classes;
214213

215214
/* class_entry or string(s) depending on ZEND_ACC_LINKED */
216215
union {
@@ -219,7 +218,6 @@ struct _zend_class_entry {
219218
};
220219

221220
zend_class_name *trait_names;
222-
zend_class_entry **nested_classes;
223221
zend_trait_alias **trait_aliases;
224222
zend_trait_precedence **trait_precedences;
225223
HashTable *attributes;

Zend/zend_compile.c

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2173,8 +2173,6 @@ ZEND_API void zend_initialize_class_data(zend_class_entry *ce, bool nullify_hand
21732173
ce->trait_names = NULL;
21742174
ce->trait_aliases = NULL;
21752175
ce->trait_precedences = NULL;
2176-
ce->num_nested_classes = 0;
2177-
ce->nested_classes = NULL;
21782176
ce->serialize = NULL;
21792177
ce->unserialize = NULL;
21802178
if (ce->type == ZEND_INTERNAL_CLASS) {
@@ -9194,9 +9192,6 @@ static void zend_compile_class_decl(znode *result, zend_ast *ast, bool toplevel)
91949192
ce->required_scope = propFlags & (ZEND_ACC_PRIVATE | ZEND_ACC_PROTECTED) ? CG(active_class_entry) : NULL;
91959193
ce->required_scope_absolute = propFlags & ZEND_ACC_PRIVATE ? true : false;
91969194
ce->lexical_scope = CG(active_class_entry);
9197-
ce->lexical_scope->nested_classes =
9198-
erealloc(ce->lexical_scope->nested_classes, sizeof(zend_class_entry *) * (ce->lexical_scope->num_nested_classes + 1));
9199-
ce->lexical_scope->nested_classes[ce->lexical_scope->num_nested_classes++] = ce;
92009195
} else {
92019196
name = zend_prefix_with_ns(unqualified_name);
92029197
ce->required_scope = NULL;

Zend/zend_namespaces.c

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,12 @@ zend_class_entry *create_namespace(zend_string *name) {
2626
zend_initialize_class_data(ns, 1);
2727
ns->type = ZEND_NAMESPACE_CLASS;
2828
ns->ce_flags |= ZEND_ACC_UNINSTANTIABLE;
29-
ns->name = zend_string_copy(name);
29+
ns->name = name;
3030

3131
return ns;
3232
}
3333

34-
static zend_class_entry *insert_namespace(const zend_string *name) {
34+
static zend_class_entry *insert_namespace(const zend_string *name, zend_string *lc_name) {
3535
zend_class_entry *parent_ns = EG(global_namespace);
3636
zend_class_entry *ns = parent_ns;
3737
const char *start = ZSTR_VAL(name);
@@ -42,23 +42,17 @@ static zend_class_entry *insert_namespace(const zend_string *name) {
4242
while (pos <= end) {
4343
if (pos == end || *pos == '\\') {
4444
len = pos - start;
45-
zend_string *needle = zend_string_init(ZSTR_VAL(name), len, 0);
45+
zend_string *needle = zend_string_init(ZSTR_VAL(lc_name), len, 0);
4646

4747
ns = zend_hash_find_ptr(EG(namespaces), needle);
4848

4949
if (!ns) {
50-
zend_string *interned_name = zend_new_interned_string(needle);
51-
ns = create_namespace(interned_name);
50+
zend_string *full_name = zend_string_init_interned(ZSTR_VAL(name), len, 1);
51+
ns = create_namespace(full_name);
5252
ns->lexical_scope = parent_ns;
53-
zend_hash_add_ptr(EG(namespaces), interned_name, ns);
54-
55-
/* sometimes, opcache refuses to intern the string */
56-
if (interned_name == needle) {
57-
zend_string_release(interned_name);
58-
}
59-
} else {
60-
zend_string_release(needle);
53+
zend_hash_add_ptr(EG(namespaces), needle, ns);
6154
}
55+
zend_string_release(needle);
6256

6357
parent_ns = ns;
6458
}
@@ -85,7 +79,7 @@ zend_class_entry *zend_resolve_namespace(zend_string *name) {
8579
zend_class_entry *ns = zend_hash_find_ptr(EG(namespaces), lc_name);
8680

8781
if (!ns) {
88-
ns = insert_namespace(lc_name);
82+
ns = insert_namespace(name, lc_name);
8983
}
9084

9185
zend_string_release(lc_name);

Zend/zend_opcode.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -366,8 +366,6 @@ ZEND_API void destroy_zend_class(zval *zv)
366366
}
367367
}
368368

369-
efree(ce->nested_classes);
370-
371369
if (ce->default_properties_table) {
372370
zval *p = ce->default_properties_table;
373371
zval *end = p + ce->default_properties_count;

0 commit comments

Comments
 (0)