From 5f3e005b6791634b104fa6385c8a9bf5ed1af164 Mon Sep 17 00:00:00 2001 From: Damien George Date: Tue, 2 Feb 2016 23:16:05 +0000 Subject: 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. --- py/objfun.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'py/objfun.c') 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 -- cgit v1.2.3