diff options
author | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-24 17:42:04 +0200 |
---|---|---|
committer | Nikita Popov <nikita.ppv@gmail.com> | 2019-10-24 17:42:04 +0200 |
commit | 19bea48c9a752f9431d31bb8e3acbc28f728e798 (patch) | |
tree | b92372c9b9c2d7c99be8560c85ed09c295965945 | |
parent | d71a6ee54fb43acc08a3ed471cc2469946e135de (diff) | |
parent | 435f2691088fa9011696fd331d401544155d69a9 (diff) | |
download | php-git-19bea48c9a752f9431d31bb8e3acbc28f728e798.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Clean up and clarify instanceof_function_ex()
-rw-r--r-- | Zend/zend_operators.c | 35 | ||||
-rw-r--r-- | Zend/zend_operators.h | 2 |
2 files changed, 8 insertions, 29 deletions
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c index 3a2dd76e15..7e3bd1076d 100644 --- a/Zend/zend_operators.c +++ b/Zend/zend_operators.c @@ -2175,22 +2175,6 @@ ZEND_API int ZEND_FASTCALL is_smaller_or_equal_function(zval *result, zval *op1, } /* }}} */ -static zend_bool ZEND_FASTCALL instanceof_interface_only(const zend_class_entry *instance_ce, const zend_class_entry *ce) /* {{{ */ -{ - uint32_t i; - - if (instance_ce->num_interfaces) { - ZEND_ASSERT(instance_ce->ce_flags & ZEND_ACC_RESOLVED_INTERFACES); - for (i = 0; i < instance_ce->num_interfaces; i++) { - if (instanceof_interface_only(instance_ce->interfaces[i], ce)) { - return 1; - } - } - } - return 0; -} -/* }}} */ - static zend_always_inline zend_bool instanceof_class(const zend_class_entry *instance_ce, const zend_class_entry *ce) /* {{{ */ { while (instance_ce) { @@ -2219,21 +2203,16 @@ static zend_bool ZEND_FASTCALL instanceof_interface(const zend_class_entry *inst } /* }}} */ -ZEND_API zend_bool ZEND_FASTCALL instanceof_function_ex(const zend_class_entry *instance_ce, const zend_class_entry *ce, zend_bool interfaces_only) /* {{{ */ +// TODO: It would make more sense to expose instanceof_class + instanceof_interface instead +ZEND_API zend_bool ZEND_FASTCALL instanceof_function_ex(const zend_class_entry *instance_ce, const zend_class_entry *ce, zend_bool is_interface) /* {{{ */ { - if (ce->ce_flags & ZEND_ACC_INTERFACE) { - if (!interfaces_only) { - if (instanceof_interface_only(instance_ce, ce)) { - return 1; - } - } else { - return instanceof_interface(instance_ce, ce); - } - } - if (!interfaces_only) { + if (is_interface) { + ZEND_ASSERT(ce->ce_flags & ZEND_ACC_INTERFACE); + return instanceof_interface(instance_ce, ce); + } else { + ZEND_ASSERT(!(ce->ce_flags & ZEND_ACC_INTERFACE)); return instanceof_class(instance_ce, ce); } - return 0; } /* }}} */ diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h index 860d71b1d5..8ae6fe664b 100644 --- a/Zend/zend_operators.h +++ b/Zend/zend_operators.h @@ -63,7 +63,7 @@ ZEND_API int ZEND_FASTCALL is_not_equal_function(zval *result, zval *op1, zval * ZEND_API int ZEND_FASTCALL is_smaller_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_smaller_or_equal_function(zval *result, zval *op1, zval *op2); -ZEND_API zend_bool ZEND_FASTCALL instanceof_function_ex(const zend_class_entry *instance_ce, const zend_class_entry *ce, zend_bool interfaces_only); +ZEND_API zend_bool ZEND_FASTCALL instanceof_function_ex(const zend_class_entry *instance_ce, const zend_class_entry *ce, zend_bool is_interface); ZEND_API zend_bool ZEND_FASTCALL instanceof_function(const zend_class_entry *instance_ce, const zend_class_entry *ce); /** |