Allow real memory errors (from locked gc) to be reported with traceback.
This commit is contained in:
parent
67f25dfe6f
commit
3556e45711
|
@ -51,6 +51,7 @@
|
||||||
#include "parsehelper.h"
|
#include "parsehelper.h"
|
||||||
#include "compile.h"
|
#include "compile.h"
|
||||||
#include "stackctrl.h"
|
#include "stackctrl.h"
|
||||||
|
#include "gc.h"
|
||||||
|
|
||||||
#if 0 // print debugging info
|
#if 0 // print debugging info
|
||||||
#define DEBUG_PRINT (1)
|
#define DEBUG_PRINT (1)
|
||||||
|
@ -1207,7 +1208,13 @@ mp_obj_t mp_parse_compile_execute(mp_lexer_t *lex, mp_parse_input_kind_t parse_i
|
||||||
|
|
||||||
void *m_malloc_fail(size_t num_bytes) {
|
void *m_malloc_fail(size_t num_bytes) {
|
||||||
DEBUG_printf("memory allocation failed, allocating " UINT_FMT " bytes\n", num_bytes);
|
DEBUG_printf("memory allocation failed, allocating " UINT_FMT " bytes\n", num_bytes);
|
||||||
nlr_raise((mp_obj_t)&mp_const_MemoryError_obj);
|
if (gc_is_locked()) {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg(& mp_type_MemoryError,
|
||||||
|
"memory allocation failed, heap is locked"));
|
||||||
|
} else {
|
||||||
|
nlr_raise(mp_obj_new_exception_msg_varg(& mp_type_MemoryError,
|
||||||
|
"memory allocation failed, allocating " UINT_FMT " bytes", num_bytes));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
NORETURN void mp_not_implemented(const char *msg) {
|
NORETURN void mp_not_implemented(const char *msg) {
|
||||||
|
|
|
@ -67,8 +67,9 @@ int vprintf(const char *fmt, va_list ap) {
|
||||||
}
|
}
|
||||||
|
|
||||||
#if MICROPY_DEBUG_PRINTERS
|
#if MICROPY_DEBUG_PRINTERS
|
||||||
|
mp_uint_t mp_verbose_flag = 1;
|
||||||
|
|
||||||
int DEBUG_printf(const char *fmt, ...) {
|
int DEBUG_printf(const char *fmt, ...) {
|
||||||
(void)stream;
|
|
||||||
va_list ap;
|
va_list ap;
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
int ret = pfenv_vprintf(&pfenv_stdout, fmt, ap);
|
int ret = pfenv_vprintf(&pfenv_stdout, fmt, ap);
|
||||||
|
|
|
@ -72,7 +72,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (1)
|
#define MICROPY_ENABLE_EMERGENCY_EXCEPTION_BUF (1)
|
||||||
#define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (128)
|
#define MICROPY_EMERGENCY_EXCEPTION_BUF_SIZE (256)
|
||||||
|
|
||||||
extern const struct _mp_obj_module_t mp_module_os;
|
extern const struct _mp_obj_module_t mp_module_os;
|
||||||
extern const struct _mp_obj_module_t mp_module_time;
|
extern const struct _mp_obj_module_t mp_module_time;
|
||||||
|
|
Loading…
Reference in New Issue