@@ -418,10 +418,18 @@ void do_repl(void) {
418418 }
419419
420420 mp_lexer_t * lex = mp_lexer_new_from_str_len ("<stdin>" , vstr_str (& line ), vstr_len (& line ), 0 );
421- mp_parse_node_t pn = mp_parse (lex , MP_PARSE_SINGLE_INPUT );
422- mp_lexer_free (lex );
423-
424- if (pn != MP_PARSE_NODE_NULL ) {
421+ qstr parse_exc_id ;
422+ const char * parse_exc_msg ;
423+ mp_parse_node_t pn = mp_parse (lex , MP_PARSE_SINGLE_INPUT , & parse_exc_id , & parse_exc_msg );
424+
425+ if (pn == MP_PARSE_NODE_NULL ) {
426+ // parse error
427+ mp_lexer_show_error_pythonic_prefix (lex );
428+ printf ("%s: %s\n" , qstr_str (parse_exc_id ), parse_exc_msg );
429+ mp_lexer_free (lex );
430+ } else {
431+ // parse okay
432+ mp_lexer_free (lex );
425433 mp_obj_t module_fun = mp_compile (pn , true);
426434 if (module_fun != mp_const_none ) {
427435 nlr_buf_t nlr ;
@@ -455,13 +463,20 @@ bool do_file(const char *filename) {
455463 return false;
456464 }
457465
458- mp_parse_node_t pn = mp_parse (lex , MP_PARSE_FILE_INPUT );
459- mp_lexer_free (lex );
466+ qstr parse_exc_id ;
467+ const char * parse_exc_msg ;
468+ mp_parse_node_t pn = mp_parse (lex , MP_PARSE_FILE_INPUT , & parse_exc_id , & parse_exc_msg );
460469
461470 if (pn == MP_PARSE_NODE_NULL ) {
471+ // parse error
472+ mp_lexer_show_error_pythonic_prefix (lex );
473+ printf ("%s: %s\n" , qstr_str (parse_exc_id ), parse_exc_msg );
474+ mp_lexer_free (lex );
462475 return false;
463476 }
464477
478+ mp_lexer_free (lex );
479+
465480 mp_obj_t module_fun = mp_compile (pn , false);
466481 if (module_fun == mp_const_none ) {
467482 return false;
@@ -1073,7 +1088,9 @@ int main(void) {
10731088 // nalloc=1740;6340;6836 -> 140;4600;496 bytes for lexer, parser, compiler
10741089 printf ("lex; al=%u\n" , m_get_total_bytes_allocated ());
10751090 sys_tick_delay_ms (1000 );
1076- mp_parse_node_t pn = mp_parse (lex , MP_PARSE_FILE_INPUT );
1091+ qstr parse_exc_id ;
1092+ const char * parse_exc_msg ;
1093+ mp_parse_node_t pn = mp_parse (lex , MP_PARSE_FILE_INPUT , & parse_exc_id , & parse_exc_msg );
10771094 mp_lexer_free (lex );
10781095 if (pn != MP_PARSE_NODE_NULL ) {
10791096 printf ("pars;al=%u\n" , m_get_total_bytes_allocated ());
0 commit comments