max_num_args = -1;
}
- if (num_args < min_num_args || (num_args > max_num_args && max_num_args > 0)) {
+ if (num_args < min_num_args || (num_args > max_num_args && max_num_args >= 0)) {
if (!(flags & ZEND_PARSE_PARAMS_QUIET)) {
zend_function *active_function = EG(current_execute_data)->func;
const char *class_name = active_function->common.scope ? ZSTR_VAL(active_function->common.scope->name) : "";
- zend_bool throw_exception =
- ZEND_ARG_USES_STRICT_TYPES() || (flags & ZEND_PARSE_PARAMS_THROW);
+ zend_bool throw_exception = ZEND_ARG_USES_STRICT_TYPES() || (flags & ZEND_PARSE_PARAMS_THROW);
zend_internal_type_error(throw_exception, "%s%s%s() expects %s %d parameter%s, %d given",
class_name,
class_name[0] ? "::" : "",
}
/* }}} */
-#define RETURN_IF_ZERO_ARGS(num_args, type_spec, flags) do { \
- int __num_args = (num_args); \
- if (0 == (type_spec)[0] && 0 != __num_args && !(flags & ZEND_PARSE_PARAMS_QUIET)) { \
- const char *__space; \
- const char * __class_name = get_active_class_name(&__space); \
- zend_bool throw_exception = \
- ZEND_ARG_USES_STRICT_TYPES() || (flags & ZEND_PARSE_PARAMS_THROW); \
- zend_internal_type_error(throw_exception, \
- "%s%s%s() expects exactly 0 parameters, %d given", \
- __class_name, __space, get_active_function_name(), __num_args); \
- return FAILURE; \
- } \
-} while(0)
-
ZEND_API int zend_parse_parameters_ex(int flags, int num_args, const char *type_spec, ...) /* {{{ */
{
va_list va;
int retval;
- RETURN_IF_ZERO_ARGS(num_args, type_spec, flags);
-
va_start(va, type_spec);
retval = zend_parse_va_args(num_args, type_spec, &va, flags);
va_end(va);
int retval;
int flags = 0;
- RETURN_IF_ZERO_ARGS(num_args, type_spec, flags);
-
va_start(va, type_spec);
retval = zend_parse_va_args(num_args, type_spec, &va, flags);
va_end(va);
int retval;
int flags = ZEND_PARSE_PARAMS_THROW;
- RETURN_IF_ZERO_ARGS(num_args, type_spec, flags);
-
va_start(va, type_spec);
retval = zend_parse_va_args(num_args, type_spec, &va, flags);
va_end(va);
zend_bool is_method = EG(current_execute_data)->func->common.scope != NULL;
if (!is_method || !this_ptr || Z_TYPE_P(this_ptr) != IS_OBJECT) {
- RETURN_IF_ZERO_ARGS(num_args, p, flags);
-
va_start(va, type_spec);
retval = zend_parse_va_args(num_args, type_spec, &va, flags);
va_end(va);
} else {
p++;
- RETURN_IF_ZERO_ARGS(num_args, p, flags);
va_start(va, type_spec);
zend_class_entry *ce;
if (!this_ptr) {
- RETURN_IF_ZERO_ARGS(num_args, p, flags);
-
va_start(va, type_spec);
retval = zend_parse_va_args(num_args, type_spec, &va, flags);
va_end(va);
} else {
p++;
- RETURN_IF_ZERO_ARGS(num_args, p, flags);
-
va_start(va, type_spec);
object = va_arg(va, zval **);
/* internal function to efficiently copy parameters when executing __call() */
ZEND_API int zend_copy_parameters_array(int param_count, zval *argument_array);
-#define zend_get_parameters_array(ht, param_count, argument_array) \
+#define zend_get_parameters_array(ht, param_count, argument_array) \
_zend_get_parameters_array_ex(param_count, argument_array)
-#define zend_get_parameters_array_ex(param_count, argument_array) \
+#define zend_get_parameters_array_ex(param_count, argument_array) \
_zend_get_parameters_array_ex(param_count, argument_array)
-#define zend_parse_parameters_none() \
- zend_parse_parameters(ZEND_NUM_ARGS(), "")
+#define zend_parse_parameters_none() \
+ (EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : zend_parse_parameters(ZEND_NUM_ARGS(), ""))
/* Parameter parsing API -- andrei */