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.
This commit is contained in:
Nikita Popov 2019-10-24 17:47:35 +02:00
parent 435f269108
commit c63a0e005a

View file

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