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")
|
||||
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.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)) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user