]> granicus.if.org Git - php/commitdiff
Optimized zend_is_true() for objects (in most cases, it doesn't need to call the...
authorDmitry Stogov <dmitry@zend.com>
Mon, 20 Nov 2017 09:38:31 +0000 (12:38 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 20 Nov 2017 09:38:31 +0000 (12:38 +0300)
Zend/zend_operators.h

index 913ab710c40184857140596555171c4f4cbe0c94..366fa1ed5ea3a728e2bfa55463993139e9f9f5da 100644 (file)
@@ -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))) {