From 33820253e8463b27776eeaad87c792848d26508a Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Sun, 8 Apr 2018 13:49:20 -0700 Subject: [PATCH] Make stack_print_dot_graph function take a language as an argument --- src/runtime/parser.c | 8 ++++---- src/runtime/stack.c | 23 ++++++++++------------- src/runtime/stack.h | 2 +- src/runtime/tree.c | 3 +-- 4 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/runtime/parser.c b/src/runtime/parser.c index 23ce42b1..bfb0ab37 100644 --- a/src/runtime/parser.c +++ b/src/runtime/parser.c @@ -19,10 +19,10 @@ parser__log(self); \ } -#define LOG_STACK() \ - if (self->print_debugging_graphs) { \ - ts_stack_print_dot_graph(self->stack, self->language->symbol_names, stderr); \ - fputs("\n\n", stderr); \ +#define LOG_STACK() \ + if (self->print_debugging_graphs) { \ + ts_stack_print_dot_graph(self->stack, self->language, stderr); \ + fputs("\n\n", stderr); \ } #define LOG_TREE() \ diff --git a/src/runtime/stack.c b/src/runtime/stack.c index 4d9f5efe..76a6e89c 100644 --- a/src/runtime/stack.c +++ b/src/runtime/stack.c @@ -1,4 +1,5 @@ #include "runtime/alloc.h" +#include "runtime/language.h" #include "runtime/tree.h" #include "runtime/array.h" #include "runtime/stack.h" @@ -646,7 +647,7 @@ void ts_stack_clear(Stack *self) { })); } -bool ts_stack_print_dot_graph(Stack *self, const char **symbol_names, FILE *f) { +bool ts_stack_print_dot_graph(Stack *self, const TSLanguage *language, FILE *f) { bool was_recording_allocations = ts_toggle_allocation_recording(false); if (!f) f = stderr; @@ -734,19 +735,15 @@ bool ts_stack_print_dot_graph(Stack *self, const char **symbol_names, FILE *f) { if (!link.tree) { fprintf(f, "color=red"); } else { - if (link.tree->symbol == ts_builtin_sym_error) { - fprintf(f, "label=\"ERROR\""); - } else { - fprintf(f, "label=\""); - if (!link.tree->named) fprintf(f, "'"); - const char *name = symbol_names[link.tree->symbol]; - for (const char *c = name; *c; c++) { - if (*c == '\"' || *c == '\\') fprintf(f, "\\"); - fprintf(f, "%c", *c); - } - if (!link.tree->named) fprintf(f, "'"); - fprintf(f, "\""); + fprintf(f, "label=\""); + if (link.tree->visible && !link.tree->named) fprintf(f, "'"); + const char *name = ts_language_symbol_name(language, link.tree->symbol); + for (const char *c = name; *c; c++) { + if (*c == '\"' || *c == '\\') fprintf(f, "\\"); + fprintf(f, "%c", *c); } + if (link.tree->visible && !link.tree->named) fprintf(f, "'"); + fprintf(f, "\""); fprintf(f, "labeltooltip=\"error_cost: %u\ndynamic_precedence: %u\"", link.tree->error_cost, link.tree->dynamic_precedence); diff --git a/src/runtime/stack.h b/src/runtime/stack.h index 32e68e6e..4a552323 100644 --- a/src/runtime/stack.h +++ b/src/runtime/stack.h @@ -120,7 +120,7 @@ void ts_stack_remove_version(Stack *, StackVersion); void ts_stack_clear(Stack *); -bool ts_stack_print_dot_graph(Stack *, const char **, FILE *); +bool ts_stack_print_dot_graph(Stack *, const TSLanguage *, FILE *); typedef void (*StackIterateCallback)(void *, TSStateId, uint32_t); diff --git a/src/runtime/tree.c b/src/runtime/tree.c index f0ffd1b4..b6dd7a9c 100644 --- a/src/runtime/tree.c +++ b/src/runtime/tree.c @@ -715,8 +715,7 @@ void ts_tree__print_dot_graph(const Tree *self, uint32_t byte_offset, } } -void ts_tree_print_dot_graph(const Tree *self, const TSLanguage *language, - FILE *f) { +void ts_tree_print_dot_graph(const Tree *self, const TSLanguage *language, FILE *f) { fprintf(f, "digraph tree {\n"); fprintf(f, "edge [arrowhead=none]\n"); ts_tree__print_dot_graph(self, 0, language, f);