@@ -33,51 +33,39 @@ static zend_class_entry *create_namespace(zend_string *interned_name) {
3333 ns -> type = ZEND_NAMESPACE_CLASS ;
3434 ns -> ce_flags |= ZEND_ACC_UNINSTANTIABLE ;
3535
36- ns -> name = interned_name ;
36+ ns -> name = zend_string_copy ( interned_name ) ;
3737
3838 return ns ;
3939}
4040
4141static zend_class_entry * insert_namespace (const zend_string * name ) {
4242 zend_class_entry * ns = NULL ;
4343 zend_class_entry * parent_ns = global_namespace ;
44- zend_string * part = NULL ;
4544 const char * start = ZSTR_VAL (name );
4645 const char * end = start + ZSTR_LEN (name );
4746 const char * pos = start ;
4847 size_t len = 0 ;
4948
50- smart_str current_ns = {0 };
51-
5249 while (pos <= end ) {
5350 if (pos == end || * pos == '\\' ) {
5451 len = pos - start ;
55- part = zend_string_init (start , len , 0 );
56-
57- if (current_ns .s ) {
58- smart_str_appendc (& current_ns , '\\' );
59- }
60- smart_str_appendl (& current_ns , ZSTR_VAL (part ), ZSTR_LEN (part ));
61- smart_str_0 (& current_ns );
52+ zend_string * needle = zend_string_init (ZSTR_VAL (name ), len , 1 );
6253
63- zend_string * needle = zend_string_init_interned (ZSTR_VAL (current_ns .s ), ZSTR_LEN (current_ns .s ), 1 );
6454 ns = zend_hash_find_ptr (& namespaces , needle );
6555
66- zend_string_release (part );
6756 if (!ns ) {
68- ns = create_namespace (needle );
57+ zend_string * interned_name = zend_new_interned_string (needle );
58+ ns = create_namespace (interned_name );
6959 ns -> parent = parent_ns ;
70- zend_hash_add_ptr (& namespaces , needle , ns );
60+ zend_hash_add_ptr (& namespaces , interned_name , ns );
7161 }
62+ zend_string_release (needle );
7263
7364 parent_ns = ns ;
74- start = pos + 1 ;
7565 }
7666 pos ++ ;
7767 }
7868
79- smart_str_free (& current_ns );
80-
8169 return ns ;
8270}
8371
0 commit comments