Commit 6bbbb1ab authored by Damien George's avatar Damien George
Browse files

unix/modffi: Support passing float/double args.

parent f1ed8c8a
......@@ -24,3 +24,11 @@ print('%.6f' % strtof('1.23', None))
strtod = libc.func("d", "strtod", "sp")
print('%.6f' % strtod('1.23', None))
# test passing double and float args
libm = ffi_open(('libm.so', 'libc.so.0', 'libc.so.6', 'libc.dylib'))
tgamma = libm.func('d', 'tgamma', 'd')
tgammaf = libm.func('f', 'tgammaf', 'f')
for fun in (tgamma, tgammaf):
for val in (0.5, 1, 1.0, 1.5, 4, 4.0):
print('%.6f' % fun(val))
1.230000
1.230000
1.772454
1.000000
1.000000
0.886227
6.000000
6.000000
1.772454
1.000000
1.000000
0.886227
6.000000
6.000000
......@@ -356,6 +356,14 @@ STATIC mp_obj_t ffifunc_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw,
mp_obj_t a = args[i];
if (*argtype == 'O') {
values[i] = (ffi_arg)a;
#if MICROPY_PY_BUILTINS_FLOAT
} else if (*argtype == 'f') {
float *p = (float*)&values[i];
*p = mp_obj_get_float(a);
} else if (*argtype == 'd') {
double *p = (double*)&values[i];
*p = mp_obj_get_float(a);
#endif
} else if (a == mp_const_none) {
values[i] = 0;
} else if (MP_OBJ_IS_INT(a)) {
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment