summaryrefslogtreecommitdiff
path: root/ext/standard/incomplete_class.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2014-02-13 17:54:23 +0400
committerDmitry Stogov <dmitry@zend.com>2014-02-13 17:54:23 +0400
commit40e053e7f333b5fc3f4c75c964600666810cc969 (patch)
tree3436d014c44e3eab00107e67b10229ec0262dbb6 /ext/standard/incomplete_class.c
parent6306918ed2c9d87cf5fadc62d210a797a794926e (diff)
downloadphp-git-40e053e7f333b5fc3f4c75c964600666810cc969.tar.gz
Use better data structures (incomplete)
Diffstat (limited to 'ext/standard/incomplete_class.c')
-rw-r--r--ext/standard/incomplete_class.c65
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);
}
/* }}} */