From f7d71cd5944e8721136c6332202c862fed00b131 Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Mon, 13 Jul 2015 07:50:39 +0200 Subject: [PATCH] More parse and compile script to main thread --- src/omv/main.c | 7 ++++++- src/omv/usbdbg.c | 13 ++++--------- src/omv/usbdbg.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/omv/main.c b/src/omv/main.c index 7bf75616b..216ea560f 100644 --- a/src/omv/main.c +++ b/src/omv/main.c @@ -320,7 +320,12 @@ soft_reset: if (nlr_push(&nlr) == 0) { while (usbdbg_script_ready()) { nlr_buf_t nlr; - mp_obj_t script= usbdbg_get_script(); + vstr_t *script_buf = usbdbg_get_script(); + // parse and compile script + mp_lexer_t *lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, + vstr_str(script_buf), vstr_len(script_buf), 0); + mp_parse_node_t pn = mp_parse(lex, MP_PARSE_FILE_INPUT); + mp_obj_t script = mp_compile(pn, lex->source_name, MP_EMIT_OPT_NONE, false); // clear script flag usbdbg_clr_script(); diff --git a/src/omv/usbdbg.c b/src/omv/usbdbg.c index d2b4b548d..ffc0d7575 100644 --- a/src/omv/usbdbg.c +++ b/src/omv/usbdbg.c @@ -25,7 +25,6 @@ static int xfer_length; static enum usbdbg_cmd cmd; static vstr_t script_buf; -static mp_obj_t script; static int script_ready=0; mp_obj_t mp_const_ide_interrupt = MP_OBJ_NULL; @@ -45,9 +44,11 @@ int usbdbg_script_ready() return script_ready; } -mp_obj_t usbdbg_get_script() +vstr_t *usbdbg_get_script() { - return script; + vstr_t *scr = vstr_new(); + vstr_add_strn(scr, vstr_str(&script_buf), vstr_len(&script_buf)); + return scr; } void usbdbg_clr_script() @@ -131,12 +132,6 @@ void usbdbg_data_out(void *buffer, int length) // set script ready flag script_ready = 1; - // parse and compile script - mp_lexer_t *lex = mp_lexer_new_from_str_len(MP_QSTR__lt_stdin_gt_, - vstr_str(&script_buf), vstr_len(&script_buf), 0); - mp_parse_node_t pn = mp_parse(lex, MP_PARSE_FILE_INPUT); - script = mp_compile(pn, lex->source_name, MP_EMIT_OPT_NONE, false); - // interrupt running script/REPL mp_obj_exception_clear_traceback(mp_const_ide_interrupt); pendsv_nlr_jump_hard(mp_const_ide_interrupt); diff --git a/src/omv/usbdbg.h b/src/omv/usbdbg.h index 3208c9883..1aa9a5571 100644 --- a/src/omv/usbdbg.h +++ b/src/omv/usbdbg.h @@ -50,6 +50,6 @@ enum usbdbg_cmd { }; void usbdbg_init(); int usbdbg_script_ready(); -mp_obj_t usbdbg_get_script(); +vstr_t *usbdbg_get_script(); void usbdbg_clr_script(); #endif /* __USBDBG_H__ */