]> granicus.if.org Git - php/commitdiff
Fix certain cases where inheritance of base class's overloaded handlers wasn't
authorAndrei Zmievski <andrei@php.net>
Sat, 21 Jul 2001 02:35:13 +0000 (02:35 +0000)
committerAndrei Zmievski <andrei@php.net>
Sat, 21 Jul 2001 02:35:13 +0000 (02:35 +0000)
being done.

Zend/zend_compile.c

index 611e47534f95b80efbaa8872d6a0ff3cbfc1610b..b586049b57dc497a6bad3e443e6aba9ddefc8c87 100644 (file)
@@ -1543,6 +1543,10 @@ void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name
        zend_hash_init(&CG(class_entry).function_table, 10, NULL, ZEND_FUNCTION_DTOR, 0);
        zend_hash_init(&CG(class_entry).default_properties, 10, NULL, ZVAL_PTR_DTOR, 0);
 
+       CG(class_entry).handle_function_call = NULL;
+       CG(class_entry).handle_property_set = NULL;
+       CG(class_entry).handle_property_get = NULL;
+
        /* code for inheritance from parent class */
        if (parent_class_name) {
                zend_class_entry *parent_class;
@@ -1560,6 +1564,11 @@ void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name
                        /* copy default properties */
                        zend_hash_copy(&CG(class_entry).default_properties, &parent_class->default_properties, (copy_ctor_func_t) zval_add_ref, (void *) &tmp, sizeof(zval *));
 
+                       /* copy overloaded handlers */
+                       CG(class_entry).handle_function_call = parent_class->handle_function_call;
+                       CG(class_entry).handle_property_get  = parent_class->handle_property_get;
+                       CG(class_entry).handle_property_set  = parent_class->handle_property_set;
+
                        CG(class_entry).parent = parent_class;
 
                        zval_dtor(&parent_class_name->u.constant);
@@ -1571,10 +1580,6 @@ void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name
                CG(class_entry).parent = NULL;
        }
 
-       CG(class_entry).handle_function_call = NULL;
-       CG(class_entry).handle_property_set = NULL;
-       CG(class_entry).handle_property_get = NULL;
-
        opline->opcode = ZEND_DECLARE_FUNCTION_OR_CLASS;
        opline->op1.op_type = IS_CONST;
        build_runtime_defined_function_key(&opline->op1.u.constant, &class_name->u.constant, opline CLS_CC);