summaryrefslogtreecommitdiff
path: root/py
diff options
context:
space:
mode:
authorDan Halbert <halbert@halwitz.org>2020-11-25 17:52:06 -0500
committerDan Halbert <halbert@halwitz.org>2020-11-25 17:52:06 -0500
commitef0830bfe241b544b05bd3081f5bba03af57fe0d (patch)
tree28b6c45fdd03288bbf43b77f42025d1773622f13 /py
parent9dbea36eac9a78cf324bba8d32a5cb2c9940d411 (diff)
parente778fc1f876116fd8f07b95f9eb8439745988fba (diff)
merge from upstream + wip
Diffstat (limited to 'py')
-rw-r--r--py/argcheck.c18
-rw-r--r--py/bc.c4
-rw-r--r--py/builtinimport.c12
-rw-r--r--py/circuitpy_defns.mk2
-rw-r--r--py/circuitpy_mpconfig.h2
-rw-r--r--py/circuitpy_mpconfig.mk3
-rw-r--r--py/compile.c12
-rw-r--r--py/modbuiltins.c6
-rw-r--r--py/modsys.c6
-rw-r--r--py/obj.c66
-rw-r--r--py/objdict.c6
-rw-r--r--py/objnamedtuple.c20
-rw-r--r--py/objset.c2
-rw-r--r--py/objstr.c113
-rw-r--r--py/objtype.c24
-rw-r--r--py/parsenum.c10
-rw-r--r--py/py.mk4
-rw-r--r--py/pystack.c4
-rw-r--r--py/runtime.c84
-rw-r--r--py/runtime.h1
20 files changed, 204 insertions, 195 deletions
diff --git a/py/argcheck.c b/py/argcheck.c
index 9341c02a6..af5c81bf3 100644
--- a/py/argcheck.c
+++ b/py/argcheck.c
@@ -99,12 +99,12 @@ void mp_arg_parse_all(size_t n_pos, const mp_obj_t *pos, mp_map_t *kws, size_t n
mp_map_elem_t *kw = mp_map_lookup(kws, MP_OBJ_NEW_QSTR(allowed[i].qst), MP_MAP_LOOKUP);
if (kw == NULL) {
if (allowed[i].flags & MP_ARG_REQUIRED) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_arg_error_terse_mismatch();
- } else {
+ #else
mp_raise_TypeError_varg(
translate("'%q' argument required"), allowed[i].qst);
- }
+ #endif
}
out_vals[i] = allowed[i].defval;
continue;
@@ -124,20 +124,20 @@ void mp_arg_parse_all(size_t n_pos, const mp_obj_t *pos, mp_map_t *kws, size_t n
}
if (pos_found < n_pos) {
extra_positional:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_arg_error_terse_mismatch();
- } else {
+ #else
// TODO better error message
mp_raise_TypeError(translate("extra positional arguments given"));
- }
+ #endif
}
if (kws_found < kws->used) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_arg_error_terse_mismatch();
- } else {
+ #else
// TODO better error message
mp_raise_TypeError(translate("extra keyword arguments given"));
- }
+ #endif
}
}
diff --git a/py/bc.c b/py/bc.c
index 640671338..01131cb4c 100644
--- a/py/bc.c
+++ b/py/bc.c
@@ -214,8 +214,8 @@ void mp_setup_code_state(mp_code_state_t *code_state, size_t n_args, size_t n_kw
#if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("unexpected keyword argument"));
#else
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
- translate("unexpected keyword argument '%q'"), MP_OBJ_QSTR_VALUE(wanted_arg_name)));
+ mp_raise_TypeError_varg(
+ translate("unexpected keyword argument '%q'"), MP_OBJ_QSTR_VALUE(wanted_arg_name));
#endif
}
mp_obj_dict_store(dict, kwargs[2 * i], kwargs[2 * i + 1]);
diff --git a/py/builtinimport.c b/py/builtinimport.c
index 47ffab519..c4768cc77 100644
--- a/py/builtinimport.c
+++ b/py/builtinimport.c
@@ -426,12 +426,12 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
mp_module_call_init(mod_name, module_obj);
} else {
// couldn't find the file, so fail
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_ImportError(translate("module not found"));
- } else {
+ #else
mp_raise_msg_varg(&mp_type_ImportError,
translate("no module named '%q'"), mod_name);
- }
+ #endif
}
} else {
// found the file, so get the module
@@ -538,12 +538,12 @@ mp_obj_t mp_builtin___import__(size_t n_args, const mp_obj_t *args) {
#endif
// Couldn't find the module, so fail
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_msg(&mp_type_ImportError, translate("module not found"));
- } else {
+ #else
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_ImportError,
translate("no module named '%q'"), module_name_qstr));
- }
+ #endif
}
#endif // MICROPY_ENABLE_EXTERNAL_IMPORT
diff --git a/py/circuitpy_defns.mk b/py/circuitpy_defns.mk
index 14b658df4..a3e18753b 100644
--- a/py/circuitpy_defns.mk
+++ b/py/circuitpy_defns.mk
@@ -303,7 +303,7 @@ SRC_COMMON_HAL_ALL = \
_pew/__init__.c \
alarm/__init__.c \
alarm/pin/PinAlarm.c \
- alarm/time/MonotonicTimeAlarm.c \
+ alarm/time/TimeAlarm.c \
analogio/AnalogIn.c \
analogio/AnalogOut.c \
analogio/__init__.c \
diff --git a/py/circuitpy_mpconfig.h b/py/circuitpy_mpconfig.h
index b5e9faa26..799217777 100644
--- a/py/circuitpy_mpconfig.h
+++ b/py/circuitpy_mpconfig.h
@@ -184,7 +184,7 @@ typedef long mp_off_t;
// Turning off FULL_BUILD removes some functionality to reduce flash size on tiny SAMD21s
#define MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG (CIRCUITPY_FULL_BUILD)
#define MICROPY_CPYTHON_COMPAT (CIRCUITPY_FULL_BUILD)
-#define MICROPY_PY_BUILTINS_POW3 (CIRCUITPY_FULL_BUILD)
+#define MICROPY_PY_BUILTINS_POW3 (CIRCUITPY_BUILTINS_POW3)
#define MICROPY_COMP_FSTRING_LITERAL (MICROPY_CPYTHON_COMPAT)
#define MICROPY_MODULE_WEAK_LINKS (0)
#define MICROPY_PY_ALL_SPECIAL_METHODS (CIRCUITPY_FULL_BUILD)
diff --git a/py/circuitpy_mpconfig.mk b/py/circuitpy_mpconfig.mk
index 6d555a44b..a84dff539 100644
--- a/py/circuitpy_mpconfig.mk
+++ b/py/circuitpy_mpconfig.mk
@@ -96,6 +96,9 @@ CFLAGS += -DCIRCUITPY_BLEIO=$(CIRCUITPY_BLEIO)
CIRCUITPY_BOARD ?= 1
CFLAGS += -DCIRCUITPY_BOARD=$(CIRCUITPY_BOARD)
+CIRCUITPY_BUILTINS_POW3 ?= $(CIRCUITPY_FULL_BUILD)
+CFLAGS += -DCIRCUITPY_BUILTINS_POW3=$(CIRCUITPY_BUILTINS_POW3)
+
CIRCUITPY_BUSIO ?= 1
CFLAGS += -DCIRCUITPY_BUSIO=$(CIRCUITPY_BUSIO)
diff --git a/py/compile.c b/py/compile.c
index 04bcf5bc1..b4d81ed44 100644
--- a/py/compile.c
+++ b/py/compile.c
@@ -2486,21 +2486,21 @@ STATIC void compile_atom_brace(compiler_t *comp, mp_parse_node_struct_t *pns) {
compile_node(comp, pn_i);
if (is_dict) {
if (!is_key_value) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
compile_syntax_error(comp, (mp_parse_node_t)pns, translate("invalid syntax"));
- } else {
+ #else
compile_syntax_error(comp, (mp_parse_node_t)pns, translate("expecting key:value for dict"));
- }
+ #endif
return;
}
EMIT(store_map);
} else {
if (is_key_value) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
compile_syntax_error(comp, (mp_parse_node_t)pns, translate("invalid syntax"));
- } else {
+ #else
compile_syntax_error(comp, (mp_parse_node_t)pns, translate("expecting just a value for set"));
- }
+ #endif
return;
}
}
diff --git a/py/modbuiltins.c b/py/modbuiltins.c
index 41e1d4e48..fe3c366ee 100644
--- a/py/modbuiltins.c
+++ b/py/modbuiltins.c
@@ -346,12 +346,12 @@ STATIC mp_obj_t mp_builtin_ord(mp_obj_t o_in) {
}
}
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("ord expects a character"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("ord() expected a character, but string of length %d found"), (int)len);
- }
+ #endif
}
MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_ord_obj, mp_builtin_ord);
diff --git a/py/modsys.c b/py/modsys.c
index a1d2cf831..81628683d 100644
--- a/py/modsys.c
+++ b/py/modsys.c
@@ -92,13 +92,11 @@ STATIC const MP_DEFINE_STR_OBJ(platform_obj, MICROPY_PY_SYS_PLATFORM);
// exit([retval]): raise SystemExit, with optional argument given to the exception
STATIC mp_obj_t mp_sys_exit(size_t n_args, const mp_obj_t *args) {
- mp_obj_t exc;
if (n_args == 0) {
- exc = mp_obj_new_exception(&mp_type_SystemExit);
+ nlr_raise(mp_obj_new_exception(&mp_type_SystemExit));
} else {
- exc = mp_obj_new_exception_arg1(&mp_type_SystemExit, args[0]);
+ mp_raise_arg1(&mp_type_SystemExit, args[0]);
}
- nlr_raise(exc);
}
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_sys_exit_obj, 0, 1, mp_sys_exit);
diff --git a/py/obj.c b/py/obj.c
index 315e816e0..d8e34746c 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -262,12 +262,12 @@ mp_int_t mp_obj_get_int(mp_const_obj_t arg) {
} else if (MP_OBJ_IS_TYPE(arg, &mp_type_int)) {
return mp_obj_int_get_checked(arg);
} else {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError_varg(translate("can't convert to %q"), MP_QSTR_int);
- } else {
+ #else
mp_raise_TypeError_varg(
translate("can't convert %q to %q"), mp_obj_get_type_qstr(arg), MP_QSTR_int);
- }
+ #endif
}
}
@@ -325,12 +325,12 @@ mp_float_t mp_obj_get_float(mp_obj_t arg) {
mp_float_t val;
if (!mp_obj_get_float_maybe(arg, &val)) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError_varg(translate("can't convert to %q"), MP_QSTR_float);
- } else {
+ #else
mp_raise_TypeError_varg(
translate("can't convert %q to %q"), mp_obj_get_type_qstr(arg), MP_QSTR_float);
- }
+ #endif
}
return val;
@@ -358,12 +358,12 @@ void mp_obj_get_complex(mp_obj_t arg, mp_float_t *real, mp_float_t *imag) {
} else if (MP_OBJ_IS_TYPE(arg, &mp_type_complex)) {
mp_obj_complex_get(arg, real, imag);
} else {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError_varg(translate("can't convert to %q"), MP_QSTR_complex);
- } else {
+ #else
mp_raise_TypeError_varg(
translate("can't convert %q to %q"), mp_obj_get_type_qstr(arg), MP_QSTR_complex);
- }
+ #endif
}
}
#endif
@@ -376,12 +376,12 @@ void mp_obj_get_array(mp_obj_t o, size_t *len, mp_obj_t **items) {
} else if (MP_OBJ_IS_TYPE(o, &mp_type_list)) {
mp_obj_list_get(o, len, items);
} else {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("expected tuple/list"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("object '%q' is not a tuple or list"), mp_obj_get_type_qstr(o));
- }
+ #endif
}
}
@@ -390,12 +390,12 @@ void mp_obj_get_array_fixed_n(mp_obj_t o, size_t len, mp_obj_t **items) {
size_t seq_len;
mp_obj_get_array(o, &seq_len, items);
if (seq_len != len) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_ValueError(translate("tuple/list has wrong length"));
- } else {
+ #else
mp_raise_ValueError_varg(translate("requested length %d but object has length %d"),
(int)len, (int)seq_len);
- }
+ #endif
}
}
@@ -405,13 +405,13 @@ size_t mp_get_index(const mp_obj_type_t *type, size_t len, mp_obj_t index, bool
if (MP_OBJ_IS_SMALL_INT(index)) {
i = MP_OBJ_SMALL_INT_VALUE(index);
} else if (!mp_obj_get_int_maybe(index, &i)) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("indices must be integers"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("%q indices must be integers, not %q"),
type->name, mp_obj_get_type_qstr(index));
- }
+ #endif
}
if (i < 0) {
@@ -425,12 +425,12 @@ size_t mp_get_index(const mp_obj_type_t *type, size_t len, mp_obj_t index, bool
}
} else {
if (i < 0 || (mp_uint_t)i >= len) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_IndexError(translate("index out of range"));
- } else {
+ #else
mp_raise_msg_varg(&mp_type_IndexError,
translate("%q index out of range"), type->name);
- }
+ #endif
}
}
@@ -460,12 +460,12 @@ mp_obj_t mp_obj_id(mp_obj_t o_in) {
mp_obj_t mp_obj_len(mp_obj_t o_in) {
mp_obj_t len = mp_obj_len_maybe(o_in);
if (len == MP_OBJ_NULL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object has no len"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("object of type '%q' has no len()"), mp_obj_get_type_qstr(o_in));
- }
+ #endif
} else {
return len;
}
@@ -503,26 +503,26 @@ mp_obj_t mp_obj_subscr(mp_obj_t base, mp_obj_t index, mp_obj_t value) {
}
}
if (value == MP_OBJ_NULL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object does not support item deletion"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("'%q' object does not support item deletion"), mp_obj_get_type_qstr(base));
- }
+ #endif
} else if (value == MP_OBJ_SENTINEL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object is not subscriptable"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("'%q' object is not subscriptable"), mp_obj_get_type_qstr(base));
- }
+ #endif
} else {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object does not support item assignment"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("'%q' object does not support item assignment"), mp_obj_get_type_qstr(base));
- }
+ #endif
}
}
diff --git a/py/objdict.c b/py/objdict.c
index 63fd86f35..098aec5d2 100644
--- a/py/objdict.c
+++ b/py/objdict.c
@@ -169,7 +169,7 @@ mp_obj_t mp_obj_dict_get(mp_obj_t self_in, mp_obj_t index) {
mp_obj_dict_t *self = MP_OBJ_TO_PTR(self_in);
mp_map_elem_t *elem = mp_map_lookup(&self->map, index, MP_MAP_LOOKUP);
if (elem == NULL) {
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_KeyError, index));
+ mp_raise_arg1(&mp_type_KeyError, index);
} else {
return elem->value;
}
@@ -185,7 +185,7 @@ STATIC mp_obj_t dict_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
mp_obj_dict_t *self = MP_OBJ_TO_PTR(self_in);
mp_map_elem_t *elem = mp_map_lookup(&self->map, index, MP_MAP_LOOKUP);
if (elem == NULL) {
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_KeyError, index));
+ mp_raise_arg1(&mp_type_KeyError, index);
} else {
return elem->value;
}
@@ -272,7 +272,7 @@ STATIC mp_obj_t dict_get_helper(size_t n_args, const mp_obj_t *args, mp_map_look
if (elem == NULL || elem->value == MP_OBJ_NULL) {
if (n_args == 2) {
if (lookup_kind == MP_MAP_LOOKUP_REMOVE_IF_FOUND) {
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_KeyError, args[1]));
+ mp_raise_arg1(&mp_type_KeyError, args[1]);
} else {
value = mp_const_none;
}
diff --git a/py/objnamedtuple.c b/py/objnamedtuple.c
index ab2f2f3c0..8b595da57 100644
--- a/py/objnamedtuple.c
+++ b/py/objnamedtuple.c
@@ -102,17 +102,17 @@ mp_obj_t namedtuple_make_new(const mp_obj_type_t *type_in, size_t n_args, const
n_kw = kw_args->used;
}
if (n_args + n_kw != num_fields) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_arg_error_terse_mismatch();
- } else if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL) {
+ #elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL
mp_raise_TypeError_varg(
translate("function takes %d positional arguments but %d were given"),
num_fields, n_args + n_kw);
- } else if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_DETAILED) {
+ #else
mp_raise_TypeError_varg(
translate("%q() takes %d positional arguments but %d were given"),
type->base.name, num_fields, n_args + n_kw);
- }
+ #endif
}
// Create a tuple and set the type to this namedtuple
@@ -128,20 +128,20 @@ mp_obj_t namedtuple_make_new(const mp_obj_type_t *type_in, size_t n_args, const
qstr kw = mp_obj_str_get_qstr(kw_args->table[i].key);
size_t id = mp_obj_namedtuple_find_field(type, kw);
if (id == (size_t)-1) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_arg_error_terse_mismatch();
- } else {
+ #else
mp_raise_TypeError_varg(
translate("unexpected keyword argument '%q'"), kw);
- }
+ #endif
}
if (tuple->items[id] != MP_OBJ_NULL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_arg_error_terse_mismatch();
- } else {
+ #else
mp_raise_TypeError_varg(
translate("function got multiple values for argument '%q'"), kw);
- }
+ #endif
}
tuple->items[id] = kw_args->table[i].value;
}
diff --git a/py/objset.c b/py/objset.c
index 45b5c1260..c5d54aede 100644
--- a/py/objset.c
+++ b/py/objset.c
@@ -378,7 +378,7 @@ STATIC mp_obj_t set_remove(mp_obj_t self_in, mp_obj_t item) {
check_set(self_in);
mp_obj_set_t *self = MP_OBJ_TO_PTR(self_in);
if (mp_set_lookup(&self->set, item, MP_MAP_LOOKUP_REMOVE_IF_FOUND) == MP_OBJ_NULL) {
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_KeyError, item));
+ mp_raise_arg1(&mp_type_KeyError, item);
}
return mp_const_none;
}
diff --git a/py/objstr.c b/py/objstr.c
index edb562df2..1a59aeaec 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -971,11 +971,11 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
vstr_add_byte(&vstr, '}');
continue;
}
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(translate("single '}' encountered in format string"));
- }
+ #endif
}
if (*str != '{') {
vstr_add_byte(&vstr, *str);
@@ -1010,18 +1010,18 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
if (str < top && (*str == 'r' || *str == 's')) {
conversion = *str++;
} else {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL) {
+ #elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL
mp_raise_ValueError(translate("bad conversion specifier"));
- } else {
+ #else
if (str >= top) {
mp_raise_ValueError(
translate("end of format while looking for conversion specifier"));
} else {
mp_raise_ValueError_varg(translate("unknown conversion specifier %c"), *str);
}
- }
+ #endif
}
}
@@ -1047,18 +1047,18 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
}
}
if (str >= top) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(translate("unmatched '{' in format"));
- }
+ #endif
}
if (*str != '}') {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
- terse_str_format_value_error();
- } else {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
+:w
+ #else
mp_raise_ValueError(translate("expected ':' after format specifier"));
- }
+ #endif
}
mp_obj_t arg = mp_const_none;
@@ -1067,12 +1067,12 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
int index = 0;
if (MP_LIKELY(unichar_isdigit(*field_name))) {
if (*arg_i > 0) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(
translate("can't switch from automatic field numbering to manual field specification"));
- }
+ #endif
}
field_name = str_to_int(field_name, field_name_top, &index);
if ((uint)index >= n_args - 1) {
@@ -1087,7 +1087,7 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
field_name = lookup;
mp_map_elem_t *key_elem = mp_map_lookup(kwargs, field_q, MP_MAP_LOOKUP);
if (key_elem == NULL) {
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_KeyError, field_q));
+ mp_raise_arg1(&mp_type_KeyError, field_q);
}
arg = key_elem->value;
}
@@ -1096,12 +1096,12 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
}
} else {
if (*arg_i < 0) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(
translate("can't switch from manual field specification to automatic field numbering"));
- }
+ #endif
}
if ((uint)*arg_i >= n_args - 1) {
mp_raise_IndexError_varg(translate("%q index out of range"), MP_QSTR_tuple);
@@ -1189,11 +1189,11 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
type = *s++;
}
if (*s) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(translate("invalid format specifier"));
- }
+ #endif
}
vstr_clear(&format_spec_vstr);
}
@@ -1210,19 +1210,19 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
if (flags & (PF_FLAG_SHOW_SIGN | PF_FLAG_SPACE_SIGN)) {
if (type == 's') {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(translate("sign not allowed in string format specifier"));
- }
+ #endif
}
if (type == 'c') {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(
translate("sign not allowed with integer format specifier 'c'"));
- }
+ #endif
}
}
@@ -1276,13 +1276,13 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
break;
default:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError_varg(
translate("unknown format code '%c' for object of type '%q'"),
type, mp_obj_get_type_qstr(arg));
- }
+ #endif
}
}
@@ -1348,24 +1348,24 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
#endif
default:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError_varg(
translate("unknown format code '%c' for object of type '%q'"),
type, mp_obj_get_type_qstr(arg));
- }
+ #endif
}
} else {
// arg doesn't look like a number
if (align == '=') {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(
translate("'=' alignment not allowed in string format specifier"));
- }
+ #endif
}
switch (type) {
@@ -1384,13 +1384,13 @@ STATIC vstr_t mp_obj_str_format_helper(const char *str, const char *top, int *ar
}
default:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError_varg(
translate("unknown format code '%c' for object of type '%q'"),
type, mp_obj_get_type_qstr(arg));
- }
+ #endif
}
}
}
@@ -1442,11 +1442,11 @@ STATIC mp_obj_t str_modulo_format(mp_obj_t pattern, size_t n_args, const mp_obj_
const byte *key = ++str;
while (*str != ')') {
if (str >= top) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(translate("incomplete format key"));
- }
+ #endif
}
++str;
}
@@ -1500,11 +1500,11 @@ STATIC mp_obj_t str_modulo_format(mp_obj_t pattern, size_t n_args, const mp_obj_
if (str >= top) {
incomplete_format:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError(translate("incomplete format"));
- }
+ #endif
}
// Tuple value lookup
@@ -1587,13 +1587,13 @@ not_enough_args:
break;
default:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
terse_str_format_value_error();
- } else {
+ #else
mp_raise_ValueError_varg(
translate("unsupported format character '%c' (0x%x) at index %d"),
*str, *str, str - start_str);
- }
+ #endif
}
}
@@ -2130,14 +2130,13 @@ bool mp_obj_str_equal(mp_obj_t s1, mp_obj_t s2) {
}
STATIC NORETURN void bad_implicit_conversion(mp_obj_t self_in) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("can't convert to str implicitly"));
- } else {
+ #else
const qstr src_name = mp_obj_get_type_qstr(self_in);
- nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError,
- translate("can't convert '%q' object to %q implicitly"),
- src_name, src_name == MP_QSTR_str ? MP_QSTR_bytes : MP_QSTR_str));
- }
+ mp_raise_TypeError_varg(translate("can't convert '%q' object to %q implicitly"),
+ src_name, src_name == MP_QSTR_str ? MP_QSTR_bytes : MP_QSTR_str);
+ #endif
}
// use this if you will anyway convert the string to a qstr
diff --git a/py/objtype.c b/py/objtype.c
index ccd014c33..1254b015c 100644
--- a/py/objtype.c
+++ b/py/objtype.c
@@ -373,12 +373,12 @@ mp_obj_t mp_obj_instance_make_new(const mp_obj_type_t *self, size_t n_args, cons
m_del(mp_obj_t, args2, 2 + n_args + 2 * n_kw);
}
if (init_ret != mp_const_none) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("__init__() should return None"));
- } else {
+ #else
mp_raise_TypeError_varg(translate("__init__() should return None, not '%q'"),
mp_obj_get_type_qstr(init_ret));
- }
+ #endif
}
}
@@ -888,12 +888,12 @@ mp_obj_t mp_obj_instance_call(mp_obj_t self_in, size_t n_args, size_t n_kw, cons
mp_obj_t member[2] = {MP_OBJ_NULL, MP_OBJ_NULL};
mp_obj_t call = mp_obj_instance_get_call(self_in, member);
if (call == MP_OBJ_NULL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object not callable"));
- } else {
+ #else
mp_raise_TypeError_varg(translate("'%q' object is not callable"),
mp_obj_get_type_qstr(self_in));
- }
+ #endif
}
mp_obj_instance_t *self = MP_OBJ_TO_PTR(self_in);
if (call == MP_OBJ_SENTINEL) {
@@ -1024,11 +1024,11 @@ STATIC mp_obj_t type_call(mp_obj_t self_in, size_t n_args, size_t n_kw, const mp
mp_obj_type_t *self = MP_OBJ_TO_PTR(self_in);
if (self->make_new == NULL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("cannot create instance"));
- } else {
+ #else
mp_raise_TypeError_varg(translate("cannot create '%q' instances"), self->name);
- }
+ #endif
}
// create a map directly from the given args array and make a new instance
@@ -1134,12 +1134,12 @@ mp_obj_t mp_obj_new_type(qstr name, mp_obj_t bases_tuple, mp_obj_t locals_dict)
mp_obj_type_t *t = MP_OBJ_TO_PTR(bases_items[i]);
// TODO: Verify with CPy, tested on function type
if (t->make_new == NULL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("type is not an acceptable base type"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("type '%q' is not an acceptable base type"), t->name);
- }
+ #endif
}
#if ENABLE_SPECIAL_ACCESSORS
if (mp_obj_is_instance_type(t)) {
diff --git a/py/parsenum.c b/py/parsenum.c
index da63825e4..a72829b20 100644
--- a/py/parsenum.c
+++ b/py/parsenum.c
@@ -145,16 +145,16 @@ overflow:
goto have_ret_val;
}
-value_error:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+value_error: ;
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_obj_t exc = mp_obj_new_exception_msg(&mp_type_ValueError,
translate("invalid syntax for integer"));
raise_exc(exc, lex);
- } else if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL) {
+ #elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_NORMAL
mp_obj_t exc = mp_obj_new_exception_msg_varg(&mp_type_ValueError,
translate("invalid syntax for integer with base %d"), base);
raise_exc(exc, lex);
- } else {
+ #else
vstr_t vstr;
mp_print_t print;
vstr_init_print(&vstr, 50, &print);
@@ -163,7 +163,7 @@ value_error:
mp_obj_t exc = mp_obj_new_exception_arg1(&mp_type_ValueError,
mp_obj_new_str_from_vstr(&mp_type_str, &vstr));
raise_exc(exc, lex);
- }
+ #endif
}
typedef enum {
diff --git a/py/py.mk b/py/py.mk
index acf5d127b..1a8f1219a 100644
--- a/py/py.mk
+++ b/py/py.mk
@@ -7,7 +7,7 @@ HEADER_BUILD = $(BUILD)/genhdr
# file containing qstr defs for the core Python bit
PY_QSTR_DEFS = $(PY_SRC)/qstrdefs.h
-TRANSLATION := en_US
+TRANSLATION ?= en_US
# If qstr autogeneration is not disabled we specify the output header
# for all collected qstrings.
@@ -109,7 +109,7 @@ ifeq ($(CIRCUITPY_ULAB),1)
SRC_MOD += $(patsubst $(TOP)/%,%,$(wildcard $(TOP)/extmod/ulab/code/*.c))
SRC_MOD += $(patsubst $(TOP)/%,%,$(wildcard $(TOP)/extmod/ulab/code/*/*.c))
CFLAGS_MOD += -DCIRCUITPY_ULAB=1 -DMODULE_ULAB_ENABLED=1
-$(BUILD)/extmod/ulab/code/%.o: CFLAGS += -Wno-float-equal -Wno-sign-compare -DCIRCUITPY
+$(BUILD)/extmod/ulab/code/%.o: CFLAGS += -Wno-missing-declarations -Wno-missing-prototypes -Wno-unused-parameter -Wno-float-equal -Wno-sign-compare -Wno-cast-align -Wno-shadow -DCIRCUITPY
endif
# External modules written in C.
diff --git a/py/pystack.c b/py/pystack.c
index f79ea9210..0def75b10 100644
--- a/py/pystack.c
+++ b/py/pystack.c
@@ -43,8 +43,8 @@ void *mp_pystack_alloc(size_t n_bytes) {
#endif
if (MP_STATE_THREAD(pystack_cur) + n_bytes > MP_STATE_THREAD(pystack_end)) {
// out of memory in the pystack
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_RuntimeError,
- MP_OBJ_NEW_QSTR(MP_QSTR_pystack_space_exhausted)));
+ mp_raise_arg1(&mp_type_RuntimeError,
+ MP_OBJ_NEW_QSTR(MP_QSTR_pystack_space_exhausted));
}
void *ptr = MP_STATE_THREAD(pystack_cur);
MP_STATE_THREAD(pystack_cur) += n_bytes;
diff --git a/py/runtime.c b/py/runtime.c
index e63e2337d..a3acb954a 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -177,12 +177,12 @@ mp_obj_t mp_load_global(qstr qst) {
#endif
elem = mp_map_lookup((mp_map_t*)&mp_module_builtins_globals.map, MP_OBJ_NEW_QSTR(qst), MP_MAP_LOOKUP);
if (elem == NULL) {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_msg(&mp_type_NameError, translate("name not defined"));
- } else {
+ #else
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_NameError,
translate("name '%q' is not defined"), qst));
- }
+ #endif
}
}
return elem->value;
@@ -275,13 +275,13 @@ mp_obj_t mp_unary_op(mp_unary_op_t op, mp_obj_t arg) {
return result;
}
}
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("unsupported type for operator"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("unsupported type for %q: '%q'"),
mp_unary_op_method_name[op], mp_obj_get_type_qstr(arg));
- }
+ #endif
}
}
@@ -582,13 +582,13 @@ generic_binary_op:
}
unsupported_op:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("unsupported type for operator"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("unsupported types for %q: '%q', '%q'"),
mp_binary_op_method_name[op], mp_obj_get_type_qstr(lhs), mp_obj_get_type_qstr(rhs));
- }
+ #endif
zero_division:
mp_raise_msg(&mp_type_ZeroDivisionError, translate("division by zero"));
@@ -624,11 +624,11 @@ mp_obj_t mp_call_function_n_kw(mp_obj_t fun_in, size_t n_args, size_t n_kw, cons
return type->call(fun_in, n_args, n_kw, args);
}
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object not callable"));
- } else {
+ #else
mp_raise_TypeError_varg(translate("'%q' object is not callable"), mp_obj_get_type_qstr(fun_in));
- }
+ #endif
}
// args contains: fun self/NULL arg(0) ... arg(n_args-2) arg(n_args-1) kw_key(0) kw_val(0) ... kw_key(n_kw-1) kw_val(n_kw-1)
@@ -852,19 +852,19 @@ void mp_unpack_sequence(mp_obj_t seq_in, size_t num, mp_obj_t *items) {
return;
too_short:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_ValueError(translate("wrong number of values to unpack"));
- } else {
+ #else
mp_raise_ValueError_varg(translate("need more than %d values to unpack"),
(int)seq_len);
- }
+ #endif
too_long:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_ValueError(translate("wrong number of values to unpack"));
- } else {
+ #else
mp_raise_ValueError_varg(translate("too many values to unpack (expected %d)"),
(int)num);
- }
+ #endif
}
// unpacked items are stored in reverse order into the array pointed to by items
@@ -916,12 +916,12 @@ void mp_unpack_ex(mp_obj_t seq_in, size_t num_in, mp_obj_t *items) {
return;
too_short:
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_ValueError(translate("wrong number of values to unpack"));
- } else {
+ #else
mp_raise_ValueError_varg(translate("need more than %d values to unpack"),
(int)seq_len);
- }
+ #endif
}
mp_obj_t mp_load_attr(mp_obj_t base, qstr attr) {
@@ -1094,9 +1094,9 @@ void mp_load_method(mp_obj_t base, qstr attr, mp_obj_t *dest) {
if (dest[0] == MP_OBJ_NULL) {
// no attribute/method called attr
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_AttributeError(translate("no such attribute"));
- } else {
+ #elif MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_DETAILED
// following CPython, we give a more detailed error message for type objects
if (MP_OBJ_IS_TYPE(base, &mp_type_type)) {
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
@@ -1107,7 +1107,11 @@ void mp_load_method(mp_obj_t base, qstr attr, mp_obj_t *dest) {
translate("'%q' object has no attribute '%q'"),
mp_obj_get_type_qstr(base), attr));
}
- }
+ #else
+ nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
+ translate("'%q' object has no attribute '%q'"),
+ mp_obj_get_type_qstr(base), attr));
+ #endif
}
}
@@ -1168,13 +1172,13 @@ void mp_store_attr(mp_obj_t base, qstr attr, mp_obj_t value) {
}
#endif
}
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_AttributeError(translate("no such attribute"));
- } else {
+ #else
nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_AttributeError,
translate("'%q' object cannot assign attribute '%q'"),
mp_obj_get_type_qstr(base), attr));
- }
+ #endif
}
mp_obj_t mp_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf) {
@@ -1209,12 +1213,12 @@ mp_obj_t mp_getiter(mp_obj_t o_in, mp_obj_iter_buf_t *iter_buf) {
}
// object not iterable
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object not iterable"));
- } else {
+ #else
mp_raise_TypeError_varg(
translate("'%q' object is not iterable"), mp_obj_get_type_qstr(o_in));
- }
+ #endif
}
// may return MP_OBJ_STOP_ITERATION as an optimisation instead of raise StopIteration()
@@ -1231,12 +1235,12 @@ mp_obj_t mp_iternext_allow_raise(mp_obj_t o_in) {
// __next__ exists, call it and return its result
return mp_call_method_n_kw(0, 0, dest);
} else {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object not an iterator"));
- } else {
+ #else
mp_raise_TypeError_varg(translate("'%q' object is not an iterator"),
mp_obj_get_type_qstr(o_in));
- }
+ #endif
}
}
}
@@ -1267,12 +1271,12 @@ mp_obj_t mp_iternext(mp_obj_t o_in) {
}
}
} else {
- if (MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE) {
+ #if MICROPY_ERROR_REPORTING == MICROPY_ERROR_REPORTING_TERSE
mp_raise_TypeError(translate("object not an iterator"));
- } else {
+ #else
mp_raise_TypeError_varg(translate("'%q' object is not an iterator"),
mp_obj_get_type_qstr(o_in));
- }
+ #endif
}
}
}
@@ -1514,6 +1518,10 @@ NORETURN void m_malloc_fail(size_t num_bytes) {
translate("memory allocation failed, allocating %u bytes"), (uint)num_bytes);
}
+NORETURN void mp_raise_arg1(const mp_obj_type_t *exc_type, mp_obj_t arg) {
+ nlr_raise(mp_obj_new_exception_arg1(exc_type, arg));
+}
+
NORETURN void mp_raise_msg(const mp_obj_type_t *exc_type, const compressed_string_t *msg) {
if (msg == NULL) {
nlr_raise(mp_obj_new_exception(exc_type));
@@ -1580,7 +1588,7 @@ NORETURN void mp_raise_TypeError_varg(const compressed_string_t *fmt, ...) {
}
NORETURN void mp_raise_OSError(int errno_) {
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(errno_)));
+ mp_raise_arg1(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(errno_));
}
NORETURN void mp_raise_OSError_msg(const compressed_string_t *msg) {
@@ -1607,7 +1615,7 @@ NORETURN void mp_raise_ConnectionError(const compressed_string_t *msg) {
}
NORETURN void mp_raise_BrokenPipeError(void) {
- nlr_raise(mp_obj_new_exception_arg1(&mp_type_BrokenPipeError, MP_OBJ_NEW_SMALL_INT(MP_EPIPE)));
+ mp_raise_arg1(&mp_type_BrokenPipeError, MP_OBJ_NEW_SMALL_INT(MP_EPIPE));
}
NORETURN void mp_raise_NotImplementedError(const compressed_string_t *msg) {
diff --git a/py/runtime.h b/py/runtime.h
index ad7d0feab..5e8fda35c 100644
--- a/py/runtime.h
+++ b/py/runtime.h
@@ -150,6 +150,7 @@ mp_obj_t mp_import_name(qstr name, mp_obj_t fromlist, mp_obj_t level);
mp_obj_t mp_import_from(mp_obj_t module, qstr name);
void mp_import_all(mp_obj_t module);
+NORETURN void mp_raise_arg1(const mp_obj_type_t *exc_type, mp_obj_t arg);
NORETURN void mp_raise_msg(const mp_obj_type_t *exc_type, const compressed_string_t *msg);
NORETURN void mp_raise_msg_varg(const mp_obj_type_t *exc_type, const compressed_string_t *fmt, ...);
NORETURN void mp_raise_msg_vlist(const mp_obj_type_t *exc_type, const compressed_string_t *fmt, va_list argptr);