summaryrefslogtreecommitdiff
path: root/Zend/zend_opcode.c
diff options
context:
space:
mode:
authorDmitry Stogov <dmitry@zend.com>2018-08-23 17:16:28 +0300
committerDmitry Stogov <dmitry@zend.com>2018-08-23 17:16:28 +0300
commitd140df58e6152037e7e3a3a0b119eae4970dd77e (patch)
tree5ee51b3be6f0619a077d57310e23b490525f9354 /Zend/zend_opcode.c
parent4bf1d0b3a4b53a0d374f8c94ad506fcf8dee2d7e (diff)
downloadphp-git-d140df58e6152037e7e3a3a0b119eae4970dd77e.tar.gz
Keep information about unresolved interfaces in zend_class_entry->interface_names.
Move interface implementation code into ZEND_DECLARE_*CLASS opcodes. Remove ZEND_ADD_INTERFACE and ZEND_VERIFY_ABSTRACT_CLASS opcodes.
Diffstat (limited to 'Zend/zend_opcode.c')
-rw-r--r--Zend/zend_opcode.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/Zend/zend_opcode.c b/Zend/zend_opcode.c
index a0fd5a71a6..451104aaf0 100644
--- a/Zend/zend_opcode.c
+++ b/Zend/zend_opcode.c
@@ -262,7 +262,15 @@ ZEND_API void destroy_zend_class(zval *zv)
} ZEND_HASH_FOREACH_END();
}
zend_hash_destroy(&ce->constants_table);
- if (ce->num_interfaces > 0 && ce->interfaces) {
+ if (ce->num_interfaces > 0) {
+ if (ce->ce_flags & ZEND_ACC_UNRESOLVED_INTERFACES) {
+ uint32_t i;
+
+ for (i = 0; i < ce->num_interfaces; i++) {
+ zend_string_release_ex(ce->interface_names[i].name, 0);
+ zend_string_release_ex(ce->interface_names[i].lc_name, 0);
+ }
+ }
efree(ce->interfaces);
}
if (ce->info.user.doc_comment) {