Unify debugging API for parsing and lexing

This commit is contained in:
Max Brunsfeld 2014-10-17 17:52:54 -07:00
parent 7498725d7f
commit 8cf800ef5d
8 changed files with 58 additions and 80 deletions

View file

@ -40,12 +40,12 @@ void ts_document_set_language(TSDocument *document, const TSLanguage *language)
reparse(document, NULL);
}
void ts_document_debug_parse(TSDocument *document, TSDebugger debugger) {
ts_parser_debug_parse(&document->parser, debugger);
TSDebugger ts_document_get_debugger(const TSDocument *document) {
return ts_parser_get_debugger(&document->parser);
}
void ts_document_debug_lex(TSDocument *document, TSDebugger debugger) {
ts_parser_debug_lex(&document->parser, debugger);
void ts_document_set_debugger(TSDocument *document, TSDebugger debugger) {
ts_parser_set_debugger(&document->parser, debugger);
}
void ts_document_set_input(TSDocument *document, TSInput input) {

View file

@ -1,3 +1,4 @@
#include <stdio.h>
#include "runtime/lexer.h"
#include "tree_sitter/parser.h"
#include "runtime/tree.h"
@ -5,10 +6,11 @@
#include "runtime/debugger.h"
#include "utf8proc.h"
#define DEBUG(...) \
if (lexer->debugger.debug_fn) { \
snprintf(lexer->debug_buffer, TS_DEBUG_BUFFER_SIZE, __VA_ARGS__); \
lexer->debugger.debug_fn(lexer->debugger.data, lexer->debug_buffer); \
#define DEBUG(...) \
if (lexer->debugger.debug_fn) { \
snprintf(lexer->debug_buffer, TS_DEBUG_BUFFER_SIZE, __VA_ARGS__); \
lexer->debugger.debug_fn(lexer->debugger.data, TSDebugTypeLex, \
lexer->debug_buffer); \
}
static const char *empty_chunk = "";

View file

@ -13,11 +13,12 @@
* Debugging
*/
#define DEBUG(...) \
if (parser->debugger.debug_fn) { \
#define DEBUG(...) \
if (parser->lexer.debugger.debug_fn) { \
snprintf(parser->lexer.debug_buffer, TS_DEBUG_BUFFER_SIZE, __VA_ARGS__); \
parser->debugger.debug_fn(parser->debugger.data, \
parser->lexer.debug_buffer); \
parser->lexer.debugger.debug_fn(parser->lexer.debugger.data, \
TSDebugTypeParse, \
parser->lexer.debug_buffer); \
}
#define SYM_NAME(sym) parser->language->symbol_names[sym]
@ -283,8 +284,7 @@ static TSTree *finish(TSParser *parser) {
TSParser ts_parser_make() {
return (TSParser) { .lexer = ts_lexer_make(),
.stack = ts_stack_make(),
.right_stack = ts_stack_make(),
.debugger = ts_debugger_null() };
.right_stack = ts_stack_make() };
}
void ts_parser_destroy(TSParser *parser) {
@ -296,20 +296,15 @@ void ts_parser_destroy(TSParser *parser) {
if (parser->next_lookahead)
ts_tree_release(parser->next_lookahead);
if (parser->debugger.release_fn)
parser->debugger.release_fn(parser->debugger.data);
if (parser->lexer.debugger.release_fn)
parser->lexer.debugger.release_fn(parser->lexer.debugger.data);
}
void ts_parser_debug_parse(TSParser *parser, TSDebugger debugger) {
TSDebugger old_debugger = parser->debugger;
if (old_debugger.release_fn)
old_debugger.release_fn(old_debugger.data);
parser->debugger = debugger;
TSDebugger ts_parser_get_debugger(const TSParser *parser) {
return parser->lexer.debugger;
}
void ts_parser_debug_lex(TSParser *parser, TSDebugger debugger) {
void ts_parser_set_debugger(TSParser *parser, TSDebugger debugger) {
TSDebugger old_debugger = parser->lexer.debugger;
if (old_debugger.release_fn)
old_debugger.release_fn(old_debugger.data);
@ -324,7 +319,7 @@ const TSTree *ts_parser_parse(TSParser *parser, TSInput input,
TSLength position;
if (edit) {
DEBUG("edit pos:%lu inserted:%lu deleted:%lu", edit->position,
edit->chars_inserted, edit->chars_removed);
edit->chars_inserted, edit->chars_removed);
position = break_down_left_stack(parser, *edit);
} else {
DEBUG("new_parse");
@ -362,7 +357,7 @@ const TSTree *ts_parser_parse(TSParser *parser, TSInput input,
case TSParseActionTypeReduce:
DEBUG("reduce sym:%s count:%u", SYM_NAME(action.data.symbol),
action.data.child_count);
action.data.child_count);
reduce(parser, action.data.symbol, action.data.child_count);
break;

View file

@ -15,13 +15,12 @@ typedef struct {
TSTree *lookahead;
TSTree *next_lookahead;
const TSLanguage *language;
TSDebugger debugger;
} TSParser;
TSParser ts_parser_make();
void ts_parser_destroy(TSParser *);
void ts_parser_debug_parse(TSParser *, TSDebugger);
void ts_parser_debug_lex(TSParser *, TSDebugger);
TSDebugger ts_parser_get_debugger(const TSParser *);
void ts_parser_set_debugger(TSParser *, TSDebugger);
const TSTree *ts_parser_parse(TSParser *, TSInput, TSInputEdit *);
#ifdef __cplusplus