diff options
author | Andi Gutmans <andi@php.net> | 2002-06-29 07:35:41 +0000 |
---|---|---|
committer | Andi Gutmans <andi@php.net> | 2002-06-29 07:35:41 +0000 |
commit | 6339bd59120eaee13e4636f74bbf9a9d54efdce4 (patch) | |
tree | 86fafc4ddc343f7c0d0df3241961b82f66d0c80e /Zend/zend_operators.c | |
parent | 8c49132266a337e0911d790ec8bbf3631df7bceb (diff) | |
download | php-git-6339bd59120eaee13e4636f74bbf9a9d54efdce4.tar.gz |
- Fix bug 15037
- Bump version to alpha2-dev
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r-- | Zend/zend_operators.c | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index fca3b5618c..5fdd1c1eb6 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -1509,6 +1509,7 @@ ZEND_API int increment_function(zval *op1) ZEND_API int decrement_function(zval *op1) { long lval; + double dval; switch (op1->type) { case IS_LONG: @@ -1528,16 +1529,23 @@ ZEND_API int decrement_function(zval *op1) op1->value.lval = -1; op1->type = IS_LONG; break; - } else if (is_numeric_string(op1->value.str.val, op1->value.str.len, &lval, NULL, 0)==IS_LONG) { /* long */ - STR_FREE(op1->value.str.val); - if(lval == LONG_MIN) { - double d = (double)lval; - ZVAL_DOUBLE(op1, d-1); - } else { - op1->value.lval = lval-1; - op1->type = IS_LONG; - } - break; + } + switch(is_numeric_string(op1->value.str.val, op1->value.str.len, &lval, &dval, 0)) { + case IS_LONG: + STR_FREE(op1->value.str.val); + if(lval == LONG_MIN) { + double d = (double)lval; + ZVAL_DOUBLE(op1, d-1); + } else { + op1->value.lval = lval-1; + op1->type = IS_LONG; + } + break; + case IS_DOUBLE: + STR_FREE(op1->value.str.val); + op1->value.dval = dval - 1; + op1->type = IS_DOUBLE; + break; } break; default: |