]> granicus.if.org Git - php/commitdiff
Align zval_get_long/double with zval_get_string
authorNikita Popov <nikic@php.net>
Fri, 25 Apr 2014 11:37:07 +0000 (13:37 +0200)
committerNikita Popov <nikic@php.net>
Fri, 25 Apr 2014 21:21:04 +0000 (23:21 +0200)
Zend/zend_operators.c
Zend/zend_operators.h
ext/date/php_date.c
ext/dom/document.c

index 764396aa03d5b56ca6b659b2f5bae259e6957df0..fa4c750232109a603f743bcb24638b09106f1125 100644 (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;
index a727df67077f44509fcd9ddc2c03ea0585787ce1..7d786fa8ed81a077bf101c8ad78c7d5b95c91923 100644 (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))
 
index dbcd7d8695f4975d4250d794f995fcd569b80b84..a0a189bbe475e01ecf698dfbfdf3b69dad08b3a7 100644 (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;                                                            \
        }
 
index 7dd6d41671dc2d7ff165ca427760949283082e25..b2c3274063451708eedb3bb8ea1615772b16f170 100644 (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;