@@ -74,6 +74,7 @@ void zend_init_compiler_data_structures(CLS_D)
74
74
zend_stack_init (& CG (object_stack ));
75
75
zend_stack_init (& CG (declare_stack ));
76
76
CG (active_class_entry ) = NULL ;
77
+ CG (active_ce_parent_class_name ).value .str .val = NULL ;
77
78
zend_llist_init (& CG (list_llist ), sizeof (list_llist_element ), NULL , 0 );
78
79
zend_llist_init (& CG (dimension_llist ), sizeof (int ), NULL , 0 );
79
80
CG (handle_op_arrays ) = 1 ;
@@ -883,11 +884,10 @@ void zend_do_begin_class_member_function_call(znode *class_name, znode *function
883
884
zend_str_tolower (class_name -> u .constant .value .str .val , class_name -> u .constant .value .str .len );
884
885
if ((class_name -> u .constant .value .str .len == sizeof ("parent" )- 1 )
885
886
&& !memcmp (class_name -> u .constant .value .str .val , "parent" , sizeof ("parent" )- 1 )
886
- && CG (active_class_entry )
887
- && CG (active_class_entry )-> parent ) {
887
+ && CG (active_ce_parent_class_name ).value .str .val ) {
888
888
efree (class_name -> u .constant .value .str .val );
889
- class_name -> u .constant .value .str .len = CG (active_class_entry ) -> parent -> name_length ;
890
- class_name -> u .constant .value .str .val = estrndup (CG (active_class_entry ) -> parent -> name , class_name -> u .constant .value .str .len );
889
+ class_name -> u .constant .value .str .len = CG (active_ce_parent_class_name ). value . str . len ;
890
+ class_name -> u .constant .value .str .val = estrndup (CG (active_ce_parent_class_name ). value . str . val , class_name -> u .constant .value .str .len );
891
891
}
892
892
opline -> op1 = * class_name ;
893
893
opline -> op2 = * function_name ;
@@ -1547,6 +1547,8 @@ void zend_do_begin_class_declaration(znode *class_name, znode *parent_class_name
1547
1547
zval * tmp ;
1548
1548
1549
1549
zend_str_tolower (parent_class_name -> u .constant .value .str .val , parent_class_name -> u .constant .value .str .len );
1550
+ CG (active_ce_parent_class_name ).value .str .val = estrndup (parent_class_name -> u .constant .value .str .val , parent_class_name -> u .constant .value .str .len );
1551
+ CG (active_ce_parent_class_name ).value .str .len = parent_class_name -> u .constant .value .str .len ;
1550
1552
1551
1553
if (zend_hash_find (CG (class_table ), parent_class_name -> u .constant .value .str .val , parent_class_name -> u .constant .value .str .len + 1 , (void * * ) & parent_class )== SUCCESS ) {
1552
1554
/* copy functions */
@@ -1605,6 +1607,10 @@ void zend_do_end_class_declaration(CLS_D)
1605
1607
{
1606
1608
do_inherit_parent_constructor (CG (active_class_entry ));
1607
1609
CG (active_class_entry ) = NULL ;
1610
+ if (CG (active_ce_parent_class_name ).value .str .val ) {
1611
+ efree (CG (active_ce_parent_class_name ).value .str .val );
1612
+ CG (active_ce_parent_class_name ).value .str .val = NULL ;
1613
+ }
1608
1614
}
1609
1615
1610
1616
0 commit comments