diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-08-23 17:16:28 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-08-23 17:16:28 +0300 |
commit | d140df58e6152037e7e3a3a0b119eae4970dd77e (patch) | |
tree | 5ee51b3be6f0619a077d57310e23b490525f9354 /Zend/zend_opcode.c | |
parent | 4bf1d0b3a4b53a0d374f8c94ad506fcf8dee2d7e (diff) | |
download | php-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.c | 10 |
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) { |