}
-ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC)
+ZEND_API int convert_scalar_to_number(zval *op TSRMLS_DC)
{
switch (Z_TYPE_P(op)) {
case IS_STRING:
Z_LVAL_P(op) = 0;
break;
}
+
+ return SUCCESS;
}
#define zendi_convert_scalar_to_number(op, holder, result) \
}
-ZEND_API void convert_to_long(zval *op)
+ZEND_API int convert_to_long(zval *op)
{
- convert_to_long_base(op, 10);
+ return convert_to_long_base(op, 10);
}
-ZEND_API void convert_to_long_base(zval *op, int base)
+ZEND_API int convert_to_long_base(zval *op, int base)
{
long tmp;
convert_object_to_type(op, IS_LONG, convert_to_long);
if (Z_TYPE_P(op) == IS_LONG) {
- return;
+ return SUCCESS;
}
zend_error(E_NOTICE, "Object of class %v could not be converted to int", Z_OBJCE_P(op)->name);
zval_dtor(op);
ZVAL_LONG(op, retval);
- return;
+ return FAILURE;
}
default:
zend_error(E_WARNING, "Cannot convert to ordinal value");
zval_dtor(op);
Z_LVAL_P(op) = 0;
- break;
+ return FAILURE;
}
Z_TYPE_P(op) = IS_LONG;
+ return SUCCESS;
}
-ZEND_API void convert_to_double(zval *op)
+ZEND_API int convert_to_double(zval *op)
{
double tmp;
convert_object_to_type(op, IS_DOUBLE, convert_to_double);
if (Z_TYPE_P(op) == IS_DOUBLE) {
- return;
+ return SUCCESS;
}
zend_error(E_NOTICE, "Object of class %v could not be converted to double", Z_OBJCE_P(op)->name);
zval_dtor(op);
ZVAL_DOUBLE(op, retval);
- break;
+ return FAILURE;
}
default:
zend_error(E_WARNING, "Cannot convert to real value (type=%d)", Z_TYPE_P(op));
zval_dtor(op);
Z_DVAL_P(op) = 0;
- break;
+ return FAILURE;
}
+
Z_TYPE_P(op) = IS_DOUBLE;
+ return SUCCESS;
}
-ZEND_API void convert_to_null(zval *op)
+ZEND_API int convert_to_null(zval *op)
{
if (Z_TYPE_P(op) == IS_OBJECT) {
if (Z_OBJ_HT_P(op)->cast_object) {
*org = *op;
if (Z_OBJ_HT_P(op)->cast_object(org, op, IS_NULL, NULL TSRMLS_CC) == SUCCESS) {
zval_dtor(org);
- return;
+ return SUCCESS;
}
*op = *org;
FREE_ZVAL(org);
+ return FAILURE;
}
}
zval_dtor(op);
Z_TYPE_P(op) = IS_NULL;
+ return SUCCESS;
}
-ZEND_API void convert_to_boolean(zval *op)
+ZEND_API int convert_to_boolean(zval *op)
{
int tmp;
convert_object_to_type(op, IS_BOOL, convert_to_boolean);
if (Z_TYPE_P(op) == IS_BOOL) {
- return;
+ return SUCCESS;
}
zval_dtor(op);
ZVAL_BOOL(op, retval);
- break;
+ return FAILURE;
}
default:
zval_dtor(op);
Z_LVAL_P(op) = 0;
break;
}
+
Z_TYPE_P(op) = IS_BOOL;
+ return SUCCESS;
}
#define NUM_BUF_SIZE 512
return (result);
}
-ZEND_API void _convert_to_unicode(zval *op TSRMLS_DC ZEND_FILE_LINE_DC)
+ZEND_API int _convert_to_unicode(zval *op TSRMLS_DC ZEND_FILE_LINE_DC)
{
- _convert_to_unicode_with_converter(op, ZEND_U_CONVERTER(UG(runtime_encoding_conv)) TSRMLS_CC ZEND_FILE_LINE_CC);
+ return _convert_to_unicode_with_converter(op, ZEND_U_CONVERTER(UG(runtime_encoding_conv)) TSRMLS_CC ZEND_FILE_LINE_CC);
}
-ZEND_API void _convert_to_unicode_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC)
+ZEND_API int _convert_to_unicode_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC)
{
switch (Z_TYPE_P(op)) {
case IS_NULL:
case IS_UNICODE:
break;
case IS_STRING:
- zval_string_to_unicode_ex(op, conv TSRMLS_CC);
- return;
+ return zval_string_to_unicode_ex(op, conv TSRMLS_CC);
case IS_BOOL:
if (Z_LVAL_P(op)) {
Z_USTRVAL_P(op) = USTR_MAKE_REL("1");
zval_dtor(op);
Z_USTRVAL_P(op) = USTR_MAKE_REL("Array");
Z_USTRLEN_P(op) = sizeof("Array")-1;
- break;
+ return FAILURE;
case IS_OBJECT: {
+ int retval = FAILURE;
+
if (Z_OBJ_HT_P(op)->cast_object) {
zval dst;
if (Z_OBJ_HT_P(op)->cast_object(op, &dst, IS_UNICODE, conv TSRMLS_CC) == FAILURE) {
zend_error(E_RECOVERABLE_ERROR,
"Object of class %v could not be converted to %s", Z_OBJCE_P(op)->name,
zend_get_type_by_const(IS_UNICODE));
+ return FAILURE;
} else {
zval_dtor(op);
Z_TYPE_P(op) = IS_UNICODE;
op->value = dst.value;
+ retval = SUCCESS;
}
} else {
if(Z_OBJ_HT_P(op)->get) {
zval_dtor(op);
*op = *newop;
FREE_ZVAL(newop);
- convert_to_string_with_converter(op, conv);
+ retval = convert_to_string_with_converter(op, conv);
}
}
}
- if (Z_TYPE_P(op) == IS_UNICODE) {
- return;
+ if (retval == SUCCESS && Z_TYPE_P(op) == IS_UNICODE) {
+ return SUCCESS;
}
zend_error(E_NOTICE, "Object of class %v to string conversion", Z_OBJCE_P(op)->name);
zval_dtor(op);
Z_USTRVAL_P(op) = USTR_MAKE_REL("Object");
Z_USTRLEN_P(op) = sizeof("Object")-1;
- break;
+ return FAILURE;
}
default:
zval_dtor(op);
ZVAL_BOOL(op, 0);
- break;
+ return FAILURE;
}
+
Z_TYPE_P(op) = IS_UNICODE;
+ return SUCCESS;
}
-ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC)
+ZEND_API int _convert_to_string(zval *op ZEND_FILE_LINE_DC)
{
TSRMLS_FETCH();
- _convert_to_string_with_converter(op, ZEND_U_CONVERTER(UG(runtime_encoding_conv)) TSRMLS_CC ZEND_FILE_LINE_CC);
+ return _convert_to_string_with_converter(op, ZEND_U_CONVERTER(UG(runtime_encoding_conv)) TSRMLS_CC ZEND_FILE_LINE_CC);
}
-ZEND_API void _convert_to_string_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC)
+ZEND_API int _convert_to_string_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC)
{
long lval;
double dval;
Z_STRLEN_P(op) = 0;
break;
case IS_STRING:
- return;
- case IS_UNICODE:
- zval_unicode_to_string_ex(op, conv TSRMLS_CC);
break;
+ case IS_UNICODE:
+ return zval_unicode_to_string_ex(op, conv TSRMLS_CC);
case IS_BOOL:
if (Z_LVAL_P(op)) {
Z_STRVAL_P(op) = estrndup_rel("1", 1);
zval_dtor(op);
Z_STRVAL_P(op) = estrndup_rel("Array", sizeof("Array")-1);
Z_STRLEN_P(op) = sizeof("Array")-1;
- break;
+ return FAILURE;
case IS_OBJECT: {
+ int retval = FAILURE;
TSRMLS_FETCH();
if (Z_OBJ_HT_P(op)->cast_object) {
zend_error(E_RECOVERABLE_ERROR,
"Object of class %v could not be converted to %s", Z_OBJCE_P(op)->name,
zend_get_type_by_const(IS_STRING));
+ return FAILURE;
} else {
zval_dtor(op);
Z_TYPE_P(op) = IS_STRING;
op->value = dst.value;
+ retval = SUCCESS;
}
} else {
if(Z_OBJ_HT_P(op)->get) {
zval_dtor(op);
*op = *newop;
FREE_ZVAL(newop);
- convert_to_string_with_converter(op, conv);
+ retval = convert_to_string_with_converter(op, conv);
}
}
}
- if (Z_TYPE_P(op) == IS_STRING) {
- return;
+ if (retval == SUCCESS && Z_TYPE_P(op) == IS_STRING) {
+ return SUCCESS;
}
zend_error(E_NOTICE, "Object of class %v to string conversion", Z_OBJCE_P(op)->name);
zval_dtor(op);
Z_STRVAL_P(op) = estrndup_rel("Object", sizeof("Object")-1);
Z_STRLEN_P(op) = sizeof("Object")-1;
- break;
+ return FAILURE;
}
default:
zval_dtor(op);
ZVAL_BOOL(op, 0);
- break;
+ return FAILURE;
}
+
Z_TYPE_P(op) = IS_STRING;
+ return SUCCESS;
}
-static void convert_scalar_to_array(zval *op, int type TSRMLS_DC)
+static int convert_scalar_to_array(zval *op, int type TSRMLS_DC)
{
zval *entry;
}
break;
}
+
+ return SUCCESS;
}
-ZEND_API void convert_to_array(zval *op)
+ZEND_API int convert_to_array(zval *op)
{
TSRMLS_FETCH();
switch (Z_TYPE_P(op)) {
case IS_ARRAY:
- return;
break;
/* OBJECTS_OPTIMIZE */
case IS_OBJECT:
{
zval *tmp;
HashTable *ht;
+ int retval = FAILURE;
ALLOC_HASHTABLE(ht);
zend_u_hash_init(ht, 0, NULL, ZVAL_PTR_DTOR, 0, 0);
if (Z_OBJ_HT_P(op)->get_properties) {
HashTable *obj_ht = Z_OBJ_HT_P(op)->get_properties(op TSRMLS_CC);
- if(obj_ht) {
+ if (obj_ht) {
zend_hash_copy(ht, obj_ht, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
+ retval = SUCCESS;
}
} else {
convert_object_to_type(op, IS_ARRAY, convert_to_array);
if (Z_TYPE_P(op) == IS_ARRAY) {
- return;
+ return SUCCESS;
}
}
zval_dtor(op);
Z_TYPE_P(op) = IS_ARRAY;
Z_ARRVAL_P(op) = ht;
+ return retval;
}
- return;
+ break;
case IS_NULL:
ALLOC_HASHTABLE(Z_ARRVAL_P(op));
zend_u_hash_init(Z_ARRVAL_P(op), 0, NULL, ZVAL_PTR_DTOR, 0, 0);
Z_TYPE_P(op) = IS_ARRAY;
break;
default:
- convert_scalar_to_array(op, IS_ARRAY TSRMLS_CC);
- break;
+ return convert_scalar_to_array(op, IS_ARRAY TSRMLS_CC);
}
+
+ return SUCCESS;
}
-ZEND_API void convert_to_object(zval *op)
+ZEND_API int convert_to_object(zval *op)
{
TSRMLS_FETCH();
switch (Z_TYPE_P(op)) {
case IS_ARRAY:
{
object_and_properties_init(op, zend_standard_class_def, Z_ARRVAL_P(op));
- return;
break;
}
case IS_OBJECT:
- return;
+ break;
case IS_NULL:
{
/* OBJECTS_OPTIMIZE */
break;
}
default:
- convert_scalar_to_array(op, IS_OBJECT TSRMLS_CC);
- break;
+ return convert_scalar_to_array(op, IS_OBJECT TSRMLS_CC);
}
+
+ return SUCCESS;
}
ZEND_API void multi_convert_to_long_ex(int argc, ...)
ZEND_API int increment_function(zval *op1);
ZEND_API int decrement_function(zval *op2);
-ZEND_API void convert_scalar_to_number(zval *op TSRMLS_DC);
-ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC);
-ZEND_API void _convert_to_string_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC);
-ZEND_API void _convert_to_unicode(zval *op TSRMLS_DC ZEND_FILE_LINE_DC);
-ZEND_API void _convert_to_unicode_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC);
-ZEND_API void convert_to_long(zval *op);
-ZEND_API void convert_to_double(zval *op);
-ZEND_API void convert_to_long_base(zval *op, int base);
-ZEND_API void convert_to_null(zval *op);
-ZEND_API void convert_to_boolean(zval *op);
-ZEND_API void convert_to_array(zval *op);
-ZEND_API void convert_to_object(zval *op);
+ZEND_API int convert_scalar_to_number(zval *op TSRMLS_DC);
+ZEND_API int _convert_to_string(zval *op ZEND_FILE_LINE_DC);
+ZEND_API int _convert_to_string_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC);
+ZEND_API int _convert_to_unicode(zval *op TSRMLS_DC ZEND_FILE_LINE_DC);
+ZEND_API int _convert_to_unicode_with_converter(zval *op, UConverter *conv TSRMLS_DC ZEND_FILE_LINE_DC);
+ZEND_API int convert_to_long(zval *op);
+ZEND_API int convert_to_double(zval *op);
+ZEND_API int convert_to_long_base(zval *op, int base);
+ZEND_API int convert_to_null(zval *op);
+ZEND_API int convert_to_boolean(zval *op);
+ZEND_API int convert_to_array(zval *op);
+ZEND_API int convert_to_object(zval *op);
ZEND_API void multi_convert_to_long_ex(int argc, ...);
ZEND_API void multi_convert_to_double_ex(int argc, ...);
ZEND_API void multi_convert_to_string_ex(int argc, ...);