]> granicus.if.org Git - php/commitdiff
- Actually we must do this in two steps: 1st resize the table and set all
authorMarcus Boerger <helly@php.net>
Thu, 17 Feb 2005 20:49:56 +0000 (20:49 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 17 Feb 2005 20:49:56 +0000 (20:49 +0000)
  interfaces, 2nd implement the interfaces

Zend/zend_API.c

index 81ef11665a71853abaa3e0b6d39e4ece8733d9fc..4452f4dff9e411af69fe3239005f7938fe395829 100644 (file)
@@ -1633,6 +1633,7 @@ ZEND_API void zend_class_implements(zend_class_entry *class_entry TSRMLS_DC, int
        zend_class_entry *interface_entry;
        va_list interface_list;
        va_start(interface_list, num_interfaces);
+       int ce_num = class_entry->num_interfaces;
 
        if (class_entry->type & ZEND_INTERNAL_CLASS) {
                class_entry->interfaces = realloc(class_entry->interfaces, sizeof(zend_class_entry*) * (class_entry->num_interfaces+num_interfaces));
@@ -1642,8 +1643,10 @@ ZEND_API void zend_class_implements(zend_class_entry *class_entry TSRMLS_DC, int
        
        while (num_interfaces--) {
                interface_entry = va_arg(interface_list, zend_class_entry *);
-               class_entry->interfaces[class_entry->num_interfaces] = interface_entry;
-               zend_do_implement_interface(class_entry, interface_entry TSRMLS_CC);
+               class_entry->interfaces[class_entry->num_interfaces++] = interface_entry;
+       }
+       while(ce_num < class_entry->num_interfaces) {
+               zend_do_implement_interface(class_entry, class_entry->interfaces[ce_num++] TSRMLS_CC);
        }
        va_end(interface_list);
 }