summaryrefslogtreecommitdiff
path: root/Zend/zend_operators.c
diff options
context:
space:
mode:
authorNikita Popov <nikita.ppv@gmail.com>2019-10-24 17:47:35 +0200
committerNikita Popov <nikita.ppv@gmail.com>2019-10-24 17:47:35 +0200
commitc63a0e005abe4b00ab097dc47ca53d20788a6361 (patch)
tree05a912eb7f7c38cba7e5098a75a94e48199acaed /Zend/zend_operators.c
parent435f2691088fa9011696fd331d401544155d69a9 (diff)
downloadphp-git-c63a0e005abe4b00ab097dc47ca53d20788a6361.tar.gz
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.
Diffstat (limited to 'Zend/zend_operators.c')
-rw-r--r--Zend/zend_operators.c6
1 files 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;
}
/* }}} */