diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-24 17:47:35 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-24 17:47:35 +0200 |
commit | c63a0e005abe4b00ab097dc47ca53d20788a6361 (patch) | |
tree | 05a912eb7f7c38cba7e5098a75a94e48199acaed /Zend/zend_operators.c | |
parent | 435f2691088fa9011696fd331d401544155d69a9 (diff) | |
download | php-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.c | 6 |
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; } /* }}} */ |