fixed bugs in ffi.c
This commit is contained in:
parent
0d4afc137a
commit
8a35a82cfb
@ -784,9 +784,22 @@ static moo_pfrc_t pf_call (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
|
|||||||
}
|
}
|
||||||
|
|
||||||
while (i < MOO_OBJ_GET_SIZE(sig) && MOO_OBJ_GET_CHAR_VAL(sig, i) == ' ') i++; /* skip all spaces after > */
|
while (i < MOO_OBJ_GET_SIZE(sig) && MOO_OBJ_GET_CHAR_VAL(sig, i) == ' ') i++; /* skip all spaces after > */
|
||||||
|
|
||||||
fmtc = (i >= MOO_OBJ_GET_SIZE(sig)? FMTC_NULL: MOO_OBJ_GET_CHAR_VAL(sig, i));
|
fmtc = (i >= MOO_OBJ_GET_SIZE(sig)? FMTC_NULL: MOO_OBJ_GET_CHAR_VAL(sig, i));
|
||||||
|
if (fmtc == 'u')
|
||||||
|
{
|
||||||
|
_unsigned = 1;
|
||||||
|
i++;
|
||||||
|
fmtc = (i >= MOO_OBJ_GET_SIZE(sig)? FMTC_NULL: MOO_OBJ_GET_CHAR_VAL(sig, i));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_unsigned = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if defined(USE_LIBFFI)
|
#if defined(USE_LIBFFI)
|
||||||
|
if (!ffi->fmtc_to_type[0][fmtc]) goto inval; /* invalid return value signature */
|
||||||
|
|
||||||
fs = (nfixedargs == j)? ffi_prep_cif(&ffi->cif, FFI_DEFAULT_ABI, j, ffi->fmtc_to_type[0][fmtc], ffi->arg_types):
|
fs = (nfixedargs == j)? ffi_prep_cif(&ffi->cif, FFI_DEFAULT_ABI, j, ffi->fmtc_to_type[0][fmtc], ffi->arg_types):
|
||||||
ffi_prep_cif_var(&ffi->cif, FFI_DEFAULT_ABI, nfixedargs, j, ffi->fmtc_to_type[0][fmtc], ffi->arg_types);
|
ffi_prep_cif_var(&ffi->cif, FFI_DEFAULT_ABI, nfixedargs, j, ffi->fmtc_to_type[0][fmtc], ffi->arg_types);
|
||||||
if (fs != FFI_OK)
|
if (fs != FFI_OK)
|
||||||
@ -798,15 +811,6 @@ static moo_pfrc_t pf_call (moo_t* moo, moo_mod_t* mod, moo_ooi_t nargs)
|
|||||||
ffi_call (&ffi->cif, FFI_FN(f), &ffi->ret_sv, ffi->arg_values);
|
ffi_call (&ffi->cif, FFI_FN(f), &ffi->ret_sv, ffi->arg_values);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (fmtc == 'u')
|
|
||||||
{
|
|
||||||
_unsigned = 1;
|
|
||||||
fmtc++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_unsigned = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* check the return value type in signature */
|
/* check the return value type in signature */
|
||||||
switch (fmtc)
|
switch (fmtc)
|
||||||
|
Loading…
Reference in New Issue
Block a user