1
0
mirror of https://github.com/php/php-src.git synced 2026-04-07 16:13:32 +02:00

Clean up and clarify instanceof_function_ex()

The instanceof_interface_only() function was dead code (always
returned zero).

Clarify that the last parameter indicates whether the passed CE
is interface or class and rewrite the code in terms of assertions.
This commit is contained in:
Nikita Popov
2019-10-24 17:40:25 +02:00
parent 93a9b56c90
commit 435f269108
2 changed files with 8 additions and 29 deletions

View File

@@ -2309,22 +2309,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) {
@@ -2353,21 +2337,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;
}
/* }}} */

View File

@@ -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);
/**