dmitry Thu, 05 Aug 2010 13:10:15 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=301876
Log:
Use interned strings for class names
Changed paths:
U php/php-src/trunk/Zend/zend_API.h
U php/php-src/trunk/Zend/zend_compile.c
U php/php-src/trunk/Zend/zend_iterators.c
U php/php-src/trunk/Zend/zend_opcode.c
Modified: php/php-src/trunk/Zend/zend_API.h
===================================================================
--- php/php-src/trunk/Zend/zend_API.h 2010-08-05 12:29:40 UTC (rev 301875)
+++ php/php-src/trunk/Zend/zend_API.h 2010-08-05 13:10:15 UTC (rev 301876)
@@ -167,7 +167,10 @@
#define INIT_OVERLOADED_CLASS_ENTRY_EX(class_container, class_name,
class_name_len, functions, handle_fcall, handle_propget, handle_propset,
handle_propunset, handle_propisset) \
{
\
int _len = class_name_len;
\
- class_container.name = zend_strndup(class_name, _len); \
+ class_container.name = zend_new_interned_string(class_name,
_len+1, 0); \
+ if (class_container.name == class_name) {
\
+ class_container.name = zend_strndup(class_name, _len);
\
+ }
\
class_container.name_length = _len;
\
class_container.builtin_functions = functions;
\
class_container.constructor = NULL;
\
Modified: php/php-src/trunk/Zend/zend_compile.c
===================================================================
--- php/php-src/trunk/Zend/zend_compile.c 2010-08-05 12:29:40 UTC (rev
301875)
+++ php/php-src/trunk/Zend/zend_compile.c 2010-08-05 13:10:15 UTC (rev
301876)
@@ -4486,8 +4486,8 @@
new_class_entry = emalloc(sizeof(zend_class_entry));
new_class_entry->type = ZEND_USER_CLASS;
- new_class_entry->name = class_name->u.constant.value.str.val;
- new_class_entry->name_length = class_name->u.constant.value.str.len;
+ new_class_entry->name =
zend_new_interned_string(Z_STRVAL(class_name->u.constant),
Z_STRLEN(class_name->u.constant) + 1, 1 TSRMLS_CC);
+ new_class_entry->name_length = Z_STRLEN(class_name->u.constant);
zend_initialize_class_data(new_class_entry, 1 TSRMLS_CC);
new_class_entry->filename = zend_get_compiled_filename(TSRMLS_C);
Modified: php/php-src/trunk/Zend/zend_iterators.c
===================================================================
--- php/php-src/trunk/Zend/zend_iterators.c 2010-08-05 12:29:40 UTC (rev
301875)
+++ php/php-src/trunk/Zend/zend_iterators.c 2010-08-05 13:10:15 UTC (rev
301876)
@@ -51,8 +51,6 @@
ZEND_API void zend_register_iterator_wrapper(TSRMLS_D)
{
INIT_CLASS_ENTRY(zend_iterator_class_entry, "__iterator_wrapper", NULL);
- free(zend_iterator_class_entry.name);
- zend_iterator_class_entry.name = "__iterator_wrapper";
}
static void iter_wrapper_dtor(void *object, zend_object_handle handle
TSRMLS_DC)
Modified: php/php-src/trunk/Zend/zend_opcode.c
===================================================================
--- php/php-src/trunk/Zend/zend_opcode.c 2010-08-05 12:29:40 UTC (rev
301875)
+++ php/php-src/trunk/Zend/zend_opcode.c 2010-08-05 13:10:15 UTC (rev
301876)
@@ -301,7 +301,9 @@
efree(ce->default_static_members_table);
}
zend_hash_destroy(&ce->properties_info);
- efree(ce->name);
+ if (!IS_INTERNED(ce->name)) {
+ efree(ce->name);
+ }
zend_hash_destroy(&ce->function_table);
zend_hash_destroy(&ce->constants_table);
if (ce->num_interfaces > 0 && ce->interfaces) {
@@ -335,7 +337,9 @@
free(ce->default_static_members_table);
}
zend_hash_destroy(&ce->properties_info);
- free(ce->name);
+ if (!IS_INTERNED(ce->name)) {
+ free(ce->name);
+ }
zend_hash_destroy(&ce->function_table);
zend_hash_destroy(&ce->constants_table);
if (ce->num_interfaces > 0) {
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php