From c63a0e005abe4b00ab097dc47ca53d20788a6361 Mon Sep 17 00:00:00 2001 From: Nikita Popov Date: Thu, 24 Oct 2019 17:47:35 +0200 Subject: [PATCH] Optimize instanceof_class/interface instanceof_class does not need to check for a NULL pointer in the first iteration -- passing NULL to this function is illegal. instanceof_interface does not need to use instanceof_class(), it only has to check whether the CEs match exactly. There is no way for an interface to appear inside "parent", it will always be in "interfaces" only. --- Zend/zend_operators.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index bf896a8bef..c2ea3cd65a 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -2311,12 +2311,12 @@ ZEND_API int ZEND_FASTCALL is_smaller_or_equal_function(zval *result, zval *op1, static zend_always_inline zend_bool instanceof_class(const zend_class_entry *instance_ce, const zend_class_entry *ce) /* {{{ */ { - while (instance_ce) { + do { if (instance_ce == ce) { return 1; } instance_ce = instance_ce->parent; - } + } while (instance_ce); return 0; } /* }}} */ @@ -2333,7 +2333,7 @@ static zend_bool ZEND_FASTCALL instanceof_interface(const zend_class_entry *inst } } } - return instanceof_class(instance_ce, ce); + return instance_ce == ce; } /* }}} */ -- 2.40.0