diff options
Diffstat (limited to 'ext/standard/incomplete_class.c')
| -rw-r--r-- | ext/standard/incomplete_class.c | 76 |
1 files changed, 32 insertions, 44 deletions
diff --git a/ext/standard/incomplete_class.c b/ext/standard/incomplete_class.c index 968a5e2ebd..0a08ad4929 100644 --- a/ext/standard/incomplete_class.c +++ b/ext/standard/incomplete_class.c @@ -36,82 +36,79 @@ 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, class_name->val); + STR_RELEASE(class_name); + } else { + php_error_docref(NULL TSRMLS_CC, error_type, INCOMPLETE_CLASS_MSG, "unknown"); } } /* }}} */ -static zval *incomplete_class_get_property(zval *object, zval *member, int type, const zend_literal *key TSRMLS_DC) /* {{{ */ +static zval *incomplete_class_get_property(zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC) /* {{{ */ { 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); } } /* }}} */ -static void incomplete_class_write_property(zval *object, zval *member, zval *value, const zend_literal *key TSRMLS_DC) /* {{{ */ +static void incomplete_class_write_property(zval *object, zval *member, zval *value, zend_uint cache_slot TSRMLS_DC) /* {{{ */ { incomplete_class_message(object, E_NOTICE TSRMLS_CC); } /* }}} */ -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, zend_uint cache_slot TSRMLS_DC) /* {{{ */ { incomplete_class_message(object, E_NOTICE TSRMLS_CC); - return &EG(error_zval_ptr); + return &EG(error_zval); } /* }}} */ -static void incomplete_class_unset_property(zval *object, zval *member, const zend_literal *key TSRMLS_DC) /* {{{ */ +static void incomplete_class_unset_property(zval *object, zval *member, zend_uint cache_slot TSRMLS_DC) /* {{{ */ { incomplete_class_message(object, E_NOTICE TSRMLS_CC); } /* }}} */ -static int incomplete_class_has_property(zval *object, zval *member, int check_empty, const zend_literal *key TSRMLS_DC) /* {{{ */ +static int incomplete_class_has_property(zval *object, zval *member, int check_empty, zend_uint cache_slot TSRMLS_DC) /* {{{ */ { incomplete_class_message(object, E_NOTICE TSRMLS_CC); return 0; } /* }}} */ -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(zend_object **object, zend_string *method, const zval *key TSRMLS_DC) /* {{{ */ { - incomplete_class_message(*object, E_ERROR TSRMLS_CC); + zval zobject; + + ZVAL_OBJ(&zobject, *object); + incomplete_class_message(&zobject, 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 +132,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 +152,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); } /* }}} */ |
