Skip to content

Commit b3a6425

Browse files
committed
Remove ZEND_SEND_EXPLICIT_VAL
1 parent fa9c737 commit b3a6425

11 files changed

+556
-1264
lines changed

Zend/Optimizer/optimize_func_calls.c

-11
Original file line numberDiff line numberDiff line change
@@ -347,17 +347,6 @@ void zend_optimize_func_calls(zend_op_array *op_array, zend_optimizer_ctx *ctx)
347347
}
348348
}
349349
break;
350-
case ZEND_SEND_EXPLICIT_VAL:
351-
if (call_stack[call - 1].func) {
352-
if (!ARG_MUST_BE_SENT_BY_REF(call_stack[call - 1].func, opline->op2.num)) {
353-
if (opline->op1_type & (IS_CONST|IS_TMP_VAR)) {
354-
opline->opcode = ZEND_SEND_VAL;
355-
} else {
356-
opline->opcode = ZEND_SEND_VAR;
357-
}
358-
}
359-
}
360-
break;
361350
case ZEND_SEND_UNPACK:
362351
case ZEND_SEND_USER:
363352
case ZEND_SEND_ARRAY:

Zend/Optimizer/zend_call_graph.c

-1
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,6 @@ ZEND_API void zend_analyze_calls(zend_arena **arena, zend_script *script, uint32
139139
case ZEND_SEND_VAR_EX:
140140
case ZEND_SEND_FUNC_ARG:
141141
case ZEND_SEND_REF:
142-
case ZEND_SEND_EXPLICIT_VAL:
143142
case ZEND_SEND_EXPLICIT_REF:
144143
case ZEND_SEND_EXPLICIT_REF_FUNC:
145144
case ZEND_SEND_VAR_NO_REF:

Zend/tests/explicitSendByRef/requiredExplicitSendByRef.phpt

-140
This file was deleted.

Zend/zend_compile.c

-24
Original file line numberDiff line numberDiff line change
@@ -388,7 +388,6 @@ void zend_file_context_begin(zend_file_context *prev_context) /* {{{ */
388388
FC(in_namespace) = 0;
389389
FC(has_bracketed_namespaces) = 0;
390390
FC(declarables).ticks = 0;
391-
FC(declarables).require_explicit_send_by_ref = 0;
392391
zend_hash_init(&FC(seen_symbols), 8, NULL, NULL, 0);
393392
}
394393
/* }}} */
@@ -3769,20 +3768,6 @@ static uint32_t zend_compile_args(
37693768
} else {
37703769
opcode = fbc ? ZEND_SEND_REF : ZEND_SEND_EXPLICIT_REF;
37713770
}
3772-
} else if (FC(declarables).require_explicit_send_by_ref) {
3773-
zend_compile_expr(&arg_node, arg);
3774-
if (fbc) {
3775-
if (ARG_MUST_BE_SENT_BY_REF(fbc, arg_num)) {
3776-
/* Delay error until runtime */
3777-
opcode = ZEND_SEND_EXPLICIT_VAL;
3778-
} else if (arg_node.op_type & (IS_CONST|IS_TMP_VAR)) {
3779-
opcode = ZEND_SEND_VAL;
3780-
} else {
3781-
opcode = ZEND_SEND_VAR;
3782-
}
3783-
} else {
3784-
opcode = ZEND_SEND_EXPLICIT_VAL;
3785-
}
37863771
} else if (zend_is_call(arg) || is_globals_fetch(arg)) {
37873772
/* Treat passing of $GLOBALS the same as passing a call.
37883773
* This will error at runtime if the argument is by-ref. */
@@ -6617,15 +6602,6 @@ static void zend_compile_declare(zend_ast *ast) /* {{{ */
66176602
if (Z_LVAL(value_zv) == 1) {
66186603
CG(active_op_array)->fn_flags |= ZEND_ACC_STRICT_TYPES;
66196604
}
6620-
} else if (zend_string_equals_literal_ci(name, "require_explicit_send_by_ref")) {
6621-
zval value_zv;
6622-
zend_const_expr_to_zval(&value_zv, value_ast_ptr, /* allow_dynamic */ false);
6623-
if (Z_TYPE(value_zv) != IS_LONG || (Z_LVAL(value_zv) != 0 && Z_LVAL(value_zv) != 1)) {
6624-
zend_error_noreturn(E_COMPILE_ERROR,
6625-
"require_explicit_send_by_ref declaration must have 0 or 1 as its value");
6626-
}
6627-
6628-
FC(declarables).require_explicit_send_by_ref = Z_LVAL(value_zv);
66296605
} else {
66306606
zend_error(E_COMPILE_WARNING, "Unsupported declare '%s'", ZSTR_VAL(name));
66316607
}

Zend/zend_compile.h

-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ static zend_always_inline znode *zend_ast_get_znode(zend_ast *ast) {
103103

104104
typedef struct _zend_declarables {
105105
zend_long ticks;
106-
bool require_explicit_send_by_ref;
107106
} zend_declarables;
108107

109108
/* Compilation context that is different for each file, but shared between op arrays. */

Zend/zend_execute.c

-1
Original file line numberDiff line numberDiff line change
@@ -4394,7 +4394,6 @@ static void cleanup_unfinished_calls(zend_execute_data *execute_data, uint32_t o
43944394
case ZEND_SEND_VAR_NO_REF:
43954395
case ZEND_SEND_VAR_NO_REF_EX:
43964396
case ZEND_SEND_USER:
4397-
case ZEND_SEND_EXPLICIT_VAL:
43984397
case ZEND_SEND_EXPLICIT_REF:
43994398
case ZEND_SEND_EXPLICIT_REF_FUNC:
44004399
if (level == 0) {

Zend/zend_vm_def.h

-51
Original file line numberDiff line numberDiff line change
@@ -5027,57 +5027,6 @@ ZEND_VM_C_LABEL(invalid_send_ref):
50275027
ZEND_VM_NEXT_OPCODE();
50285028
}
50295029

5030-
ZEND_VM_HANDLER(211, ZEND_SEND_EXPLICIT_VAL, CONST|TMP|VAR|CV, NUM, SPEC(QUICK_ARG))
5031-
{
5032-
USE_OPLINE
5033-
zval *value, *arg;
5034-
uint32_t arg_num = opline->op2.num;
5035-
5036-
arg = ZEND_CALL_VAR(EX(call), opline->result.var);
5037-
5038-
if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) {
5039-
if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
5040-
ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper, _arg_num, arg_num, _arg, arg);
5041-
}
5042-
} else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) {
5043-
ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper, _arg_num, arg_num, _arg, arg);
5044-
}
5045-
5046-
value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R);
5047-
if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(value) == IS_UNDEF)) {
5048-
SAVE_OPLINE();
5049-
ZVAL_UNDEFINED_OP1();
5050-
ZVAL_NULL(arg);
5051-
ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION();
5052-
}
5053-
5054-
if (OP1_TYPE == IS_CV) {
5055-
ZVAL_COPY_DEREF(arg, value);
5056-
} else if (OP1_TYPE == IS_TMP_VAR) {
5057-
ZVAL_COPY_VALUE(arg, value);
5058-
} else if (OP1_TYPE == IS_VAR) {
5059-
if (UNEXPECTED(Z_ISREF_P(value))) {
5060-
zend_refcounted *ref = Z_COUNTED_P(value);
5061-
5062-
value = Z_REFVAL_P(value);
5063-
ZVAL_COPY_VALUE(arg, value);
5064-
if (UNEXPECTED(GC_DELREF(ref) == 0)) {
5065-
efree_size(ref, sizeof(zend_reference));
5066-
} else if (Z_OPT_REFCOUNTED_P(arg)) {
5067-
Z_ADDREF_P(arg);
5068-
}
5069-
} else {
5070-
ZVAL_COPY_VALUE(arg, value);
5071-
}
5072-
} else { /* CONST */
5073-
ZVAL_COPY_VALUE(arg, value);
5074-
if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) {
5075-
Z_ADDREF_P(arg);
5076-
}
5077-
}
5078-
ZEND_VM_NEXT_OPCODE();
5079-
}
5080-
50815030
ZEND_VM_HOT_SEND_HANDLER(66, ZEND_SEND_VAR_EX, VAR|CV, CONST|UNUSED|NUM, SPEC(QUICK_ARG))
50825031
{
50835032
USE_OPLINE

0 commit comments

Comments
 (0)