unix/modffi: Support passing float/double args.
This commit is contained in:
parent
f1ed8c8a2e
commit
6bbbb1ab41
@ -24,3 +24,11 @@ print('%.6f' % strtof('1.23', None))
|
|||||||
|
|
||||||
strtod = libc.func("d", "strtod", "sp")
|
strtod = libc.func("d", "strtod", "sp")
|
||||||
print('%.6f' % strtod('1.23', None))
|
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,2 +1,14 @@
|
|||||||
1.230000
|
1.230000
|
||||||
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];
|
mp_obj_t a = args[i];
|
||||||
if (*argtype == 'O') {
|
if (*argtype == 'O') {
|
||||||
values[i] = (ffi_arg)a;
|
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) {
|
} else if (a == mp_const_none) {
|
||||||
values[i] = 0;
|
values[i] = 0;
|
||||||
} else if (MP_OBJ_IS_INT(a)) {
|
} else if (MP_OBJ_IS_INT(a)) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user