@@ -470,26 +470,36 @@ static void zend_generic_scope_pop(void) /* {{{ */
470470static zend_generic_parameter * zend_generic_lookup_full (
471471 zend_string * name , zend_generic_origin * origin_out , uint32_t * index_out ) /* {{{ */
472472{
473- zend_string * lc_name = zend_string_tolower (name );
473+ zend_string * lc_name = NULL ;
474+ zend_generic_parameter * result = NULL ;
474475 for (zend_generic_scope_entry * e = CG (generic_scope ); e ; e = e -> outer ) {
475- if (e -> shadowing_classes && zend_hash_exists (e -> shadowing_classes , lc_name )) {
476- zend_string_release (lc_name );
477- return NULL ;
476+ if (e -> shadowing_classes ) {
477+ if (!lc_name ) {
478+ lc_name = zend_string_tolower (name );
479+ }
480+
481+ if (zend_hash_exists (e -> shadowing_classes , lc_name )) {
482+ goto done ;
483+ }
478484 }
479485
480486 zend_generic_parameter_list * params = e -> params ;
481487 for (uint32_t i = 0 ; i < e -> visible_count ; i ++ ) {
482488 if (zend_string_equals (params -> parameters [i ].name , name )) {
483489 if (origin_out ) * origin_out = e -> origin ;
484490 if (index_out ) * index_out = i ;
485- zend_string_release ( lc_name ) ;
486- return & params -> parameters [ i ] ;
491+ result = & params -> parameters [ i ] ;
492+ goto done ;
487493 }
488494 }
489495 }
490496
491- zend_string_release (lc_name );
492- return NULL ;
497+ done :
498+ if (lc_name ) {
499+ zend_string_release (lc_name );
500+ }
501+
502+ return result ;
493503}
494504/* }}} */
495505
@@ -9526,7 +9536,6 @@ static zend_op_array *zend_compile_func_decl_ex(
95269536 bool is_method = decl -> kind == ZEND_AST_METHOD ;
95279537 zend_string * lcname = NULL ;
95289538 bool is_hook = decl -> kind == ZEND_AST_PROPERTY_HOOK ;
9529- bool generic_scope_pushed = false;
95309539
95319540 zend_class_entry * orig_class_entry = CG (active_class_entry );
95329541 zend_op_array * orig_op_array = CG (active_op_array );
@@ -9632,7 +9641,6 @@ static zend_op_array *zend_compile_func_decl_ex(
96329641 if (generic_params_ast ) {
96339642 op_array -> generic_parameters = zend_compile_generic_type_parameter_list (generic_params_ast );
96349643 zend_generic_scope_push (op_array -> generic_parameters , ZEND_GENERIC_ORIGIN_FUNCTION_LIKE );
9635- generic_scope_pushed = true;
96369644 }
96379645
96389646 zend_compile_params (params_ast , return_type_ast ,
@@ -9718,7 +9726,7 @@ static zend_op_array *zend_compile_func_decl_ex(
97189726 zend_string_release_ex (lcname , 0 );
97199727 }
97209728
9721- if (generic_scope_pushed ) {
9729+ if (op_array -> generic_parameters ) {
97229730 zend_generic_scope_pop ();
97239731 }
97249732
0 commit comments