@@ -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 );
0 commit comments