From f92ad0482483b8e2a546223d9eaebb458085e4f3 Mon Sep 17 00:00:00 2001 From: Andrew Hlynskyi Date: Sun, 7 Feb 2021 02:59:59 +0200 Subject: [PATCH 1/3] parser.c - added LOG_LOOKAHEAD macro to escape \n in logging --- lib/src/parser.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/lib/src/parser.c b/lib/src/parser.c index 0c711b0c..0aa02e2c 100644 --- a/lib/src/parser.c +++ b/lib/src/parser.c @@ -25,6 +25,41 @@ ts_parser__log(self); \ } +#define LOG_LOOKAHEAD(symbol_name, size, ...) \ + if (self->lexer.logger.log || self->dot_graph_file) { \ + char *buf = self->lexer.debug_buffer; \ + const char *symbol = symbol_name; \ + int off = sprintf(buf, "lexed_lookahead sym:"); \ + for ( \ + int i = 0; \ + symbol[i] != '\0' \ + && off < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; \ + i++ \ + ) { \ + switch (symbol[i]) { \ + case '\t': buf[off++] = '\\'; buf[off++] = 't'; break; \ + case '\n': buf[off++] = '\\'; buf[off++] = 'n'; break; \ + case '\v': buf[off++] = '\\'; buf[off++] = 'v'; break; \ + case '\f': buf[off++] = '\\'; buf[off++] = 'f'; break; \ + case '\r': buf[off++] = '\\'; buf[off++] = 'r'; break; \ + default: buf[off++] = symbol[i]; break; \ + } \ + } \ + off += snprintf( \ + buf + off, \ + TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, \ + ", size:%u", \ + size \ + ); \ + if (sizeof( (char[]){#__VA_ARGS__} ) == 1) \ + snprintf( \ + buf + off, \ + TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, \ + ", " __VA_ARGS__ \ + ); \ + ts_parser__log(self); \ + } + #define LOG_STACK() \ if (self->dot_graph_file) { \ ts_stack_print_dot_graph(self->stack, self->language, self->dot_graph_file); \ @@ -477,10 +512,10 @@ static Subtree ts_parser__lex( self->language ); - LOG( - "lexed_lookahead sym:%s, size:%u, character:'%c'", + LOG_LOOKAHEAD( SYM_NAME(ts_subtree_symbol(result)), ts_subtree_total_size(result).bytes, + "character:'%c'", first_error_character ); } else { @@ -534,8 +569,7 @@ static Subtree ts_parser__lex( ); } - LOG( - "lexed_lookahead sym:%s, size:%u", + LOG_LOOKAHEAD( SYM_NAME(ts_subtree_symbol(result)), ts_subtree_total_size(result).bytes ); From 51f8b16bb0aa65b594d01e1e5dc2c150f49d41ba Mon Sep 17 00:00:00 2001 From: Andrew Hlynskyi Date: Mon, 8 Feb 2021 08:08:50 +0200 Subject: [PATCH 2/3] parser.c - make LOG_LOKAHEAD simpler according to disscussion in PR #917 --- lib/src/parser.c | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/lib/src/parser.c b/lib/src/parser.c index 0aa02e2c..fa15477a 100644 --- a/lib/src/parser.c +++ b/lib/src/parser.c @@ -25,7 +25,7 @@ ts_parser__log(self); \ } -#define LOG_LOOKAHEAD(symbol_name, size, ...) \ +#define LOG_LOOKAHEAD(symbol_name, size) \ if (self->lexer.logger.log || self->dot_graph_file) { \ char *buf = self->lexer.debug_buffer; \ const char *symbol = symbol_name; \ @@ -45,18 +45,12 @@ default: buf[off++] = symbol[i]; break; \ } \ } \ - off += snprintf( \ + snprintf( \ buf + off, \ TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, \ ", size:%u", \ size \ ); \ - if (sizeof( (char[]){#__VA_ARGS__} ) == 1) \ - snprintf( \ - buf + off, \ - TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, \ - ", " __VA_ARGS__ \ - ); \ ts_parser__log(self); \ } @@ -514,9 +508,7 @@ static Subtree ts_parser__lex( LOG_LOOKAHEAD( SYM_NAME(ts_subtree_symbol(result)), - ts_subtree_total_size(result).bytes, - "character:'%c'", - first_error_character + ts_subtree_total_size(result).bytes ); } else { if (self->lexer.token_end_position.bytes < self->lexer.token_start_position.bytes) { From 6448053efaee7327a9da9c1bc1656b3a23e2e85f Mon Sep 17 00:00:00 2001 From: Andrew Hlynskyi Date: Mon, 8 Feb 2021 08:10:57 +0200 Subject: [PATCH 3/3] parser.c - added backslash escaping in LOG_LOOKAHEAD to make it clear in case of \n --- lib/src/parser.c | 55 ++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/lib/src/parser.c b/lib/src/parser.c index fa15477a..e9d87ac9 100644 --- a/lib/src/parser.c +++ b/lib/src/parser.c @@ -25,33 +25,34 @@ ts_parser__log(self); \ } -#define LOG_LOOKAHEAD(symbol_name, size) \ - if (self->lexer.logger.log || self->dot_graph_file) { \ - char *buf = self->lexer.debug_buffer; \ - const char *symbol = symbol_name; \ - int off = sprintf(buf, "lexed_lookahead sym:"); \ - for ( \ - int i = 0; \ - symbol[i] != '\0' \ - && off < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; \ - i++ \ - ) { \ - switch (symbol[i]) { \ - case '\t': buf[off++] = '\\'; buf[off++] = 't'; break; \ - case '\n': buf[off++] = '\\'; buf[off++] = 'n'; break; \ - case '\v': buf[off++] = '\\'; buf[off++] = 'v'; break; \ - case '\f': buf[off++] = '\\'; buf[off++] = 'f'; break; \ - case '\r': buf[off++] = '\\'; buf[off++] = 'r'; break; \ - default: buf[off++] = symbol[i]; break; \ - } \ - } \ - snprintf( \ - buf + off, \ - TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, \ - ", size:%u", \ - size \ - ); \ - ts_parser__log(self); \ +#define LOG_LOOKAHEAD(symbol_name, size) \ + if (self->lexer.logger.log || self->dot_graph_file) { \ + char *buf = self->lexer.debug_buffer; \ + const char *symbol = symbol_name; \ + int off = sprintf(buf, "lexed_lookahead sym:"); \ + for ( \ + int i = 0; \ + symbol[i] != '\0' \ + && off < TREE_SITTER_SERIALIZATION_BUFFER_SIZE; \ + i++ \ + ) { \ + switch (symbol[i]) { \ + case '\t': buf[off++] = '\\'; buf[off++] = 't'; break; \ + case '\n': buf[off++] = '\\'; buf[off++] = 'n'; break; \ + case '\v': buf[off++] = '\\'; buf[off++] = 'v'; break; \ + case '\f': buf[off++] = '\\'; buf[off++] = 'f'; break; \ + case '\r': buf[off++] = '\\'; buf[off++] = 'r'; break; \ + case '\\': buf[off++] = '\\'; buf[off++] = '\\'; break; \ + default: buf[off++] = symbol[i]; break; \ + } \ + } \ + snprintf( \ + buf + off, \ + TREE_SITTER_SERIALIZATION_BUFFER_SIZE - off, \ + ", size:%u", \ + size \ + ); \ + ts_parser__log(self); \ } #define LOG_STACK() \