Commit e45c1dbd authored by Damien George's avatar Damien George
Browse files

py: Allow viper functions to take up to 4 arguments.

Addresses issue #1380.
parent 7693ef3b
......@@ -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;
}
......
# 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
Markdown is supported
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