summaryrefslogtreecommitdiff
path: root/Zend/zend_closures.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@php.net>2014-05-10 00:21:49 +0800
committerXinchen Hui <laruence@php.net>2014-05-10 00:21:49 +0800
commit88c550a7998d4af00767237b89f020ae3acac61b (patch)
tree5ff186b3072797bd03a1167c6d6e0c9b0d1e2140 /Zend/zend_closures.c
parente2890e3a0f3ea5a9ce4b9c8e9e78777f012a4b74 (diff)
downloadphp-git-88c550a7998d4af00767237b89f020ae3acac61b.tar.gz
Added vstrpprintf strpprintf to avoid duplicate string
(the function name maybe improvement)
Diffstat (limited to 'Zend/zend_closures.c')
-rw-r--r--Zend/zend_closures.c25
1 files changed, 11 insertions, 14 deletions
diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c
index 9d48dab9f2..1eae481829 100644
--- a/Zend/zend_closures.c
+++ b/Zend/zend_closures.c
@@ -313,23 +313,20 @@ static HashTable *zend_closure_get_debug_info(zval *object, int *is_temp TSRMLS_
array_init(&val);
for (i = 0; i < closure->func.common.num_args; i++) {
- char *name, *info;
- int name_len, info_len;
+ zend_string *name;
+ zval info;
if (arg_info->name) {
- name_len = zend_spprintf(&name, 0, "%s$%s",
- arg_info->pass_by_reference ? "&" : "",
- arg_info->name);
+ name = zend_strpprintf(0, "%s$%s",
+ arg_info->pass_by_reference ? "&" : "",
+ arg_info->name);
} else {
- name_len = zend_spprintf(&name, 0, "%s$param%d",
- arg_info->pass_by_reference ? "&" : "",
- i + 1);
+ name = zend_strpprintf(0, "%s$param%d",
+ arg_info->pass_by_reference ? "&" : "",
+ i + 1);
}
- info_len = zend_spprintf(&info, 0, "%s",
- i >= required ? "<optional>" : "<required>");
- // TODO: avoid reallocation ???
- add_assoc_stringl_ex(&val, name, name_len, info, info_len);
- efree(info);
- efree(name);
+ ZVAL_STR(&info, zend_strpprintf(0, "%s", i >= required ? "<optional>" : "<required>"));
+ zend_hash_update(Z_ARRVAL(val), name, &info);
+ STR_RELEASE(name);
arg_info++;
}
zend_hash_str_update(closure->debug_info, "parameter", sizeof("parameter")-1, &val);