summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.c
diff options
context:
space:
mode:
authorAndi Gutmans <andi@php.net>2002-06-29 07:35:41 +0000
committerAndi Gutmans <andi@php.net>2002-06-29 07:35:41 +0000
commit6339bd59120eaee13e4636f74bbf9a9d54efdce4 (patch)
tree86fafc4ddc343f7c0d0df3241961b82f66d0c80e /Zend/zend_operators.c
parent8c49132266a337e0911d790ec8bbf3631df7bceb (diff)
downloadphp-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.c28
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: