ii = Z_INTL_ITERATOR_P(object);
ii->iterator = (zend_object_iterator*)emalloc(sizeof(zoi_break_iter_parts));
- zend_iterator_init(ii->iterator TSRMLS_CC);
+ //zend_iterator_init(ii->iterator TSRMLS_CC);
+
ZVAL_COPY(&ii->iterator->data, break_iter_zv);
ii->iterator->funcs = &breakiterator_parts_it_funcs;
ii->iterator->index = 0;
+
((zoi_with_current*)ii->iterator)->destroy_it = _breakiterator_parts_destroy_it;
ZVAL_COPY_VALUE(&((zoi_with_current*)ii->iterator)->wrapping_obj, object);
ZVAL_UNDEF(&((zoi_with_current*)ii->iterator)->current);
((zoi_break_iter_parts*)ii->iterator)->bio = Z_INTL_BREAKITERATOR_P(break_iter_zv);
+
assert(((zoi_break_iter_parts*)ii->iterator)->bio->biter != NULL);
+
((zoi_break_iter_parts*)ii->iterator)->key_type = key_type;
}
U_CFUNC zend_object *IntlPartsIterator_object_create(zend_class_entry *ce TSRMLS_DC)
{
- zend_object* retval = IntlIterator_ce_ptr->create_object(ce TSRMLS_CC);
+ zend_object *retval = IntlIterator_ce_ptr->create_object(ce TSRMLS_CC);
retval->handlers = &IntlPartsIterator_handlers;
return retval;
ts_str_len = slprintf(ts_str, sizeof(ts_str), "@%I64d", ts);
ZVAL_STRINGL(&ts_zval, ts_str, ts_str_len);
- //???
- efree(ts_str);
/* Now get the time zone */
const TimeZone& tz = co->ucal->getTimeZone();
zend_get_parameters_array_ex(ZEND_NUM_ARGS(), args) == FAILURE) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intlgregcal_create_instance: too many arguments", 0 TSRMLS_CC);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
for (variant = ZEND_NUM_ARGS();
variant > 0 && Z_TYPE(args[variant - 1]) == IS_NULL;
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intlgregcal_create_instance: no variant with 4 arguments "
"(excluding trailing NULLs)", 0 TSRMLS_CC);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
// argument parsing
"|z!s!", &tz_object, &locale, &locale_len) == FAILURE) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intlgregcal_create_instance: bad arguments", 0 TSRMLS_CC);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
}
if (variant > 2 && zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,
&largs[5]) == FAILURE) {
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intlgregcal_create_instance: bad arguments", 0 TSRMLS_CC);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
// instantion of ICU object
TimeZone *tz = timezone_process_timezone_argument(tz_object, NULL,
"intlgregcal_create_instance" TSRMLS_CC);
if (tz == NULL) {
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
if (!locale) {
locale = const_cast<char*>(intl_locale_get_default(TSRMLS_C));
delete gcal;
}
delete tz;
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
} else {
// From date/time (3, 5 or 6 arguments)
intl_error_set(NULL, U_ILLEGAL_ARGUMENT_ERROR,
"intlgregcal_create_instance: at least one of the arguments"
" has an absolute value that is too large", 0 TSRMLS_CC);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
}
if (gcal) {
delete gcal;
}
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
timelib_tzinfo *tzinfo = get_timezone_info(TSRMLS_C);
"from PHP's default timezone name (see date_default_timezone_get())",
0 TSRMLS_CC);
delete gcal;
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
TimeZone *tz = TimeZone::createTimeZone(tzstr);
_php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (Z_TYPE_P(return_value) == IS_NULL) {
+ if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
zend_object_store_ctor_failed(Z_OBJ(orig) TSRMLS_CC);
- zval_dtor(&orig);
}
}
U_CFUNC PHP_METHOD(IntlGregorianCalendar, __construct)
{
- zval orig_this = *getThis();
+ zval orig_this = *getThis();
intl_error_reset(NULL TSRMLS_CC);
return_value = getThis();
//changes this to IS_NULL (without first destroying) if there's an error
_php_intlgregcal_constructor_body(INTERNAL_FUNCTION_PARAM_PASSTHRU);
- if (Z_TYPE_P(return_value) == IS_NULL) {
+ if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
zend_object_store_ctor_failed(Z_OBJ(orig_this) TSRMLS_CC);
- zval_dtor(&orig_this);
}
}
* not finding the memory of this iterator allocated anymore. */
iter->funcs->invalidate_current(iter TSRMLS_CC);
zoiwc->destroy_it(iter TSRMLS_CC);
- efree(iter);
}
}
intl_error_reset(INTLITERATOR_ERROR_P(ii) TSRMLS_CC);
zend_object_std_dtor(&ii->zo TSRMLS_CC);
-
- efree(ii);
}
static zend_object_iterator *IntlIterator_get_iterator(
intern = (IntlIterator_object*)ecalloc(1, sizeof(IntlIterator_object) + sizeof(zval) * (ce->default_properties_count - 1));
zend_object_std_init(&intern->zo, ce TSRMLS_CC);
- object_properties_init((zend_object*) intern, ce);
+ object_properties_init(&intern->zo, ce);
intl_error_init(INTLITERATOR_ERROR_P(intern) TSRMLS_CC);
intern->iterator = NULL;
&calendar_zv, &pattern_str, &pattern_str_len) == FAILURE) {
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, "datefmt_create: "
"unable to parse input parameters", 0 TSRMLS_CC);
- zval_dtor(return_value);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value);
}
if (U_FAILURE(intl_error_get_code(NULL TSRMLS_CC))) {
/* free_object handles partially constructed instances fine */
- zval_dtor(return_value);
- RETVAL_NULL();
+ Z_OBJ_P(return_value) = NULL;
}
}
/* }}} */
{
object_init_ex( return_value, IntlDateFormatter_ce_ptr );
datefmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
+ RETURN_NULL();
+ }
}
/* }}} */
DATE_FORMAT_METHOD_FETCH_OBJECT;
if (z_parse_pos) {
+ ZVAL_DEREF(z_parse_pos);
convert_to_long(z_parse_pos);
parse_pos = (int32_t)Z_LVAL_P(z_parse_pos);
if(parse_pos > text_len) {
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"numfmt_create: unable to parse input parameters", 0 TSRMLS_CC );
- zval_dtor(return_value);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
+ return;
}
INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value);
{
object_init_ex( return_value, NumberFormatter_ce_ptr );
numfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
+ RETURN_NULL();
+ }
}
/* }}} */
INTL_METHOD_CHECK_STATUS( nfo, "String conversion to UTF-16 failed" );
if(zposition) {
+ ZVAL_DEREF(zposition);
convert_to_long(zposition);
position = (int32_t)Z_LVAL_P( zposition );
position_p = &position;
INTL_METHOD_CHECK_STATUS( nfo, "String conversion to UTF-16 failed" );
if(zposition) {
+ ZVAL_DEREF(zposition);
convert_to_long(zposition);
position = (int32_t)Z_LVAL_P( zposition );
position_p = &position;
{
intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR,
"msgfmt_create: unable to parse input parameters", 0 TSRMLS_CC );
- zval_dtor(return_value);
- RETURN_NULL();
+ Z_OBJ_P(return_value) == NULL;
+ return;
}
INTL_CHECK_LOCALE_LEN_OBJ(locale_len, return_value);
{
object_init_ex( return_value, MessageFormatter_ce_ptr );
msgfmt_ctor(INTERNAL_FUNCTION_PARAM_PASSTHRU);
+ if (Z_TYPE_P(return_value) == IS_OBJECT && Z_OBJ_P(return_value) == NULL) {
+ RETURN_NULL();
+ }
}
/* }}} */
rb->me, ULOC_ACTUAL_LOCALE, &INTL_DATA_ERROR_CODE(rb)));
intl_errors_set_custom_msg(INTL_DATA_ERROR_P(rb), pbuf, 1 TSRMLS_CC);
efree(pbuf);
- zval_dtor(return_value);
- RETURN_NULL();
+ Z_OBJ_P(return_value) = NULL;
}
}
/* }}} */
resourcebundle_iterator_invalidate( iter TSRMLS_CC );
- Z_DELREF_P(object);
-
- efree(iterator);
+ zval_ptr_dtor(object);
}
/* }}} */