summaryrefslogtreecommitdiff
path: root/ext/intl/collator
diff options
context:
space:
mode:
authorStanislav Malyshev <stas@php.net>2008-07-22 20:23:47 +0000
committerStanislav Malyshev <stas@php.net>2008-07-22 20:23:47 +0000
commitd54c396dcaaa220f620463ce750cd9180830b179 (patch)
treec481a1a58250776ce01a582b5acc7002c79c7d23 /ext/intl/collator
parent1fb3313f7584b8554f774d8351a0e283fe814ade (diff)
downloadphp-git-d54c396dcaaa220f620463ce750cd9180830b179.tar.gz
refactor ctors, cleanup code
Diffstat (limited to 'ext/intl/collator')
-rwxr-xr-xext/intl/collator/collator_class.h5
-rwxr-xr-xext/intl/collator/collator_create.c80
2 files changed, 18 insertions, 67 deletions
diff --git a/ext/intl/collator/collator_class.h b/ext/intl/collator/collator_class.h
index 8d4c9d97f4..835abd66c8 100755
--- a/ext/intl/collator/collator_class.h
+++ b/ext/intl/collator/collator_class.h
@@ -28,12 +28,11 @@
typedef struct {
zend_object zo;
- // ICU collator
- UCollator* ucoll;
-
// error handling
intl_error err;
+ // ICU collator
+ UCollator* ucoll;
} Collator_object;
#define COLLATOR_ERROR(co) (co)->err
diff --git a/ext/intl/collator/collator_create.c b/ext/intl/collator/collator_create.c
index 6fbb3da8b3..404887b383 100755
--- a/ext/intl/collator/collator_create.c
+++ b/ext/intl/collator/collator_create.c
@@ -24,10 +24,8 @@
#include "collator_create.h"
#include "intl_data.h"
-/* {{{ proto Collator collator_create( string $locale )
- * Create collator.
- */
-PHP_FUNCTION( collator_create )
+/* {{{ */
+static void collator_ctor(INTERNAL_FUNCTION_PARAMETERS)
{
char* locale;
int locale_len = 0;
@@ -35,44 +33,37 @@ PHP_FUNCTION( collator_create )
Collator_object* co;
intl_error_reset( NULL TSRMLS_CC );
-
+ object = return_value;
// Parse parameters.
if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "s",
&locale, &locale_len ) == FAILURE )
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"collator_create: unable to parse input params", 0 TSRMLS_CC );
-
+ zval_dtor(return_value);
RETURN_NULL();
}
INTL_CHECK_LOCALE_LEN(locale_len);
- // Create a Collator object and save the ICU collator into it.
- if( ( object = getThis() ) == NULL )
- object = return_value;
-
- if( Z_TYPE_P( object ) != IS_OBJECT )
- object_init_ex( object, Collator_ce_ptr );
-
co = (Collator_object *) zend_object_store_get_object( object TSRMLS_CC );
- intl_error_reset( COLLATOR_ERROR_P( co ) TSRMLS_CC );
-
if(locale_len == 0) {
locale = INTL_G(default_locale);
}
// Open ICU collator.
co->ucoll = ucol_open( locale, COLLATOR_ERROR_CODE_P( co ) );
+ INTL_CTOR_CHECK_STATUS(co, "collator_create: unable to open ICU collator");
+}
+/* }}} */
- if( U_FAILURE( COLLATOR_ERROR_CODE( co ) ) || co->ucoll == NULL )
- {
- intl_error_set( NULL, COLLATOR_ERROR_CODE( co ),
- "collator_create: unable to open ICU collator", 0 TSRMLS_CC );
-
- // Collator creation failed.
- RETURN_NULL();
- }
+/* {{{ proto Collator collator_create( string $locale )
+ * Create collator.
+ */
+PHP_FUNCTION( collator_create )
+{
+ object_init_ex( return_value, Collator_ce_ptr );
+ collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
/* }}} */
@@ -81,47 +72,8 @@ PHP_FUNCTION( collator_create )
*/
PHP_METHOD( Collator, __construct )
{
- char* locale = NULL;
- int locale_len = 0;
-
- COLLATOR_METHOD_INIT_VARS
-
- object = getThis();
- // Parse parameters.
- if( zend_parse_parameters( ZEND_NUM_ARGS() TSRMLS_CC, "s",
- &locale, &locale_len ) == FAILURE )
- {
- intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
- "__construct: unable to parse input params", 0 TSRMLS_CC );
-
- zval_dtor(object);
- ZVAL_NULL(object);
- RETURN_NULL();
- }
-
- INTL_CHECK_LOCALE_LEN_OBJ(locale_len, object);
- /* Fetch the object. */
- co = (Collator_object*) zend_object_store_get_object( object TSRMLS_CC );
-
- intl_error_reset( COLLATOR_ERROR_P( co ) TSRMLS_CC );
-
- if(locale_len == 0) {
- locale = INTL_G(default_locale);
- }
-
- // Open ICU collator.
- co->ucoll = ucol_open( locale, COLLATOR_ERROR_CODE_P( co ) );
-
- if( U_FAILURE( COLLATOR_ERROR_CODE( co ) ) || co->ucoll == NULL )
- {
- intl_error_set( NULL, COLLATOR_ERROR_CODE( co ),
- "__construct: unable to open ICU collator", 0 TSRMLS_CC );
-
- zval_dtor(object);
- ZVAL_NULL(object);
- RETURN_NULL();
- }
-
+ return_value = getThis();
+ collator_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
}
/* }}} */