diff --git a/include/tree_sitter/parser.h b/include/tree_sitter/parser.h index 7ce0d3ca..79f658ff 100644 --- a/include/tree_sitter/parser.h +++ b/include/tree_sitter/parser.h @@ -95,12 +95,12 @@ struct TSLanguage { #define DEBUG_LEX(...) \ if (lexer->debug) { \ - fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, "LEX " __VA_ARGS__); \ fprintf(stderr, "\n"); \ } #define START_LEXER() \ - DEBUG_LEX("LEX %d", lex_state); \ + DEBUG_LEX("START %d", lex_state); \ char lookahead; \ next_state: \ lookahead = ts_lexer_lookahead_char(lexer); \ @@ -112,7 +112,7 @@ struct TSLanguage { { \ DEBUG_LEX("ADVANCE %d", state_index); \ if (ts_lexer_is_done(lexer)) { \ - DEBUG_LEX("END_OF_INPUT"); \ + DEBUG_LEX("END"); \ return NULL; \ } \ ts_lexer_advance(lexer); \ diff --git a/src/runtime/parser.c b/src/runtime/parser.c index 06b39f84..c1ca2efb 100644 --- a/src/runtime/parser.c +++ b/src/runtime/parser.c @@ -6,6 +6,12 @@ #include "runtime/stack.h" #include "runtime/parser.h" +#define DEBUG_PARSE(...) \ + if (parser->debug) { \ + fprintf(stderr, "PARSE " __VA_ARGS__); \ + fprintf(stderr, "\n"); \ + } + static const TSParseAction *actions_for_state(const TSLanguage *language, TSStateId state) { return language->parse_table + (state * language->symbol_count); @@ -144,6 +150,7 @@ static int handle_error(TSParser *parser) { parser->language, state_after_error)[parser->lookahead->symbol]; if (action_after_error.type != TSParseActionTypeError) { + DEBUG_PARSE("RECOVER %u", state_after_error); ts_stack_shrink(&parser->stack, i + 1); ts_stack_push(&parser->stack, state_after_error, error); ts_tree_release(error); @@ -200,12 +207,6 @@ void ts_parser_destroy(TSParser *parser) { ts_stack_delete(&parser->stack); } -#define DEBUG_PARSE(...) \ - if (parser->debug) { \ - fprintf(stderr, __VA_ARGS__); \ - fprintf(stderr, "\n"); \ - } - const TSTree *ts_parser_parse(TSParser *parser, TSInput input, TSInputEdit *edit) { if (!edit) @@ -252,6 +253,7 @@ const TSTree *ts_parser_parse(TSParser *parser, TSInput input, return get_root(parser); case TSParseActionTypeError: + DEBUG_PARSE("ERROR"); if (!handle_error(parser)) return get_root(parser); break;