@@ -28,10 +28,10 @@ static zend_class_entry *global_namespace = NULL;
2828static HashTable namespaces ;
2929
3030static zend_class_entry * create_namespace (zend_string * name ) {
31- zend_class_entry * ns = pemalloc (sizeof (zend_class_entry ), 1 );
32- memset (ns , 0 , sizeof (zend_class_entry ));
31+ zend_class_entry * ns = pecalloc (1 , sizeof (zend_class_entry ), 1 );
3332 zend_initialize_class_data (ns , 1 );
3433 ns -> type = ZEND_NAMESPACE_CLASS ;
34+ ns -> ce_flags |= ZEND_ACC_UNINSTANTIABLE ;
3535
3636 zend_string * interned_name = zend_new_interned_string (zend_string_copy (name ));
3737 ns -> name = interned_name ;
@@ -64,13 +64,12 @@ static zend_class_entry *insert_namespace(const zend_string *name) {
6464 zend_string * needle = zend_string_init (ZSTR_VAL (current_ns .s ), ZSTR_LEN (current_ns .s ), 0 );
6565 ns = zend_hash_find_ptr (& namespaces , needle );
6666
67+ zend_string_release (part );
6768 if (!ns ) {
6869 ns = create_namespace (needle );
6970 ns -> parent = parent_ns ;
70- zend_hash_add_ptr (& namespaces , current_ns . s , ns );
71+ zend_hash_add_ptr (& namespaces , zend_string_copy ( needle ) , ns );
7172 }
72-
73- zend_string_release (part );
7473 zend_string_release (needle );
7574
7675 parent_ns = ns ;
@@ -120,12 +119,5 @@ void zend_destroy_namespaces(void) {
120119 return ;
121120 }
122121
123- zend_class_entry * ns = NULL ;
124- ZEND_HASH_FOREACH_PTR (& namespaces , ns ) {
125- zend_string_release (ns -> name );
126- } ZEND_HASH_FOREACH_END ();
127-
128122 zend_hash_destroy (& namespaces );
129- zend_string_release (global_namespace -> name );
130- pefree (global_namespace , 1 );
131123}
0 commit comments