From 1f85d6255d6929edbcfc087e4e07c2fde39c3632 Mon Sep 17 00:00:00 2001 From: Paul Sokolovsky Date: Thu, 1 May 2014 01:35:38 +0300 Subject: [PATCH] py: Add tentative scheme for error messages configuration. --- py/mpconfig.h | 11 +++++++++++ py/objfun.c | 10 ++++++++++ unix/mpconfigport.h | 3 +++ 3 files changed, 24 insertions(+) diff --git a/py/mpconfig.h b/py/mpconfig.h index 04d4a7ddc9..8a2e96cc4a 100644 --- a/py/mpconfig.h +++ b/py/mpconfig.h @@ -94,6 +94,17 @@ typedef long long mp_longint_impl_t; #define MICROPY_ENABLE_DOC_STRING (0) #endif +// Exception messages are short static strings (TODO) +#define MICROPY_ERROR_REPORTING_TERSE (1) +// Exception messages provide basic error details +#define MICROPY_ERROR_REPORTING_NORMAL (2) +// Exception messages provide full info, e.g. object names +#define MICROPY_ERROR_REPORTING_DETAILED (3) + +#ifndef MICROPY_ERROR_REPORTING +#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_NORMAL) +#endif + // Float and complex implementation #define MICROPY_FLOAT_IMPL_NONE (0) #define MICROPY_FLOAT_IMPL_FLOAT (1) diff --git a/py/objfun.c b/py/objfun.c index 1c3208aca1..94f6d26d7e 100644 --- a/py/objfun.c +++ b/py/objfun.c @@ -152,8 +152,18 @@ STATIC void dump_args(const mp_obj_t *a, int sz) { #endif STATIC NORETURN void fun_pos_args_mismatch(mp_obj_fun_bc_t *f, uint expected, uint given) { +#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE + // Generic message, to be reused for other argument issues + nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, + "argument num/types mismatch")); +#elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "function takes %d positional arguments but %d were given", expected, given)); +#elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_DETAILED + nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, + "%s() takes %d positional arguments but %d were given", + mp_obj_fun_get_name(f), expected, given)); +#endif } // If it's possible to call a function without allocating new argument array, diff --git a/unix/mpconfigport.h b/unix/mpconfigport.h index 2d252427f0..b777cfbe31 100644 --- a/unix/mpconfigport.h +++ b/unix/mpconfigport.h @@ -16,6 +16,9 @@ #define MICROPY_USE_COMPUTED_GOTO (1) #define MICROPY_MOD_SYS_STDFILES (1) #define MICROPY_ENABLE_MOD_CMATH (1) +// Define to MICROPY_ERROR_REPORTING_DETAILED to get function, etc. +// names in exception messages (may require more RAM). +#define MICROPY_ERROR_REPORTING (MICROPY_ERROR_REPORTING_DETAILED) extern const struct _mp_obj_module_t mp_module_time; extern const struct _mp_obj_module_t mp_module_socket;