diff options
author | Dmitry Stogov <dmitry@zend.com> | 2019-04-15 13:19:39 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2019-04-15 13:19:39 +0300 |
commit | 150c5e04e9c9062144324e7ce6440184eb38725e (patch) | |
tree | 137ecc0b88ad56b669cd964e3ba4b5b1bb255fba /Zend/zend_execute.c | |
parent | 49b97af4310a5b7db7a2f4c1150866305ac8dcd9 (diff) | |
parent | cb3cfc9ff8d2afabc00f7f2aa2751d205d889a31 (diff) | |
download | php-git-150c5e04e9c9062144324e7ce6440184eb38725e.tar.gz |
Merge branch 'PHP-7.4'
* PHP-7.4:
Removed tests that always (or almost always) true
Diffstat (limited to 'Zend/zend_execute.c')
-rw-r--r-- | Zend/zend_execute.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index 3877981ad0..7148957a6c 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1128,6 +1128,41 @@ static zend_always_inline int zend_verify_arg_type(zend_function *zf, uint32_t a return 1; } +static zend_always_inline int zend_verify_recv_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot) +{ + zend_arg_info *cur_arg_info = &zf->common.arg_info[arg_num-1]; + zend_class_entry *ce; + + ZEND_ASSERT(arg_num <= zf->common.num_args); + cur_arg_info = &zf->common.arg_info[arg_num-1]; + + ce = NULL; + if (UNEXPECTED(!zend_check_type(cur_arg_info->type, arg, &ce, cache_slot, default_value, zf->common.scope, 0))) { + zend_verify_arg_error(zf, cur_arg_info, arg_num, ce, arg); + return 0; + } + + return 1; +} + +static zend_always_inline int zend_verify_variadic_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot) +{ + zend_arg_info *cur_arg_info; + zend_class_entry *ce; + + ZEND_ASSERT(arg_num > zf->common.num_args); + ZEND_ASSERT(zf->common.fn_flags & ZEND_ACC_VARIADIC); + cur_arg_info = &zf->common.arg_info[zf->common.num_args]; + + ce = NULL; + if (UNEXPECTED(!zend_check_type(cur_arg_info->type, arg, &ce, cache_slot, default_value, zf->common.scope, 0))) { + zend_verify_arg_error(zf, cur_arg_info, arg_num, ce, arg); + return 0; + } + + return 1; +} + static zend_never_inline int zend_verify_internal_arg_types(zend_function *fbc, zend_execute_data *call) { uint32_t i; |