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);
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);
ZVAL_BOOL(op, 0);
break;
case IS_RESOURCE: {
- TSRMLS_FETCH();
long l = (Z_RES_HANDLE_P(op) ? 1 : 0);
zval_ptr_dtor(op);
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);
}
/* }}} */
-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;
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;
}
/* }}} */
-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;
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;
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))
#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; \
}
return FAILURE;
}
- standalone = zval_get_long(newval TSRMLS_CC);
+ standalone = zval_get_long(newval);
docp->standalone = ZEND_NORMALIZE_BOOL(standalone);
return SUCCESS;