aboutsummaryrefslogtreecommitdiff
path: root/py/objfun.c
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-02-02 23:16:05 +0000
committerDamien George <damien.p.george@gmail.com>2016-02-02 23:16:05 +0000
commit5f3e005b6791634b104fa6385c8a9bf5ed1af164 (patch)
treec4e5b55cf2056c4b01e1b86ae3820e7e47dde11e /py/objfun.c
parent086d98cbde2dffe43c2879d15d2c419a1250008e (diff)
py: Extend native type-sig to use 4 bits, so uint is separate to ptr.
Before this patch, the native types for uint and ptr/ptr8/ptr16/ptr32 all overlapped and it was possible to make a mistake in casting. Now, these types are all separate and any coding mistakes will be raised as runtime errors.
Diffstat (limited to 'py/objfun.c')
-rw-r--r--py/objfun.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/py/objfun.c b/py/objfun.c
index df7d16213..3deb0c01d 100644
--- a/py/objfun.c
+++ b/py/objfun.c
@@ -404,17 +404,17 @@ STATIC mp_obj_t fun_viper_call(mp_obj_t self_in, size_t n_args, size_t n_kw, con
if (n_args == 0) {
ret = ((viper_fun_0_t)fun)();
} else if (n_args == 1) {
- ret = ((viper_fun_1_t)fun)(mp_convert_obj_to_native(args[0], self->type_sig >> 2));
+ ret = ((viper_fun_1_t)fun)(mp_convert_obj_to_native(args[0], self->type_sig >> 4));
} else if (n_args == 2) {
- 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));
+ ret = ((viper_fun_2_t)fun)(mp_convert_obj_to_native(args[0], self->type_sig >> 4), mp_convert_obj_to_native(args[1], self->type_sig >> 8));
} 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));
+ ret = ((viper_fun_3_t)fun)(mp_convert_obj_to_native(args[0], self->type_sig >> 4), mp_convert_obj_to_native(args[1], self->type_sig >> 8), mp_convert_obj_to_native(args[2], self->type_sig >> 12));
} 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)
+ mp_convert_obj_to_native(args[0], self->type_sig >> 4),
+ mp_convert_obj_to_native(args[1], self->type_sig >> 8),
+ mp_convert_obj_to_native(args[2], self->type_sig >> 12),
+ mp_convert_obj_to_native(args[3], self->type_sig >> 16)
);
} else {
// TODO 5 or more arguments not supported for viper call