projects
/
m6w6
/
ext-psi
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
|
github
raw
|
inline
| side by side
ffi: improve support for functions returning arrays
[m6w6/ext-psi]
/
src
/
marshal.c
diff --git
a/src/marshal.c
b/src/marshal.c
index d48cb8bd28bd5144ea728bbc769292340c22a47a..c7651f6c023243b1b0c4de855aebd921713291d7 100644
(file)
--- a/
src/marshal.c
+++ b/
src/marshal.c
@@
-526,7
+526,7
@@
void psi_set_to_string(zval *return_value, struct psi_set_exp *set, impl_val *re
impl_val *ptr = deref_impl_val(ret_val, var);
char *str;
impl_val *ptr = deref_impl_val(ret_val, var);
char *str;
- if (var->arg->var->array_size) {
+ if (var->arg->var->array_size
&& var->arg->var->pointer_level == 1
) {
str = (char *) ptr;
} else {
str = ptr->ptr;
str = (char *) ptr;
} else {
str = ptr->ptr;
@@
-689,8
+689,8
@@
void psi_set_to_array_counted(zval *return_value, struct psi_set_exp *set, impl_
count = psi_num_exp_get_long(sub_exp->data.num, frame, NULL);
psi_plist_get(set->inner, 1, &sub_exp);
count = psi_num_exp_get_long(sub_exp->data.num, frame, NULL);
psi_plist_get(set->inner, 1, &sub_exp);
- for (ptr = (char *) ret_val; 0 < count--; ptr += size) {
size = psi_decl_var_get_size(psi_set_exp_get_decl_var(sub_exp));
size = psi_decl_var_get_size(psi_set_exp_get_decl_var(sub_exp));
+ for (ptr = (char *) ret_val; 0 < count--; ptr += size) {
zval ele;
ZVAL_NULL(&ele);
zval ele;
ZVAL_NULL(&ele);