diff options
author | Dmitry Stogov <dmitry@zend.com> | 2014-11-25 15:40:08 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2014-11-25 15:40:08 +0300 |
commit | 83ce1d9a785eac447145099d0f501212cbc0f786 (patch) | |
tree | ce99984815c490bd8d656b9774aa67b4ebb58e3a | |
parent | 0e3771b63150d1cde7883d21fc7a3c8c99cdde46 (diff) | |
download | php-git-83ce1d9a785eac447145099d0f501212cbc0f786.tar.gz |
Revert "Merge remote-tracking branch 'origin/PHP-5.6'"
This reverts commit 38229d13d14bb0bda736d52a9a4f25c121445692, reversing
changes made to 77f172725a37c8ddee750bf6970529a1570fbc86.
-rw-r--r-- | Zend/zend_compile.c | 14 | ||||
-rw-r--r-- | Zend/zend_execute.c | 18 | ||||
-rw-r--r-- | Zend/zend_vm_def.h | 25 | ||||
-rw-r--r-- | Zend/zend_vm_execute.h | 25 |
4 files changed, 25 insertions, 57 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index ee3aa75ad1..d15b85fc0b 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3831,15 +3831,11 @@ void zend_compile_params(zend_ast *ast TSRMLS_DC) /* {{{ */ arg_info->class_name_len = 0; if (type_ast) { - zend_bool has_null_default = 0; - - if (default_ast) { - if (!(has_null_default = (Z_TYPE(default_node.u.constant) == IS_NULL || (Z_TYPE(default_node.u.constant) == IS_CONSTANT && strcasecmp(Z_STRVAL(default_node.u.constant), "NULL") == 0)))) { - if (Z_OPT_CONSTANT(default_node.u.constant)) { - has_null_default = 2; - } - } - } + zend_bool has_null_default = default_ast + && (Z_TYPE(default_node.u.constant) == IS_NULL + || (Z_TYPE(default_node.u.constant) == IS_CONSTANT + && strcasecmp(Z_STRVAL(default_node.u.constant), "NULL") == 0) + || Z_TYPE(default_node.u.constant) == IS_CONSTANT_AST); // ??? op_array->fn_flags |= ZEND_ACC_HAS_TYPE_HINTS; arg_info->allow_null = has_null_default; diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 5274f100e1..d6f551bcdf 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -574,17 +574,7 @@ ZEND_API void zend_verify_arg_error(int error_type, const zend_function *zf, uin } } -static inline int zend_arg_allows_null(zend_bool allow_null, zval *default_value TSRMLS_DC) -{ - if (allow_null < 2 || !default_value) { - return allow_null; - } - - /* assuming update_constant_ex done before */ - return Z_TYPE_P(default_value) == IS_NULL; -} - -static void zend_verify_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *defaultval TSRMLS_DC) +static void zend_verify_arg_type(zend_function *zf, uint32_t arg_num, zval *arg TSRMLS_DC) { zend_arg_info *cur_arg_info; char *need_msg; @@ -611,18 +601,18 @@ static void zend_verify_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, if (!ce || !instanceof_function(Z_OBJCE_P(arg), ce TSRMLS_CC)) { zend_verify_arg_error(E_RECOVERABLE_ERROR, zf, arg_num, need_msg, class_name, "instance of ", Z_OBJCE_P(arg)->name->val, arg TSRMLS_CC); } - } else if (Z_TYPE_P(arg) != IS_NULL || !zend_arg_allows_null(cur_arg_info->allow_null, defaultval TSRMLS_CC)) { + } else if (Z_TYPE_P(arg) != IS_NULL || !cur_arg_info->allow_null) { need_msg = zend_verify_arg_class_kind(cur_arg_info, &class_name, &ce TSRMLS_CC); zend_verify_arg_error(E_RECOVERABLE_ERROR, zf, arg_num, need_msg, class_name, zend_zval_type_name(arg), "", arg TSRMLS_CC); } } else if (cur_arg_info->type_hint) { if (cur_arg_info->type_hint == IS_ARRAY) { ZVAL_DEREF(arg); - if (Z_TYPE_P(arg) != IS_ARRAY && (Z_TYPE_P(arg) != IS_NULL || !zend_arg_allows_null(cur_arg_info->allow_null, defaultval TSRMLS_CC))) { + if (Z_TYPE_P(arg) != IS_ARRAY && (Z_TYPE_P(arg) != IS_NULL || !cur_arg_info->allow_null)) { zend_verify_arg_error(E_RECOVERABLE_ERROR, zf, arg_num, "be of the type array", "", zend_zval_type_name(arg), "", arg TSRMLS_CC); } } else if (cur_arg_info->type_hint == IS_CALLABLE) { - if (!zend_is_callable(arg, IS_CALLABLE_CHECK_SILENT, NULL TSRMLS_CC) && (Z_TYPE_P(arg) != IS_NULL || !zend_arg_allows_null(cur_arg_info->allow_null, defaultval TSRMLS_CC))) { + if (!zend_is_callable(arg, IS_CALLABLE_CHECK_SILENT, NULL TSRMLS_CC) && (Z_TYPE_P(arg) != IS_NULL || !cur_arg_info->allow_null)) { zend_verify_arg_error(E_RECOVERABLE_ERROR, zf, arg_num, "be callable", "", zend_zval_type_name(arg), "", arg TSRMLS_CC); } #if ZEND_DEBUG diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 95968d8ac6..ec9841c0f2 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2675,7 +2675,7 @@ ZEND_VM_HANDLER(60, ZEND_DO_FCALL, ANY, ANY) zval *p = ZEND_CALL_ARG(call, 1); for (i = 0; i < call->num_args; ++i) { - zend_verify_arg_type(fbc, i + 1, p, NULL TSRMLS_CC); + zend_verify_arg_type(fbc, i + 1, p TSRMLS_CC); p++; } if (UNEXPECTED(EG(exception) != NULL)) { @@ -3526,7 +3526,7 @@ ZEND_VM_HANDLER(63, ZEND_RECV, ANY, ANY) } 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, NULL TSRMLS_CC); + zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC); CHECK_EXCEPTION(); } @@ -3537,20 +3537,15 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST) { USE_OPLINE uint32_t arg_num = opline->op1.num; - zval *param, default_val = {{0}}; + zval *param; 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)) { - if (Z_TYPE(default_val) != IS_UNDEF) { - *param = default_val; + ZVAL_COPY_VALUE(param, opline->op2.zv); + if (Z_OPT_CONSTANT_P(param)) { + zval_update_constant(param, 0 TSRMLS_CC); } 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); @@ -3559,11 +3554,7 @@ ZEND_VM_HANDLER(64, ZEND_RECV_INIT, ANY, CONST) } if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) { - 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); + zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC); } CHECK_EXCEPTION(); @@ -3588,7 +3579,7 @@ ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, ANY, ANY) 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, NULL TSRMLS_CC); + zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC); zend_hash_next_index_insert_new(Z_ARRVAL_P(params), param); if (Z_REFCOUNTED_P(param)) Z_ADDREF_P(param); param++; diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index cd4a91f27a..9ec7a83334 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, NULL TSRMLS_CC); + zend_verify_arg_type(fbc, i + 1, p 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, NULL TSRMLS_CC); + zend_verify_arg_type(EX(func), arg_num, param 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, NULL TSRMLS_CC); + zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC); zend_hash_next_index_insert_new(Z_ARRVAL_P(params), param); if (Z_REFCOUNTED_P(param)) Z_ADDREF_P(param); param++; @@ -1645,20 +1645,15 @@ static int ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ { USE_OPLINE uint32_t arg_num = opline->op1.num; - zval *param, default_val = {{0}}; + zval *param; 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)) { - if (Z_TYPE(default_val) != IS_UNDEF) { - *param = default_val; + ZVAL_COPY_VALUE(param, opline->op2.zv); + if (Z_OPT_CONSTANT_P(param)) { + zval_update_constant(param, 0 TSRMLS_CC); } 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); @@ -1667,11 +1662,7 @@ 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, 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); + zend_verify_arg_type(EX(func), arg_num, param TSRMLS_CC); } CHECK_EXCEPTION(); |