Skip to content

Commit 6317b8d

Browse files
committed
Simplify access to names
1 parent 1f7054a commit 6317b8d

1 file changed

Lines changed: 24 additions & 19 deletions

File tree

Zend/zend_partial.c

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -135,23 +135,28 @@ static zend_string *zp_get_param_name(zend_function *function, uint32_t arg_offs
135135
return zend_string_copy(function->common.arg_info[arg_offset].name);
136136
}
137137

138+
#define ZP_PARAM_NAME(names, offset) (names)[(offset)]
139+
#define ZP_VARIADIC_PARAM_NAME(names) (names)[argc]
140+
#define ZP_EXTRA_NAMED_PARAMS_LEXICAL_NAME(names) (names)[argc + uses_variadic_placeholder]
141+
#define ZP_FN_LEXICAL_NAME(names) (names)[argc + uses_variadic_placeholder + (extra_named_params != NULL)]
142+
138143
/* Assign a name for every variable that will be used in the generated closure,
139144
* including params and used vars. */
140145
static void zp_assign_names(zend_string **names, uint32_t num_names,
141146
uint32_t argc, zval *argv,
142-
zend_function *function, bool variadic_partial,
147+
zend_function *function, bool uses_variadic_placeholder,
143148
zend_array *extra_named_params)
144149
{
145150
/* Assign names for params. We never rename those. */
146151
for (uint32_t offset = 0; offset < MIN(argc, function->common.num_args); offset++) {
147152
if (Z_IS_PLACEHOLDER_P(&argv[offset])) {
148-
names[offset] = zp_get_param_name(function, offset);
153+
ZP_PARAM_NAME(names, offset) = zp_get_param_name(function, offset);
149154
}
150155
}
151156

152157
/* Assign name for the variadic param. Never renamed. */
153-
if (variadic_partial && (function->common.fn_flags & ZEND_ACC_VARIADIC)) {
154-
names[argc] = zp_get_param_name(function, function->common.num_args);
158+
if (uses_variadic_placeholder && (function->common.fn_flags & ZEND_ACC_VARIADIC)) {
159+
ZP_VARIADIC_PARAM_NAME(names) = zp_get_param_name(function, function->common.num_args);
155160
}
156161

157162
/* Assign names for placeholders that bind to the variadic param:
@@ -176,7 +181,7 @@ static void zp_assign_names(zend_string **names, uint32_t num_names,
176181
}
177182
zend_string_release(new_name);
178183
}
179-
names[offset] = new_name;
184+
ZP_PARAM_NAME(names, offset) = new_name;
180185
zend_string_release(orig_name);
181186
}
182187

@@ -194,7 +199,7 @@ static void zp_assign_names(zend_string **names, uint32_t num_names,
194199
new_name = zend_strpprintf_unchecked(0, "%S%" PRIu32, orig_name, n);
195200
n++;
196201
}
197-
names[offset] = new_name;
202+
ZP_PARAM_NAME(names, offset) = new_name;
198203
zend_string_release(orig_name);
199204
}
200205

@@ -207,7 +212,7 @@ static void zp_assign_names(zend_string **names, uint32_t num_names,
207212
n++;
208213
new_name = zend_strpprintf(0, "%s%" PRIu32, "extra_named_params", n);
209214
}
210-
names[argc + variadic_partial] = new_name;
215+
ZP_EXTRA_NAMED_PARAMS_LEXICAL_NAME(names) = new_name;
211216
}
212217

213218
/* Assign name for $fn */
@@ -219,7 +224,7 @@ static void zp_assign_names(zend_string **names, uint32_t num_names,
219224
n++;
220225
new_name = zend_strpprintf(0, "%s%" PRIu32, "fn", n);
221226
}
222-
names[argc + variadic_partial + (extra_named_params != NULL)] = new_name;
227+
ZP_FN_LEXICAL_NAME(names) = new_name;
223228
}
224229
}
225230

@@ -497,7 +502,7 @@ static zend_string *zp_pfa_name(const zend_op_array *declaring_op_array,
497502
static zend_ast *zp_compile_forwarding_call(
498503
zval *this_ptr, zend_function *function,
499504
uint32_t argc, zval *argv, zend_array *extra_named_params,
500-
zend_string **param_names, bool variadic_partial, uint32_t num_args,
505+
zend_string **param_names, bool uses_variadic_placeholder, uint32_t num_args,
501506
zend_class_entry *called_scope, zend_type return_type,
502507
bool forward_superfluous_args,
503508
zend_ast *stmts_ast)
@@ -542,19 +547,19 @@ static zend_ast *zp_compile_forwarding_call(
542547
args_ast = zend_ast_list_add(args_ast, default_value_ast);
543548
} else {
544549
args_ast = zend_ast_list_add(args_ast, zend_ast_create(ZEND_AST_VAR,
545-
zend_ast_create_zval_from_str(zend_string_copy(param_names[offset]))));
550+
zend_ast_create_zval_from_str(zend_string_copy(ZP_PARAM_NAME(param_names, offset)))));
546551
}
547552
}
548553
if (extra_named_params) {
549554
args_ast = zend_ast_list_add(args_ast, zend_ast_create(ZEND_AST_UNPACK,
550555
zend_ast_create(ZEND_AST_VAR,
551-
zend_ast_create_zval_from_str(zend_string_copy(param_names[argc + variadic_partial])))));
556+
zend_ast_create_zval_from_str(zend_string_copy(ZP_EXTRA_NAMED_PARAMS_LEXICAL_NAME(param_names))))));
552557
}
553-
if (variadic_partial) {
558+
if (uses_variadic_placeholder) {
554559
if (function->common.fn_flags & ZEND_ACC_VARIADIC) {
555560
args_ast = zend_ast_list_add(args_ast, zend_ast_create(ZEND_AST_UNPACK,
556561
zend_ast_create(ZEND_AST_VAR,
557-
zend_ast_create_zval_from_str(zend_string_copy(param_names[argc])))));
562+
zend_ast_create_zval_from_str(zend_string_copy(ZP_VARIADIC_PARAM_NAME(param_names))))));
558563
} else if (forward_superfluous_args) {
559564
/* When a '...' placeholder is used, and the underlying function is
560565
* not variadic, superfluous arguments are forwarded.
@@ -587,7 +592,7 @@ static zend_ast *zp_compile_forwarding_call(
587592
call_ast = zend_ast_create(ZEND_AST_CALL, func_name_ast, args_ast);
588593
} else if (function->common.fn_flags & ZEND_ACC_CLOSURE) {
589594
zend_ast *fn_ast = zend_ast_create(ZEND_AST_VAR,
590-
zend_ast_create_zval_from_str(zend_string_copy(param_names[argc + variadic_partial + (extra_named_params != NULL)])));
595+
zend_ast_create_zval_from_str(zend_string_copy(ZP_FN_LEXICAL_NAME(param_names))));
591596
call_ast = zend_ast_create(ZEND_AST_CALL, fn_ast, args_ast);
592597
} else if (Z_TYPE_P(this_ptr) == IS_OBJECT) {
593598
zend_ast *this_ast = zend_ast_create(ZEND_AST_VAR,
@@ -795,7 +800,7 @@ static zend_op_array *zp_compile(zval *this_ptr, zend_function *function,
795800
* do_closure_bind(). */
796801
if (function->common.fn_flags & ZEND_ACC_CLOSURE) {
797802
zend_ast *lexical_var_ast = zend_ast_create_zval_from_str(
798-
zend_string_copy(param_names[argc + uses_variadic_placeholder + (extra_named_params != NULL)]));
803+
zend_string_copy(ZP_FN_LEXICAL_NAME(param_names)));
799804
lexical_vars_ast = zend_ast_list_add(lexical_vars_ast, lexical_var_ast);
800805
}
801806

@@ -829,14 +834,14 @@ static zend_op_array *zp_compile(zval *this_ptr, zend_function *function,
829834
params[param_offset] = zend_ast_create_ex(ZEND_AST_PARAM,
830835
param_flags, param_type_ast,
831836
zend_ast_create_zval_from_str(
832-
zend_string_copy(param_names[offset])),
837+
zend_string_copy(ZP_PARAM_NAME(param_names, offset))),
833838
default_value_ast, attributes_ast, NULL, NULL);
834839

835840
} else if (!Z_ISUNDEF(argv[offset])) {
836841
// TODO: If the pre-bound parameter is a literal, it can be a
837842
// literal in the function body instead of a lexical var.
838843
zend_ast *lexical_var_ast = zend_ast_create_zval_from_str(
839-
zend_string_copy(param_names[offset]));
844+
zend_string_copy(ZP_PARAM_NAME(param_names, offset)));
840845
if (zp_arg_must_be_sent_by_ref(function, offset+1)) {
841846
lexical_var_ast->attr = ZEND_BIND_REF;
842847
}
@@ -852,7 +857,7 @@ static zend_op_array *zp_compile(zval *this_ptr, zend_function *function,
852857

853858
if (extra_named_params) {
854859
zend_ast *lexical_var_ast = zend_ast_create_zval_from_str(
855-
zend_string_copy(param_names[argc + uses_variadic_placeholder]));
860+
zend_string_copy(ZP_EXTRA_NAMED_PARAMS_LEXICAL_NAME(param_names)));
856861
lexical_vars_ast = zend_ast_list_add(lexical_vars_ast, lexical_var_ast);
857862
}
858863

@@ -870,7 +875,7 @@ static zend_op_array *zp_compile(zval *this_ptr, zend_function *function,
870875
params_ast = zend_ast_list_add(params_ast, zend_ast_create_ex(ZEND_AST_PARAM,
871876
param_flags, param_type_ast,
872877
zend_ast_create_zval_from_str(
873-
zend_string_copy(param_names[argc])),
878+
zend_string_copy(ZP_VARIADIC_PARAM_NAME(param_names))),
874879
NULL, attributes_ast, NULL, NULL));
875880
}
876881

0 commit comments

Comments
 (0)