diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-02-13 17:54:23 +0400 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-02-13 17:54:23 +0400 |
commit | 40e053e7f333b5fc3f4c75c964600666810cc969 (patch) | |
tree | 3436d014c44e3eab00107e67b10229ec0262dbb6 /ext/standard/incomplete_class.c | |
parent | 6306918ed2c9d87cf5fadc62d210a797a794926e (diff) | |
download | php-git-40e053e7f333b5fc3f4c75c964600666810cc969.tar.gz |
Use better data structures (incomplete)
Diffstat (limited to 'ext/standard/incomplete_class.c')
-rw-r--r-- | ext/standard/incomplete_class.c | 65 |
1 files changed, 25 insertions, 40 deletions
diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c index 968a5e2ebd..d8aa461b05 100644 --- a/ext/standard/incomplete_class.c +++ b/ext/standard/incomplete_class.c @@ -36,20 +36,15 @@ static zend_object_handlers php_incomplete_object_handlers; */ static void incomplete_class_message(zval *object, int error_type TSRMLS_DC) { - char *class_name; - zend_bool class_name_alloced = 1; + zend_string *class_name; - class_name = php_lookup_class_name(object, NULL); + class_name = php_lookup_class_name(object); - if (!class_name) { - class_name_alloced = 0; - class_name = "unknown"; - } - - php_error_docref(NULL TSRMLS_CC, error_type, INCOMPLETE_CLASS_MSG, class_name); - - if (class_name_alloced) { - efree(class_name); + if (class_name) { + php_error_docref(NULL TSRMLS_CC, error_type, INCOMPLETE_CLASS_MSG, "unknown"); + } else { + php_error_docref(NULL TSRMLS_CC, error_type, INCOMPLETE_CLASS_MSG, class_name->val); + STR_RELEASE(class_name); } } /* }}} */ @@ -59,9 +54,9 @@ static zval *incomplete_class_get_property(zval *object, zval *member, int type, incomplete_class_message(object, E_NOTICE TSRMLS_CC); if (type == BP_VAR_W || type == BP_VAR_RW) { - return EG(error_zval_ptr); + return &EG(error_zval); } else { - return EG(uninitialized_zval_ptr); + return &EG(uninitialized_zval); } } /* }}} */ @@ -72,10 +67,10 @@ static void incomplete_class_write_property(zval *object, zval *member, zval *va } /* }}} */ -static zval **incomplete_class_get_property_ptr_ptr(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) /* {{{ */ +static zval *incomplete_class_get_property_ptr_ptr(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) /* {{{ */ { incomplete_class_message(object, E_NOTICE TSRMLS_CC); - return &EG(error_zval_ptr); + return &EG(error_zval); } /* }}} */ @@ -92,26 +87,25 @@ static int incomplete_class_has_property(zval *object, zval *member, int check_e } /* }}} */ -static union _zend_function *incomplete_class_get_method(zval **object, char *method, int method_len, const zend_literal *key TSRMLS_DC) /* {{{ */ +static union _zend_function *incomplete_class_get_method(zval *object, zend_string *method, const zend_literal *key TSRMLS_DC) /* {{{ */ { - incomplete_class_message(*object, E_ERROR TSRMLS_CC); + incomplete_class_message(object, E_ERROR TSRMLS_CC); return NULL; } /* }}} */ /* {{{ php_create_incomplete_class */ -static zend_object_value php_create_incomplete_object(zend_class_entry *class_type TSRMLS_DC) +static zend_object *php_create_incomplete_object(zend_class_entry *class_type TSRMLS_DC) { zend_object *object; - zend_object_value value; - value = zend_objects_new(&object, class_type TSRMLS_CC); - value.handlers = &php_incomplete_object_handlers; + object = zend_objects_new( class_type TSRMLS_CC); + object->handlers = &php_incomplete_object_handlers; object_properties_init(object, class_type); - return value; + return object; } PHPAPI zend_class_entry *php_create_incomplete_class(TSRMLS_D) @@ -135,24 +129,19 @@ PHPAPI zend_class_entry *php_create_incomplete_class(TSRMLS_D) /* {{{ php_lookup_class_name */ -PHPAPI char *php_lookup_class_name(zval *object, zend_uint *nlen) +PHPAPI zend_string *php_lookup_class_name(zval *object) { - zval **val; - char *retval = NULL; + zval *val; HashTable *object_properties; TSRMLS_FETCH(); object_properties = Z_OBJPROP_P(object); - if (zend_hash_find(object_properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER), (void **) &val) == SUCCESS) { - retval = estrndup(Z_STRVAL_PP(val), Z_STRLEN_PP(val)); - - if (nlen) { - *nlen = Z_STRLEN_PP(val); - } + if ((val = zend_hash_str_find(object_properties, MAGIC_MEMBER, sizeof(MAGIC_MEMBER)-1)) != NULL) { + return STR_COPY(Z_STR_P(val)); } - return retval; + return NULL; } /* }}} */ @@ -160,16 +149,12 @@ PHPAPI char *php_lookup_class_name(zval *object, zend_uint *nlen) */ PHPAPI void php_store_class_name(zval *object, const char *name, zend_uint len) { - zval *val; + zval val; TSRMLS_FETCH(); - MAKE_STD_ZVAL(val); - - Z_TYPE_P(val) = IS_STRING; - Z_STRVAL_P(val) = estrndup(name, len); - Z_STRLEN_P(val) = len; - zend_hash_update(Z_OBJPROP_P(object), MAGIC_MEMBER, sizeof(MAGIC_MEMBER), &val, sizeof(val), NULL); + ZVAL_STRINGL(&val, name, len); + zend_hash_str_update(Z_OBJPROP_P(object), MAGIC_MEMBER, sizeof(MAGIC_MEMBER)-1, &val); } /* }}} */ |