py: Allow viper functions to take up to 4 arguments.
Addresses issue #1380.
This commit is contained in:
parent
7693ef3bd6
commit
e45c1dbd6f
|
@ -397,6 +397,7 @@ typedef mp_uint_t (*viper_fun_0_t)(void);
|
|||
typedef mp_uint_t (*viper_fun_1_t)(mp_uint_t);
|
||||
typedef mp_uint_t (*viper_fun_2_t)(mp_uint_t, mp_uint_t);
|
||||
typedef mp_uint_t (*viper_fun_3_t)(mp_uint_t, mp_uint_t, mp_uint_t);
|
||||
typedef mp_uint_t (*viper_fun_4_t)(mp_uint_t, mp_uint_t, mp_uint_t, mp_uint_t);
|
||||
|
||||
STATIC mp_obj_t fun_viper_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
|
||||
mp_obj_fun_viper_t *self = self_in;
|
||||
|
@ -414,7 +415,15 @@ STATIC mp_obj_t fun_viper_call(mp_obj_t self_in, mp_uint_t n_args, mp_uint_t n_k
|
|||
ret = ((viper_fun_2_t)fun)(mp_convert_obj_to_native(args[0], self->type_sig >> 2), mp_convert_obj_to_native(args[1], self->type_sig >> 4));
|
||||
} else if (n_args == 3) {
|
||||
ret = ((viper_fun_3_t)fun)(mp_convert_obj_to_native(args[0], self->type_sig >> 2), mp_convert_obj_to_native(args[1], self->type_sig >> 4), mp_convert_obj_to_native(args[2], self->type_sig >> 6));
|
||||
} else if (n_args == 4) {
|
||||
ret = ((viper_fun_4_t)fun)(
|
||||
mp_convert_obj_to_native(args[0], self->type_sig >> 2),
|
||||
mp_convert_obj_to_native(args[1], self->type_sig >> 4),
|
||||
mp_convert_obj_to_native(args[2], self->type_sig >> 6),
|
||||
mp_convert_obj_to_native(args[3], self->type_sig >> 8)
|
||||
);
|
||||
} else {
|
||||
// TODO 5 or more arguments not supported for viper call
|
||||
assert(0);
|
||||
ret = 0;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
# test calling viper functions with different number of args
|
||||
|
||||
@micropython.viper
|
||||
def f0():
|
||||
print(0)
|
||||
f0()
|
||||
|
||||
@micropython.viper
|
||||
def f1(x1:int):
|
||||
print(x1)
|
||||
f1(1)
|
||||
|
||||
@micropython.viper
|
||||
def f2(x1:int, x2:int):
|
||||
print(x1, x2)
|
||||
f2(1, 2)
|
||||
|
||||
@micropython.viper
|
||||
def f3(x1:int, x2:int, x3:int):
|
||||
print(x1, x2, x3)
|
||||
f3(1, 2, 3)
|
||||
|
||||
@micropython.viper
|
||||
def f4(x1:int, x2:int, x3:int, x4:int):
|
||||
print(x1, x2, x3, x4)
|
||||
f4(1, 2, 3, 4)
|
||||
|
||||
# only up to 4 arguments currently supported
|
|
@ -0,0 +1,5 @@
|
|||
0
|
||||
1
|
||||
1 2
|
||||
1 2 3
|
||||
1 2 3 4
|
Loading…
Reference in New Issue