From: Dmitry Stogov Date: Mon, 20 Nov 2017 09:38:31 +0000 (+0300) Subject: Optimized zend_is_true() for objects (in most cases, it doesn't need to call the... X-Git-Tag: php-7.3.0alpha1~986 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=efa4d8d3acead0cf21315f57ac2da1a08efa86ab;p=php Optimized zend_is_true() for objects (in most cases, it doesn't need to call the conversion handler). --- 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))) {