summaryrefslogtreecommitdiff
path: root/Zend/zend_vm_execute.h
diff options
context:
space:
mode:
authorBob Weinand <bobwei9@hotmail.com>2014-11-23 23:50:47 +0100
committerBob Weinand <bobwei9@hotmail.com>2014-11-23 23:50:47 +0100
commit38229d13d14bb0bda736d52a9a4f25c121445692 (patch)
treef2107a9a06435d6e4186c4c7eb5ad517ce4d28b7 /Zend/zend_vm_execute.h
parent77f172725a37c8ddee750bf6970529a1570fbc86 (diff)
parent5ef138b0c7c4e9532e205f45c18a72aa1d279c24 (diff)
downloadphp-git-38229d13d14bb0bda736d52a9a4f25c121445692.tar.gz
Merge remote-tracking branch 'origin/PHP-5.6'
Conflicts: Zend/zend_compile.c Zend/zend_execute.c Zend/zend_vm_def.h Zend/zend_vm_execute.h
Diffstat (limited to 'Zend/zend_vm_execute.h')
-rw-r--r--Zend/zend_vm_execute.h25
1 files changed, 17 insertions, 8 deletions
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 2a8e901c57..074dbc2965 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -538,7 +538,7 @@ static int ZEND_FASTCALL ZEND_DO_FCALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
zval *p = ZEND_CALL_ARG(call, 1);
for (i = 0; i < call->num_args; ++i) {
- zend_verify_arg_type(fbc, i + 1, p TSRMLS_CC);
+ zend_verify_arg_type(fbc, i + 1, p, NULL TSRMLS_CC);
p++;
}
if (UNEXPECTED(EG(exception) != NULL)) {
@@ -978,7 +978,7 @@ static int ZEND_FASTCALL ZEND_RECV_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
} else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
zval *param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var TSRMLS_CC);
- zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC);
+ zend_verify_arg_type(EX(func), arg_num, param, NULL TSRMLS_CC);
CHECK_EXCEPTION();
}
@@ -1003,7 +1003,7 @@ static int ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_HANDLER(ZEND_OPCODE_HANDLER_AR
param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T);
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
do {
- zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC);
+ zend_verify_arg_type(EX(func), arg_num, param, NULL TSRMLS_CC);
zend_hash_next_index_insert_new(Z_ARRVAL_P(params), param);
if (Z_REFCOUNTED_P(param)) Z_ADDREF_P(param);
param++;
@@ -1645,15 +1645,20 @@ static int ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_
{
USE_OPLINE
uint32_t arg_num = opline->op1.num;
- zval *param;
+ zval *param, default_val = {{0}};
SAVE_OPLINE();
+ if (Z_OPT_CONSTANT_P(opline->op2.zv)) {
+ ZVAL_COPY_VALUE(&default_val, opline->op2.zv);
+ zval_update_constant(&default_val, 0 TSRMLS_CC);
+ }
+
param = _get_zval_ptr_cv_undef_BP_VAR_W(execute_data, opline->result.var TSRMLS_CC);
if (arg_num > EX(num_args)) {
- ZVAL_COPY_VALUE(param, opline->op2.zv);
- if (Z_OPT_CONSTANT_P(param)) {
- zval_update_constant(param, 0 TSRMLS_CC);
+ if (Z_TYPE(default_val) != IS_UNDEF) {
+ *param = default_val;
} else {
+ ZVAL_COPY_VALUE(param, opline->op2.zv);
/* IS_CONST can't be IS_OBJECT, IS_RESOURCE or IS_REFERENCE */
if (UNEXPECTED(Z_OPT_COPYABLE_P(param))) {
zval_copy_ctor_func(param);
@@ -1662,7 +1667,11 @@ static int ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_
}
if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) {
- zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC);
+ zend_verify_arg_type(EX(func), arg_num, param, Z_TYPE(default_val) == IS_UNDEF ? NULL : &default_val TSRMLS_CC);
+ }
+
+ if (Z_TYPE(default_val) != IS_UNDEF && arg_num <= EX(num_args)) {
+ zval_dtor(&default_val);
}
CHECK_EXCEPTION();