diff options
Diffstat (limited to 'Zend/zend_execute.h')
-rw-r--r-- | Zend/zend_execute.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/Zend/zend_execute.h b/Zend/zend_execute.h index 98e2678f53..0cdaeabde0 100644 --- a/Zend/zend_execute.h +++ b/Zend/zend_execute.h @@ -80,13 +80,18 @@ again: switch (Z_TYPE_P(op)) { case IS_UNDEF: case IS_NULL: + case IS_FALSE: result = 0; break; + case IS_TRUE: + result = 1; + break; case IS_LONG: - case IS_BOOL: - case IS_RESOURCE: result = (Z_LVAL_P(op)?1:0); break; + case IS_RESOURCE: + result = (Z_RES_HANDLE_P(op)?1:0); + break; case IS_DOUBLE: result = (Z_DVAL_P(op) ? 1 : 0); break; @@ -105,8 +110,8 @@ again: if (IS_ZEND_STD_OBJECT(*op)) { if (Z_OBJ_HT_P(op)->cast_object) { zval tmp; - if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, IS_BOOL TSRMLS_CC) == SUCCESS) { - result = Z_LVAL(tmp); + if (Z_OBJ_HT_P(op)->cast_object(op, &tmp, _IS_BOOL TSRMLS_CC) == SUCCESS) { + result = Z_TYPE(tmp) == IS_TRUE; break; } } else if (Z_OBJ_HT_P(op)->get) { @@ -115,7 +120,7 @@ again: if (Z_TYPE_P(tmp) != IS_OBJECT) { /* for safety - avoid loop */ convert_to_boolean(tmp); - result = Z_LVAL_P(tmp); + result = Z_TYPE_P(tmp) == IS_TRUE; zval_ptr_dtor(tmp); break; } |