summaryrefslogtreecommitdiffstatshomepage
path: root/py
diff options
context:
space:
mode:
Diffstat (limited to 'py')
-rw-r--r--py/mpconfig.h11
-rw-r--r--py/objfun.c10
2 files changed, 21 insertions, 0 deletions
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,