Skip to content

Commit a32f130

Browse files
committed
Merge branch 'PHP-7.4'
2 parents 7c1bc91 + bea832c commit a32f130

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

Zend/zend_compile.c

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5456,10 +5456,6 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
54565456
op_array->required_num_args = i + 1;
54575457
}
54585458

5459-
opline = zend_emit_op(NULL, opcode, NULL, &default_node);
5460-
SET_NODE(opline->result, &var_node);
5461-
opline->op1.num = i + 1;
5462-
54635459
arg_info = &arg_infos[i];
54645460
arg_info->name = zend_string_copy(name);
54655461
arg_info->pass_by_reference = is_ref;
@@ -5490,9 +5486,15 @@ void zend_compile_params(zend_ast *ast, zend_ast *return_type_ast) /* {{{ */
54905486
zend_get_type_by_const(default_type),
54915487
ZSTR_VAL(name), ZSTR_VAL(type_str));
54925488
}
5489+
}
54935490

5491+
opline = zend_emit_op(NULL, opcode, NULL, &default_node);
5492+
SET_NODE(opline->result, &var_node);
5493+
opline->op1.num = i + 1;
5494+
5495+
if (type_ast) {
54945496
/* Allocate cache slot to speed-up run-time class resolution */
5495-
if (is_class) {
5497+
if (ZEND_TYPE_IS_CLASS(arg_info->type)) {
54965498
opline->extended_value = zend_alloc_cache_slot();
54975499
}
54985500
}

Zend/zend_vm_def.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5114,15 +5114,17 @@ ZEND_VM_HOT_HANDLER(64, ZEND_RECV_INIT, NUM, CONST, CACHE_SLOT)
51145114
ZVAL_COPY_VALUE(cache_val, param);
51155115
}
51165116
}
5117+
ZEND_VM_C_GOTO(recv_init_check_type);
51175118
} else {
51185119
ZVAL_COPY(param, default_value);
51195120
}
5120-
}
5121-
5122-
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
5123-
SAVE_OPLINE();
5124-
if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
5125-
HANDLE_EXCEPTION();
5121+
} else {
5122+
ZEND_VM_C_LABEL(recv_init_check_type):
5123+
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
5124+
SAVE_OPLINE();
5125+
if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
5126+
HANDLE_EXCEPTION();
5127+
}
51265128
}
51275129
}
51285130

Zend/zend_vm_execute.h

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2970,15 +2970,17 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CON
29702970
ZVAL_COPY_VALUE(cache_val, param);
29712971
}
29722972
}
2973+
goto recv_init_check_type;
29732974
} else {
29742975
ZVAL_COPY(param, default_value);
29752976
}
2976-
}
2977-
2978-
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
2979-
SAVE_OPLINE();
2980-
if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
2981-
HANDLE_EXCEPTION();
2977+
} else {
2978+
recv_init_check_type:
2979+
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
2980+
SAVE_OPLINE();
2981+
if (UNEXPECTED(!zend_verify_recv_arg_type(EX(func), arg_num, param, CACHE_ADDR(opline->extended_value)))) {
2982+
HANDLE_EXCEPTION();
2983+
}
29822984
}
29832985
}
29842986

0 commit comments

Comments
 (0)