summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2017-11-20 12:38:31 +0300
committerDmitry Stogov <dmitry@zend.com>2017-11-20 12:38:31 +0300
commitefa4d8d3acead0cf21315f57ac2da1a08efa86ab (patch)
tree85ff5ca9d7f092cd6e9c48533a7db24ca262e00f
parentf5dbe081efcc840048f2a5f454690621f0676beb (diff)
downloadphp-git-efa4d8d3acead0cf21315f57ac2da1a08efa86ab.tar.gz
Optimized zend_is_true() for objects (in most cases, it doesn't need to call the conversion handler).
-rw-r--r--Zend/zend_operators.h7
1 files changed, 6 insertions, 1 deletions
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index 913ab710c4..366fa1ed5e 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -38,6 +38,7 @@
#include "zend_portability.h"
#include "zend_strtod.h"
#include "zend_multiply.h"
+#include "zend_object_handlers.h"
#define LONG_SIGN_MASK (((zend_long)1) << (8*sizeof(zend_long)-1))
@@ -335,7 +336,11 @@ again:
}
break;
case IS_OBJECT:
- result = zend_object_is_true(op);
+ if (EXPECTED(Z_OBJ_HT_P(op)->cast_object == zend_std_cast_object_tostring)) {
+ result = 1;
+ } else {
+ result = zend_object_is_true(op);
+ }
break;
case IS_RESOURCE:
if (EXPECTED(Z_RES_HANDLE_P(op))) {