diff options
author | Stanislav Malyshev <stas@php.net> | 2002-03-12 10:08:47 +0000 |
---|---|---|
committer | Stanislav Malyshev <stas@php.net> | 2002-03-12 10:08:47 +0000 |
commit | 92dd5e611b897bdca8ba27cbfcdc0fc3d7416c85 (patch) | |
tree | 087380223d60df0905009249958346955cb40fc9 /Zend/zend_API.c | |
parent | bcdf9b3d4c37f12aaf9072274e74b6702f0d8817 (diff) | |
download | php-git-92dd5e611b897bdca8ba27cbfcdc0fc3d7416c85.tar.gz |
- make class tables contain class_entry *, not class_entry
- fix isset($this)
Diffstat (limited to 'Zend/zend_API.c')
-rw-r--r-- | Zend/zend_API.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c index 9fec995375..16f11712d6 100644 --- a/Zend/zend_API.c +++ b/Zend/zend_API.c @@ -1202,9 +1202,12 @@ ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *cla zend_class_entry *register_class; if (!parent_ce && parent_name) { - if (zend_hash_find(CG(class_table), parent_name, strlen(parent_name)+1, (void **) &parent_ce)==FAILURE) { - return NULL; - } + zend_class_entry **pce; + if (zend_hash_find(CG(class_table), parent_name, strlen(parent_name)+1, (void **) &pce)==FAILURE) { + return NULL; + } else { + parent_ce = *pce; + } } register_class = zend_register_internal_class(class_entry TSRMLS_CC); @@ -1215,10 +1218,11 @@ ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *cla return register_class; } -ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry TSRMLS_DC) +ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *orig_class_entry TSRMLS_DC) { - zend_class_entry *register_class; - char *lowercase_name = zend_strndup(class_entry->name, class_entry->name_length); + zend_class_entry *class_entry = malloc(sizeof(zend_class_entry)); + char *lowercase_name = zend_strndup(orig_class_entry->name, orig_class_entry->name_length); + *class_entry = *orig_class_entry; zend_str_tolower(lowercase_name, class_entry->name_length); @@ -1239,9 +1243,9 @@ ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_ zend_register_functions(class_entry->builtin_functions, &class_entry->function_table, MODULE_PERSISTENT TSRMLS_CC); } - zend_hash_update(CG(class_table), lowercase_name, class_entry->name_length+1, class_entry, sizeof(zend_class_entry), (void **) ®ister_class); + zend_hash_update(CG(class_table), lowercase_name, class_entry->name_length+1, &class_entry, sizeof(zend_class_entry *), NULL); free(lowercase_name); - return register_class; + return class_entry; } @@ -1327,7 +1331,7 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl { zval **method; zval **obj; - zend_class_entry *ce = NULL; + zend_class_entry *ce = NULL, **pce; char callable_name_len; if (zend_hash_num_elements(Z_ARRVAL_P(callable)) == 2 && @@ -1354,7 +1358,10 @@ zend_bool zend_is_callable(zval *callable, zend_bool syntax_only, char **callabl lcname = estrndup(Z_STRVAL_PP(obj), Z_STRLEN_PP(obj)); zend_str_tolower(lcname, Z_STRLEN_PP(obj)); - zend_hash_find(EG(class_table), lcname, Z_STRLEN_PP(obj) + 1, (void**)&ce); + if(zend_hash_find(EG(class_table), lcname, Z_STRLEN_PP(obj) + 1, (void**)&pce) == SUCCESS) { + ce = *pce; + } + efree(lcname); } else { ce = Z_OBJCE_PP(obj); /* ??? */ |