Change mp_compile so that it returns a function object for the module.
This commit is contained in:
parent
14f945c2ca
commit
1fb031744f
@ -11,8 +11,8 @@
|
||||
#include "lexer.h"
|
||||
#include "lexerunix.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "compile.h"
|
||||
#include "runtime0.h"
|
||||
#include "runtime.h"
|
||||
#include "map.h"
|
||||
|
20
py/compile.c
20
py/compile.c
@ -10,9 +10,11 @@
|
||||
#include "lexer.h"
|
||||
#include "parse.h"
|
||||
#include "scope.h"
|
||||
#include "compile.h"
|
||||
#include "runtime0.h"
|
||||
#include "emit.h"
|
||||
#include "obj.h"
|
||||
#include "compile.h"
|
||||
#include "runtime.h"
|
||||
|
||||
// TODO need to mangle __attr names
|
||||
|
||||
@ -3016,7 +3018,7 @@ void compile_scope_compute_things(compiler_t *comp, scope_t *scope) {
|
||||
}
|
||||
}
|
||||
|
||||
bool mp_compile(mp_parse_node_t pn, bool is_repl) {
|
||||
mp_obj_t mp_compile(mp_parse_node_t pn, bool is_repl) {
|
||||
compiler_t *comp = m_new(compiler_t, 1);
|
||||
|
||||
comp->qstr___class__ = qstr_from_str_static("__class__");
|
||||
@ -3146,7 +3148,19 @@ bool mp_compile(mp_parse_node_t pn, bool is_repl) {
|
||||
}
|
||||
}
|
||||
|
||||
bool had_error = comp->had_error;
|
||||
m_del_obj(compiler_t, comp);
|
||||
|
||||
return !comp->had_error;
|
||||
if (had_error) {
|
||||
// TODO return a proper error message
|
||||
return mp_const_none;
|
||||
} else {
|
||||
#if MICROPY_EMIT_CPYTHON
|
||||
// can't create code, so just return true
|
||||
return mp_const_true;
|
||||
#else
|
||||
// return function that executes the outer module
|
||||
return rt_make_function_from_id(1);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
bool mp_compile(mp_parse_node_t pn, bool is_repl);
|
||||
mp_obj_t mp_compile(mp_parse_node_t pn, bool is_repl);
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include "mpconfig.h"
|
||||
#include "lexer.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "scope.h"
|
||||
#include "runtime0.h"
|
||||
#include "emit.h"
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include "mpconfig.h"
|
||||
#include "lexer.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "scope.h"
|
||||
#include "runtime0.h"
|
||||
#include "emit.h"
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include "mpconfig.h"
|
||||
#include "lexer.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "scope.h"
|
||||
#include "runtime0.h"
|
||||
#include "emit.h"
|
||||
|
@ -8,7 +8,6 @@
|
||||
#include "misc.h"
|
||||
#include "mpconfig.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "runtime.h"
|
||||
|
||||
|
@ -5,7 +5,6 @@
|
||||
#include "misc.h"
|
||||
#include "mpconfig.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "runtime.h"
|
||||
|
||||
|
20
stm/main.c
20
stm/main.c
@ -20,8 +20,8 @@
|
||||
#include "lexer.h"
|
||||
#include "lexerstm.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "compile.h"
|
||||
#include "runtime0.h"
|
||||
#include "runtime.h"
|
||||
#include "repl.h"
|
||||
@ -489,9 +489,7 @@ void do_repl(void) {
|
||||
mp_lexer_free(lex);
|
||||
|
||||
if (pn != MP_PARSE_NODE_NULL) {
|
||||
bool comp_ok = mp_compile(pn, true);
|
||||
if (comp_ok) {
|
||||
mp_obj_t module_fun = rt_make_function_from_id(1);
|
||||
mp_obj_t module_fun = mp_compile(pn, true);
|
||||
if (module_fun != mp_const_none) {
|
||||
nlr_buf_t nlr;
|
||||
uint32_t start = sys_tick_counter;
|
||||
@ -511,7 +509,6 @@ void do_repl(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stdout_tx_str("\r\n");
|
||||
}
|
||||
@ -532,12 +529,7 @@ bool do_file(const char *filename) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool comp_ok = mp_compile(pn, false);
|
||||
if (!comp_ok) {
|
||||
return false;
|
||||
}
|
||||
|
||||
mp_obj_t module_fun = rt_make_function_from_id(1);
|
||||
mp_obj_t module_fun = mp_compile(pn, false);
|
||||
if (module_fun == mp_const_none) {
|
||||
return false;
|
||||
}
|
||||
@ -1133,17 +1125,15 @@ soft_reset:
|
||||
printf("pars;al=%u\n", m_get_total_bytes_allocated());
|
||||
sys_tick_delay_ms(1000);
|
||||
//parse_node_show(pn, 0);
|
||||
bool comp_ok = mp_compile(pn, false);
|
||||
mp_obj_t module_fun = mp_compile(pn, false);
|
||||
printf("comp;al=%u\n", m_get_total_bytes_allocated());
|
||||
sys_tick_delay_ms(1000);
|
||||
|
||||
if (!comp_ok) {
|
||||
if (module_fun == mp_const_none) {
|
||||
printf("compile error\n");
|
||||
} else {
|
||||
// execute it!
|
||||
|
||||
mp_obj_t module_fun = rt_make_function_from_id(1);
|
||||
|
||||
// flash once
|
||||
led_state(PYB_LED_G1, 1);
|
||||
sys_tick_delay_ms(100);
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include "misc.h"
|
||||
#include "lexer.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "map.h"
|
||||
#include "runtime.h"
|
||||
|
@ -9,7 +9,6 @@
|
||||
#include "misc.h"
|
||||
#include "mpconfig.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "runtime.h"
|
||||
|
||||
|
@ -8,8 +8,8 @@
|
||||
#include "lexer.h"
|
||||
#include "lexerunix.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "compile.h"
|
||||
#include "runtime0.h"
|
||||
#include "runtime.h"
|
||||
|
||||
@ -37,10 +37,10 @@ void do_file(const char *file) {
|
||||
//printf("----------------\n");
|
||||
//parse_node_show(pn, 0);
|
||||
//printf("----------------\n");
|
||||
bool comp_ok = mp_compile(pn, false);
|
||||
mp_obj_t module_fun = mp_compile(pn, false);
|
||||
//printf("----------------\n");
|
||||
|
||||
if (!comp_ok) {
|
||||
if (module_fun == mp_const_none) {
|
||||
printf("compile error\n");
|
||||
}
|
||||
}
|
||||
|
14
unix/main.c
14
unix/main.c
@ -9,8 +9,8 @@
|
||||
#include "lexer.h"
|
||||
#include "lexerunix.h"
|
||||
#include "parse.h"
|
||||
#include "compile.h"
|
||||
#include "obj.h"
|
||||
#include "compile.h"
|
||||
#include "runtime0.h"
|
||||
#include "runtime.h"
|
||||
#include "repl.h"
|
||||
@ -85,9 +85,7 @@ static void do_repl(void) {
|
||||
|
||||
if (pn != MP_PARSE_NODE_NULL) {
|
||||
//mp_parse_node_show(pn, 0);
|
||||
bool comp_ok = mp_compile(pn, true);
|
||||
if (comp_ok) {
|
||||
mp_obj_t module_fun = rt_make_function_from_id(1);
|
||||
mp_obj_t module_fun = mp_compile(pn, true);
|
||||
if (module_fun != mp_const_none) {
|
||||
nlr_buf_t nlr;
|
||||
if (nlr_push(&nlr) == 0) {
|
||||
@ -102,7 +100,6 @@ static void do_repl(void) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void do_file(const char *file) {
|
||||
// hack: set dir for import based on where this file is
|
||||
@ -142,7 +139,7 @@ void do_file(const char *file) {
|
||||
//printf("----------------\n");
|
||||
//parse_node_show(pn, 0);
|
||||
//printf("----------------\n");
|
||||
bool comp_ok = mp_compile(pn, false);
|
||||
mp_obj_t module_fun = mp_compile(pn, false);
|
||||
//printf("----------------\n");
|
||||
|
||||
#if MICROPY_EMIT_CPYTHON
|
||||
@ -150,10 +147,8 @@ void do_file(const char *file) {
|
||||
printf("compile error\n");
|
||||
}
|
||||
#else
|
||||
if (1 && comp_ok) {
|
||||
if (1 && module_fun != mp_const_none) {
|
||||
// execute it
|
||||
mp_obj_t module_fun = rt_make_function_from_id(1);
|
||||
if (module_fun != mp_const_none) {
|
||||
nlr_buf_t nlr;
|
||||
if (nlr_push(&nlr) == 0) {
|
||||
rt_call_function_0(module_fun);
|
||||
@ -164,7 +159,6 @@ void do_file(const char *file) {
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user