Skip to content

Commit a183f10

Browse files
committed
perf(zend): lazy lc_name in generic-scope lookup, drop redundant push bool
Signed-off-by: azjezz <azjezz@protonmail.com>
1 parent 08265fc commit a183f10

1 file changed

Lines changed: 19 additions & 11 deletions

File tree

Zend/zend_compile.c

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -470,26 +470,36 @@ static void zend_generic_scope_pop(void) /* {{{ */
470470
static 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

Comments
 (0)