Align zval_get_long/double with zval_get_string

This commit is contained in:
Nikita Popov 2014-04-25 13:37:07 +02:00
parent b1b7939b0f
commit 93f9518a58
4 changed files with 20 additions and 10 deletions

View file

@ -389,7 +389,6 @@ ZEND_API void convert_to_long_base(zval *op, int base) /* {{{ */
ZVAL_LONG(op, 0);
break;
case IS_RESOURCE: {
TSRMLS_FETCH();
long l = Z_RES_HANDLE_P(op);
zval_ptr_dtor(op);
ZVAL_LONG(op, l);
@ -450,7 +449,6 @@ ZEND_API void convert_to_double(zval *op) /* {{{ */
ZVAL_DOUBLE(op, 0.0);
break;
case IS_RESOURCE: {
TSRMLS_FETCH();
double d = (double) Z_RES_HANDLE_P(op);
zval_ptr_dtor(op);
ZVAL_DOUBLE(op, d);
@ -532,7 +530,6 @@ ZEND_API void convert_to_boolean(zval *op) /* {{{ */
ZVAL_BOOL(op, 0);
break;
case IS_RESOURCE: {
TSRMLS_FETCH();
long l = (Z_RES_HANDLE_P(op) ? 1 : 0);
zval_ptr_dtor(op);
@ -617,7 +614,6 @@ ZEND_API void _convert_to_string(zval *op ZEND_FILE_LINE_DC) /* {{{ */
long tmp = Z_RES_HANDLE_P(op);
char *str;
int len;
TSRMLS_FETCH();
zval_ptr_dtor(op);
len = zend_spprintf(&str, 0, "Resource id #%ld", tmp);
@ -819,8 +815,9 @@ ZEND_API void multi_convert_to_string_ex(int argc, ...) /* {{{ */
}
/* }}} */
ZEND_API long zval_get_long(zval *op TSRMLS_DC) /* {{{ */
ZEND_API long _zval_get_long_func(zval *op TSRMLS_DC) /* {{{ */
{
try_again:
switch (Z_TYPE_P(op)) {
case IS_NULL:
return 0;
@ -848,6 +845,9 @@ ZEND_API long zval_get_long(zval *op TSRMLS_DC) /* {{{ */
return 1;
}
}
case IS_REFERENCE:
op = Z_REFVAL_P(op);
goto try_again;
default:
zend_error(E_WARNING, "Cannot convert to ordinal value");
return 0;
@ -855,8 +855,9 @@ ZEND_API long zval_get_long(zval *op TSRMLS_DC) /* {{{ */
}
/* }}} */
ZEND_API double zval_get_double(zval *op TSRMLS_DC) /* {{{ */
ZEND_API double _zval_get_double_func(zval *op TSRMLS_DC) /* {{{ */
{
try_again:
switch (Z_TYPE_P(op)) {
case IS_NULL:
return 0.0;
@ -886,6 +887,9 @@ ZEND_API double zval_get_double(zval *op TSRMLS_DC) /* {{{ */
return 1.0;
}
}
case IS_REFERENCE:
op = Z_REFVAL_P(op);
goto try_again;
default:
zend_error(E_WARNING, "Cannot convert to real value (type=%d)", Z_TYPE_P(op));
return 0.0;

View file

@ -338,10 +338,16 @@ 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, ...);
ZEND_API long zval_get_long(zval *op TSRMLS_DC);
ZEND_API double zval_get_double(zval *op TSRMLS_DC);
ZEND_API long _zval_get_long_func(zval *op TSRMLS_DC);
ZEND_API double _zval_get_double_func(zval *op TSRMLS_DC);
ZEND_API zend_string *_zval_get_string_func(zval *op TSRMLS_DC);
#define zval_get_long(op) ((Z_TYPE_P(op) == IS_LONG) ? \
Z_LVAL_P(op) : _zval_get_long_func((op) TSRMLS_CC))
#define zval_get_double(op) ((Z_TYPE_P(op) == IS_DOUBLE) ? \
Z_DVAL_P(op) : _zval_get_double_func((op) TSRMLS_CC))
#define zval_get_string(op) ((Z_TYPE_P(op) == IS_STRING) ? \
STR_COPY(Z_STR_P(op)) : _zval_get_string_func((op) TSRMLS_CC))

View file

@ -4048,7 +4048,7 @@ void date_interval_write_property(zval *object, zval *member, zval *value, zend_
#define SET_VALUE_FROM_STRUCT(n,m) \
if (strcmp(Z_STRVAL_P(member), m) == 0) { \
obj->diff->n = zval_get_long(value TSRMLS_CC); \
obj->diff->n = zval_get_long(value); \
break; \
}

View file

@ -388,7 +388,7 @@ int dom_document_standalone_write(dom_object *obj, zval *newval TSRMLS_DC)
return FAILURE;
}
standalone = zval_get_long(newval TSRMLS_CC);
standalone = zval_get_long(newval);
docp->standalone = ZEND_NORMALIZE_BOOL(standalone);
return SUCCESS;