X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=src%2Fmarshal.c;h=c7651f6c023243b1b0c4de855aebd921713291d7;hb=9aeae2c241e303c537d8be18dd6c9f8776b2f044;hp=6473eca10a23b2e11021783d0e4d442ebd8811bb;hpb=c9384515a81cb64d345b299908b2852f51bb8e6e;p=m6w6%2Fext-psi diff --git a/src/marshal.c b/src/marshal.c index 6473eca..c7651f6 100644 --- a/src/marshal.c +++ b/src/marshal.c @@ -226,6 +226,7 @@ impl_val *psi_let_boolval(impl_val *tmp, struct psi_decl_arg *spec, token_t impl return psi_val_boolval(tmp, real_type, boolval); } +#if HAVE_INT128 static inline char *psi_u128_to_buf(char *buf, unsigned __int128 u128) { for (*buf = 0; u128 > 0; u128 /= 10) { @@ -245,7 +246,6 @@ static inline char *psi_i128_to_buf(char *buf, __int128 i128) return psi_u128_to_buf(buf, i128); } -#if HAVE_INT128 # define RETVAL_LONG_STR(V, s) do {\ char buf[0x30] = {0}; \ if (s && V >= ZEND_LONG_MIN && V <= ZEND_LONG_MAX) { \ @@ -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; - 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; @@ -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); - for (ptr = (char *) ret_val; 0 < count--; ptr += size) { 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);