summaryrefslogtreecommitdiff
path: root/ext/intl/transliterator/transliterator_class.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-06-28 00:02:50 +0800
committerXinchen Hui <laruence@php.net>2014-06-28 00:02:50 +0800
commit4fbaddb4f8b041769bea7efdd12313641387bd14 (patch)
tree7e3a8f8fd232dd52e0a666ef5b9e9b27734ddde1 /ext/intl/transliterator/transliterator_class.c
parentf609d8c1c677d03d9ae380480ae72383c5a98106 (diff)
downloadphp-git-4fbaddb4f8b041769bea7efdd12313641387bd14.tar.gz
Refactoring ext/intl (incompleted)
Diffstat (limited to 'ext/intl/transliterator/transliterator_class.c')
-rw-r--r--ext/intl/transliterator/transliterator_class.c109
1 files changed, 29 insertions, 80 deletions
diff --git a/ext/intl/transliterator/transliterator_class.c b/ext/intl/transliterator/transliterator_class.c
index 9891b35f4c..80572ca347 100644
--- a/ext/intl/transliterator/transliterator_class.c
+++ b/ext/intl/transliterator/transliterator_class.c
@@ -98,53 +98,38 @@ static void transliterator_object_destroy( Transliterator_object* to TSRMLS_DC )
/* {{{ Transliterator_objects_dtor */
static void Transliterator_objects_dtor(
- void *object,
- zend_object_handle handle TSRMLS_DC )
+ zend_object *object TSRMLS_DC )
{
- zend_objects_destroy_object( object, handle TSRMLS_CC );
+ zend_objects_destroy_object( object TSRMLS_CC );
}
/* }}} */
/* {{{ Transliterator_objects_free */
static void Transliterator_objects_free( zend_object *object TSRMLS_DC )
{
- Transliterator_object* to = (Transliterator_object*) object;
+ Transliterator_object* to = php_intl_transliterator_fetch_object(object);
zend_object_std_dtor( &to->zo TSRMLS_CC );
transliterator_object_destroy( to TSRMLS_CC );
-
- efree( to );
}
/* }}} */
/* {{{ Transliterator_object_create */
-static zend_object_value Transliterator_object_create(
+static zend_object *Transliterator_object_create(
zend_class_entry *ce TSRMLS_DC )
{
- zend_object_value retval;
Transliterator_object* intern;
- intern = ecalloc( 1, sizeof( Transliterator_object ) );
+ intern = ecalloc( 1, sizeof( Transliterator_object ) + sizeof(zval) * (ce->default_properties_count - 1));
zend_object_std_init( &intern->zo, ce TSRMLS_CC );
-#if PHP_VERSION_ID < 50399
- zend_hash_copy( intern->zo.properties, &(ce->default_properties ),
- (copy_ctor_func_t) zval_add_ref, NULL, sizeof( zval* ) );
-#else
object_properties_init( (zend_object*) intern, ce );
-#endif
transliterator_object_init( intern TSRMLS_CC );
- retval.handle = zend_objects_store_put(
- intern,
- Transliterator_objects_dtor,
- (zend_objects_free_object_storage_t) Transliterator_objects_free,
- NULL TSRMLS_CC );
-
- retval.handlers = &Transliterator_handlers;
+ intern->zo.handlers = &Transliterator_handlers;
- return retval;
+ return &intern->zo;
}
/* }}} */
@@ -153,20 +138,19 @@ static zend_object_value Transliterator_object_create(
*/
/* {{{ clone handler for Transliterator */
-static zend_object_value Transliterator_clone_obj( zval *object TSRMLS_DC )
+static zend_object *Transliterator_clone_obj( zval *object TSRMLS_DC )
{
Transliterator_object *to_orig,
*to_new;
- zend_object_value ret_val;
+ zend_object *ret_val;
intl_error_reset( NULL TSRMLS_CC );
- to_orig = zend_object_store_get_object( object TSRMLS_CC );
+ to_orig = Z_INTL_TRANSLITERATOR_P( object );
intl_error_reset( INTL_DATA_ERROR_P( to_orig ) TSRMLS_CC );
ret_val = Transliterator_ce_ptr->create_object( Z_OBJCE_P( object ) TSRMLS_CC );
- to_new = zend_object_store_get_object_by_handle( ret_val.handle TSRMLS_CC );
+ to_new = php_intl_transliterator_fetch_object( ret_val );
- zend_objects_clone_members( &to_new->zo, ret_val,
- &to_orig->zo, Z_OBJ_HANDLE_P( object ) TSRMLS_CC );
+ zend_objects_clone_members( &to_new->zo, &to_orig->zo TSRMLS_CC );
if( to_orig->utrans != NULL )
{
@@ -179,13 +163,13 @@ static zend_object_value Transliterator_clone_obj( zval *object TSRMLS_DC )
if( U_FAILURE( TRANSLITERATOR_ERROR_CODE( to_orig ) ) )
goto err;
- Z_OBJVAL( tempz ) = ret_val;
+ ZVAL_OBJ(&tempz, ret_val);
transliterator_object_construct( &tempz, utrans,
TRANSLITERATOR_ERROR_CODE_P( to_orig ) TSRMLS_CC );
if( U_FAILURE( TRANSLITERATOR_ERROR_CODE( to_orig ) ) )
{
- char *err_msg;
+ zend_string *err_msg;
err:
if( utrans != NULL )
@@ -198,8 +182,8 @@ err:
"Could not clone transliterator", 0 TSRMLS_CC );
err_msg = intl_error_get_message( TRANSLITERATOR_ERROR_P( to_orig ) TSRMLS_CC );
- php_error_docref( NULL TSRMLS_CC, E_ERROR, "%s", err_msg );
- efree( err_msg ); /* if it's changed into a warning */
+ php_error_docref( NULL TSRMLS_CC, E_ERROR, "%s", err_msg->val );
+ STR_FREE( err_msg ); /* if it's changed into a warning */
/* do not destroy tempz; we need to return something */
}
}
@@ -214,19 +198,7 @@ err:
}
/* }}} */
-#if PHP_VERSION_ID >= 50399
-# define TRANSLITERATOR_PROPERTY_HANDLER_PROLOG \
- zval tmp_member; \
- if( Z_TYPE_P( member ) != IS_STRING ) \
- { \
- tmp_member = *member; \
- zval_copy_ctor( &tmp_member ); \
- convert_to_string( &tmp_member ); \
- member = &tmp_member; \
- key = NULL; \
- }
-#else
-# define TRANSLITERATOR_PROPERTY_HANDLER_PROLOG \
+#define TRANSLITERATOR_PROPERTY_HANDLER_PROLOG \
zval tmp_member; \
if( Z_TYPE_P( member ) != IS_STRING ) \
{ \
@@ -234,24 +206,19 @@ err:
zval_copy_ctor( &tmp_member ); \
convert_to_string( &tmp_member ); \
member = &tmp_member; \
+ cache_slot = -1; \
}
-#endif
#define TRANSLITERATOR_PROPERTY_HANDLER_EPILOG \
- if( member == &tmp_member ) \
+ if( member == &tmp_member ) \
{ \
zval_dtor( &tmp_member ); \
}
/* {{{ get_property_ptr_ptr handler */
-#if PHP_VERSION_ID < 50399
-static zval **Transliterator_get_property_ptr_ptr( zval *object, zval *member TSRMLS_DC )
-#else
-static zval **Transliterator_get_property_ptr_ptr( zval *object, zval *member, int type,
- const struct _zend_literal *key TSRMLS_DC )
-#endif
+static zval *Transliterator_get_property_ptr_ptr( zval *object, zval *member, int type, zend_uint cache_slot TSRMLS_DC )
{
- zval **retval;
+ zval *retval;
TRANSLITERATOR_PROPERTY_HANDLER_PROLOG;
@@ -262,11 +229,7 @@ static zval **Transliterator_get_property_ptr_ptr( zval *object, zval *member, i
}
else
{
-#if PHP_VERSION_ID < 50399
- retval = std_object_handlers.get_property_ptr_ptr( object, member TSRMLS_CC );
-#else
- retval = std_object_handlers.get_property_ptr_ptr( object, member, type, key TSRMLS_CC );
-#endif
+ retval = std_object_handlers.get_property_ptr_ptr( object, member, type, cache_slot TSRMLS_CC );
}
TRANSLITERATOR_PROPERTY_HANDLER_EPILOG;
@@ -276,12 +239,7 @@ static zval **Transliterator_get_property_ptr_ptr( zval *object, zval *member, i
/* }}} */
/* {{{ read_property handler */
-#if PHP_VERSION_ID < 50399
-static zval *Transliterator_read_property( zval *object, zval *member, int type TSRMLS_DC ) /* {{{ */
-#else
-static zval *Transliterator_read_property( zval *object, zval *member, int type,
- const struct _zend_literal *key TSRMLS_DC ) /* {{{ */
-#endif
+static zval *Transliterator_read_property( zval *object, zval *member, int type, zend_uint cache_slot, zval *rv TSRMLS_DC )
{
zval *retval;
@@ -296,11 +254,7 @@ static zval *Transliterator_read_property( zval *object, zval *member, int type,
}
else
{
-#if PHP_VERSION_ID < 50399
- retval = std_object_handlers.read_property( object, member, type TSRMLS_CC );
-#else
- retval = std_object_handlers.read_property( object, member, type, key TSRMLS_CC );
-#endif
+ retval = std_object_handlers.read_property( object, member, type, cache_slot, rv TSRMLS_CC );
}
TRANSLITERATOR_PROPERTY_HANDLER_EPILOG;
@@ -311,12 +265,8 @@ static zval *Transliterator_read_property( zval *object, zval *member, int type,
/* }}} */
/* {{{ write_property handler */
-#if PHP_VERSION_ID < 50399
-static void Transliterator_write_property( zval *object, zval *member, zval *value TSRMLS_DC )
-#else
static void Transliterator_write_property( zval *object, zval *member, zval *value,
- const struct _zend_literal *key TSRMLS_DC )
-#endif
+ zend_uint cache_slot TSRMLS_DC )
{
TRANSLITERATOR_PROPERTY_HANDLER_PROLOG;
@@ -328,11 +278,7 @@ static void Transliterator_write_property( zval *object, zval *member, zval *val
}
else
{
-#if PHP_VERSION_ID < 50399
- std_object_handlers.write_property( object, member, value TSRMLS_CC );
-#else
- std_object_handlers.write_property( object, member, value, key TSRMLS_CC );
-#endif
+ std_object_handlers.write_property( object, member, value, cache_slot TSRMLS_CC );
}
TRANSLITERATOR_PROPERTY_HANDLER_EPILOG;
@@ -403,6 +349,9 @@ void transliterator_register_Transliterator_class( TSRMLS_D )
Transliterator_ce_ptr = zend_register_internal_class( &ce TSRMLS_CC );
memcpy( &Transliterator_handlers, zend_get_std_object_handlers(),
sizeof Transliterator_handlers );
+ Transliterator_handlers.offset = XtOffsetOf(Transliterator_object, zo);
+ Transliterator_handlers.dtor_obj = Transliterator_objects_dtor;
+ Transliterator_handlers.free_obj = Transliterator_objects_free;
Transliterator_handlers.clone_obj = Transliterator_clone_obj;
Transliterator_handlers.get_property_ptr_ptr = Transliterator_get_property_ptr_ptr;
Transliterator_handlers.read_property = Transliterator_read_property;