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:
@@ -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;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user