Fixed apply_func_args_t

This commit is contained in:
Xinchen Hui 2014-05-25 20:04:35 +08:00
parent 0175d994c0
commit bc357eaf3f
5 changed files with 19 additions and 18 deletions

View file

@ -1577,13 +1577,13 @@ ZEND_FUNCTION(restore_exception_handler)
} }
/* }}} */ /* }}} */
static int copy_class_or_interface_name(zend_class_entry **pce TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) static int copy_class_or_interface_name(zval *el TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key)
{ {
zend_class_entry *ce = (zend_class_entry *)Z_PTR_P(el);
zval *array = va_arg(args, zval *); zval *array = va_arg(args, zval *);
zend_uint mask = va_arg(args, zend_uint); zend_uint mask = va_arg(args, zend_uint);
zend_uint comply = va_arg(args, zend_uint); zend_uint comply = va_arg(args, zend_uint);
zend_uint comply_mask = (comply)? mask:0; zend_uint comply_mask = (comply)? mask:0;
zend_class_entry *ce = *pce;
if ((hash_key->key && hash_key->key->val[0] != 0) if ((hash_key->key && hash_key->key->val[0] != 0)
&& (comply_mask == (ce->ce_flags & mask))) { && (comply_mask == (ce->ce_flags & mask))) {
@ -1610,7 +1610,7 @@ ZEND_FUNCTION(get_declared_traits)
} }
array_init(return_value); array_init(return_value);
zend_hash_apply_with_arguments(EG(class_table) TSRMLS_CC, (apply_func_args_t) copy_class_or_interface_name, 3, return_value, mask, comply); zend_hash_apply_with_arguments(EG(class_table) TSRMLS_CC, copy_class_or_interface_name, 3, return_value, mask, comply);
} }
/* }}} */ /* }}} */
@ -1627,7 +1627,7 @@ ZEND_FUNCTION(get_declared_classes)
} }
array_init(return_value); array_init(return_value);
zend_hash_apply_with_arguments(EG(class_table) TSRMLS_CC, (apply_func_args_t) copy_class_or_interface_name, 3, return_value, mask, comply); zend_hash_apply_with_arguments(EG(class_table) TSRMLS_CC, copy_class_or_interface_name, 3, return_value, mask, comply);
} }
/* }}} */ /* }}} */
@ -1643,7 +1643,7 @@ ZEND_FUNCTION(get_declared_interfaces)
} }
array_init(return_value); array_init(return_value);
zend_hash_apply_with_arguments(EG(class_table) TSRMLS_CC, (apply_func_args_t) copy_class_or_interface_name, 3, return_value, mask, comply); zend_hash_apply_with_arguments(EG(class_table) TSRMLS_CC, copy_class_or_interface_name, 3, return_value, mask, comply);
} }
/* }}} */ /* }}} */
@ -1682,7 +1682,7 @@ ZEND_FUNCTION(get_defined_functions)
array_init(&user); array_init(&user);
array_init(return_value); array_init(return_value);
zend_hash_apply_with_arguments(EG(function_table) TSRMLS_CC, (apply_func_args_t) copy_function_name, 2, &internal, &user); zend_hash_apply_with_arguments(EG(function_table) TSRMLS_CC, copy_function_name, 2, &internal, &user);
ret = zend_hash_str_add(Z_ARRVAL_P(return_value), "internal", sizeof("internal")-1, &internal); ret = zend_hash_str_add(Z_ARRVAL_P(return_value), "internal", sizeof("internal")-1, &internal);

View file

@ -432,7 +432,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent
ALLOC_HASHTABLE(closure->func.op_array.static_variables); ALLOC_HASHTABLE(closure->func.op_array.static_variables);
zend_hash_init(closure->func.op_array.static_variables, zend_hash_num_elements(static_variables), NULL, ZVAL_PTR_DTOR, 0); zend_hash_init(closure->func.op_array.static_variables, zend_hash_num_elements(static_variables), NULL, ZVAL_PTR_DTOR, 0);
zend_hash_apply_with_arguments(static_variables TSRMLS_CC, (apply_func_args_t)zval_copy_static_var, 1, closure->func.op_array.static_variables); zend_hash_apply_with_arguments(static_variables TSRMLS_CC, zval_copy_static_var, 1, closure->func.op_array.static_variables);
} }
closure->func.op_array.run_time_cache = NULL; closure->func.op_array.run_time_cache = NULL;
(*closure->func.op_array.refcount)++; (*closure->func.op_array.refcount)++;

View file

@ -3727,7 +3727,7 @@ ZEND_API void zend_do_inherit_interfaces(zend_class_entry *ce, const zend_class_
zval_add_ref zval_add_ref
#endif #endif
static int do_inherit_class_constant(zval *zv TSRMLS_DC, int num_args, va_list args, const zend_hash_key *hash_key) /* {{{ */ static int do_inherit_class_constant(zval *zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
{ {
zend_class_entry *ce = va_arg(args, zend_class_entry *); zend_class_entry *ce = va_arg(args, zend_class_entry *);
zend_class_entry *parent_ce = va_arg(args, zend_class_entry *); zend_class_entry *parent_ce = va_arg(args, zend_class_entry *);
@ -3849,7 +3849,7 @@ ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent
zend_hash_merge_ex(&ce->properties_info, &parent_ce->properties_info, (ce->type & ZEND_INTERNAL_CLASS ? zend_duplicate_property_info_internal_zval : zend_duplicate_property_info_zval), (merge_checker_func_t) do_inherit_property_access_check, ce); zend_hash_merge_ex(&ce->properties_info, &parent_ce->properties_info, (ce->type & ZEND_INTERNAL_CLASS ? zend_duplicate_property_info_internal_zval : zend_duplicate_property_info_zval), (merge_checker_func_t) do_inherit_property_access_check, ce);
zend_hash_apply_with_arguments(&parent_ce->constants_table TSRMLS_CC, (apply_func_args_t)do_inherit_class_constant, 2, ce, parent_ce); zend_hash_apply_with_arguments(&parent_ce->constants_table TSRMLS_CC, do_inherit_class_constant, 2, ce, parent_ce);
zend_hash_merge_ex(&ce->function_table, &parent_ce->function_table, do_inherit_method, (merge_checker_func_t) do_inherit_method_check, ce); zend_hash_merge_ex(&ce->function_table, &parent_ce->function_table, do_inherit_method, (merge_checker_func_t) do_inherit_method_check, ce);
do_inherit_parent_constructor(ce); do_inherit_parent_constructor(ce);
@ -3879,7 +3879,7 @@ static zend_bool do_inherit_constant_check(HashTable *child_constants_table, zva
} }
/* }}} */ /* }}} */
static int do_interface_constant_check(zval *val TSRMLS_DC, int num_args, va_list args, const zend_hash_key *key) /* {{{ */ static int do_interface_constant_check(zval *val TSRMLS_DC, int num_args, va_list args, zend_hash_key *key) /* {{{ */
{ {
zend_class_entry **iface = va_arg(args, zend_class_entry**); zend_class_entry **iface = va_arg(args, zend_class_entry**);
@ -3889,7 +3889,7 @@ static int do_interface_constant_check(zval *val TSRMLS_DC, int num_args, va_lis
} }
/* }}} */ /* }}} */
static int do_inherit_iface_constant(zval *zv TSRMLS_DC, int num_args, va_list args, const zend_hash_key *hash_key) /* {{{ */ static int do_inherit_iface_constant(zval *zv TSRMLS_DC, int num_args, va_list args, zend_hash_key *hash_key) /* {{{ */
{ {
zend_class_entry *ce = va_arg(args, zend_class_entry *); zend_class_entry *ce = va_arg(args, zend_class_entry *);
zend_class_entry *iface = va_arg(args, zend_class_entry *); zend_class_entry *iface = va_arg(args, zend_class_entry *);
@ -3925,7 +3925,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
} }
if (ignore) { if (ignore) {
/* Check for attempt to redeclare interface constants */ /* Check for attempt to redeclare interface constants */
zend_hash_apply_with_arguments(&ce->constants_table TSRMLS_CC, (apply_func_args_t) do_interface_constant_check, 1, &iface); zend_hash_apply_with_arguments(&ce->constants_table TSRMLS_CC, do_interface_constant_check, 1, &iface);
} else { } else {
if (ce->num_interfaces >= current_iface_num) { if (ce->num_interfaces >= current_iface_num) {
if (ce->type == ZEND_INTERNAL_CLASS) { if (ce->type == ZEND_INTERNAL_CLASS) {
@ -3936,7 +3936,7 @@ ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry
} }
ce->interfaces[ce->num_interfaces++] = iface; ce->interfaces[ce->num_interfaces++] = iface;
zend_hash_apply_with_arguments(&iface->constants_table TSRMLS_CC, (apply_func_args_t)do_inherit_iface_constant, 2, ce, iface); zend_hash_apply_with_arguments(&iface->constants_table TSRMLS_CC, do_inherit_iface_constant, 2, ce, iface);
zend_hash_merge_ex(&ce->function_table, &iface->function_table, do_inherit_method, (merge_checker_func_t) do_inherit_method_check, ce); zend_hash_merge_ex(&ce->function_table, &iface->function_table, do_inherit_method, (merge_checker_func_t) do_inherit_method_check, ce);
do_implement_interface(ce, iface TSRMLS_CC); do_implement_interface(ce, iface TSRMLS_CC);

View file

@ -569,7 +569,7 @@ static int _build_trace_string(zval *frame TSRMLS_DC, int num_args, va_list args
if (tmp) { if (tmp) {
if (Z_TYPE_P(tmp) == IS_ARRAY) { if (Z_TYPE_P(tmp) == IS_ARRAY) {
int last_len = str->len; int last_len = str->len;
zend_hash_apply_with_arguments(Z_ARRVAL_P(tmp) TSRMLS_CC, (apply_func_args_t)_build_trace_args, 1, &str); zend_hash_apply_with_arguments(Z_ARRVAL_P(tmp) TSRMLS_CC, _build_trace_args, 1, &str);
if (last_len != str->len) { if (last_len != str->len) {
str->len -= 2; /* remove last ', ' */ str->len -= 2; /* remove last ', ' */
} }
@ -597,7 +597,7 @@ ZEND_METHOD(exception, getTraceAsString)
str = STR_ALLOC(0, 0); str = STR_ALLOC(0, 0);
trace = zend_read_property(default_exception_ce, getThis(), "trace", sizeof("trace")-1, 1 TSRMLS_CC); trace = zend_read_property(default_exception_ce, getThis(), "trace", sizeof("trace")-1, 1 TSRMLS_CC);
zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, (apply_func_args_t)_build_trace_string, 2, &str, &num); zend_hash_apply_with_arguments(Z_ARRVAL_P(trace) TSRMLS_CC, _build_trace_string, 2, &str, &num);
len = sprintf(s_tmp, "#%d {main}", num); len = sprintf(s_tmp, "#%d {main}", num);
TRACE_APPEND_STRL(s_tmp, len); TRACE_APPEND_STRL(s_tmp, len);

View file

@ -235,13 +235,14 @@ static zend_object *zend_generator_create(zend_class_entry *class_type TSRMLS_DC
} }
/* }}} */ /* }}} */
static void copy_closure_static_var(zval *var TSRMLS_DC, int num_args, va_list args, zend_hash_key *key) /* {{{ */ static int copy_closure_static_var(zval *var TSRMLS_DC, int num_args, va_list args, zend_hash_key *key) /* {{{ */
{ {
HashTable *target = va_arg(args, HashTable *); HashTable *target = va_arg(args, HashTable *);
SEPARATE_ZVAL_TO_MAKE_IS_REF(var); SEPARATE_ZVAL_TO_MAKE_IS_REF(var);
Z_ADDREF_P(var); Z_ADDREF_P(var);
zend_hash_update(target, key->key, var); zend_hash_update(target, key->key, var);
return 0;
} }
/* }}} */ /* }}} */
@ -272,8 +273,8 @@ ZEND_API void zend_generator_create_zval(zend_op_array *op_array, zval *return_v
); );
zend_hash_apply_with_arguments( zend_hash_apply_with_arguments(
op_array->static_variables TSRMLS_CC, op_array->static_variables TSRMLS_CC,
(apply_func_args_t) copy_closure_static_var, copy_closure_static_var, 1,
1, op_array_copy->static_variables op_array_copy->static_variables
); );
} }