summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--py/runtime.c9
-rw-r--r--py/runtime.h1
2 files changed, 10 insertions, 0 deletions
diff --git a/py/runtime.c b/py/runtime.c
index da6c86d97..23fae6041 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -1692,6 +1692,15 @@ NORETURN void mp_raise_OSError(int errno_) {
mp_raise_type_arg(&mp_type_OSError, MP_OBJ_NEW_SMALL_INT(errno_));
}
+NORETURN void mp_raise_OSError_with_filename(int errno_, const char *filename) {
+ vstr_t vstr;
+ vstr_init(&vstr, 32);
+ vstr_printf(&vstr, "can't open %s", filename);
+ mp_obj_t o_str = mp_obj_new_str_from_vstr(&vstr);
+ mp_obj_t args[2] = { MP_OBJ_NEW_SMALL_INT(errno_), MP_OBJ_FROM_PTR(o_str)};
+ nlr_raise(mp_obj_exception_make_new(&mp_type_OSError, 2, 0, args));
+}
+
#if MICROPY_STACK_CHECK || MICROPY_ENABLE_PYSTACK
NORETURN void mp_raise_recursion_depth(void) {
mp_raise_type_arg(&mp_type_RuntimeError, MP_OBJ_NEW_QSTR(MP_QSTR_maximum_space_recursion_space_depth_space_exceeded));
diff --git a/py/runtime.h b/py/runtime.h
index 779b66f2b..36b3caa6c 100644
--- a/py/runtime.h
+++ b/py/runtime.h
@@ -196,6 +196,7 @@ NORETURN void mp_raise_NotImplementedError(mp_rom_error_text_t msg);
NORETURN void mp_raise_type_arg(const mp_obj_type_t *exc_type, mp_obj_t arg);
NORETURN void mp_raise_StopIteration(mp_obj_t arg);
NORETURN void mp_raise_OSError(int errno_);
+NORETURN void mp_raise_OSError_with_filename(int errno_, const char *filename);
NORETURN void mp_raise_recursion_depth(void);
#if MICROPY_BUILTIN_METHOD_CHECK_SELF_ARG