Don't store tree's hidden children in a separate array
Just mark hidden trees as such, and skip them when pretty-printing a tree
This commit is contained in:
parent
95fbdb6fdb
commit
779bf0d745
17 changed files with 167 additions and 243 deletions
|
|
@ -24,7 +24,7 @@ typedef struct {
|
|||
|
||||
TSLexer ts_lexer_make();
|
||||
int ts_lexer_advance(TSLexer *lexer);
|
||||
TSTree * ts_lexer_build_node(TSLexer *lexer, TSSymbol symbol);
|
||||
TSTree * ts_lexer_build_node(TSLexer *lexer, TSSymbol symbol, int is_hidden);
|
||||
|
||||
static inline size_t ts_lexer_position(const TSLexer *lexer) {
|
||||
return lexer->chunk_start + lexer->position_in_chunk;
|
||||
|
|
@ -141,13 +141,13 @@ ts_lexer_start_token(&parser->lexer);
|
|||
#define ACCEPT_TOKEN(symbol) \
|
||||
{ \
|
||||
DEBUG_LEX("TOKEN %s", ts_symbol_names[symbol]); \
|
||||
return ts_lexer_build_node(&parser->lexer, symbol); \
|
||||
return ts_lexer_build_node(&parser->lexer, symbol, ts_hidden_symbol_flags[symbol]); \
|
||||
}
|
||||
|
||||
#define LEX_ERROR() \
|
||||
{ \
|
||||
DEBUG_LEX("ERROR"); \
|
||||
return ts_lexer_build_node(&parser->lexer, ts_builtin_sym_error); \
|
||||
return ts_lexer_build_node(&parser->lexer, ts_builtin_sym_error, 0); \
|
||||
}
|
||||
|
||||
#define LEX_PANIC() \
|
||||
|
|
@ -171,7 +171,6 @@ ts_lexer_start_token(&parser->lexer);
|
|||
#define ACCEPT_INPUT() \
|
||||
{ .type = TSParseActionTypeAccept }
|
||||
|
||||
|
||||
#define EXPORT_PARSER(constructor_name) \
|
||||
TSParser * constructor_name() { \
|
||||
return ts_parser_make((TSParserConfig) { \
|
||||
|
|
|
|||
|
|
@ -13,8 +13,15 @@ typedef unsigned short TSSymbol;
|
|||
#define ts_start_sym 2
|
||||
|
||||
typedef struct TSTree TSTree;
|
||||
TSTree * ts_tree_make_leaf(TSSymbol symbol, size_t size, size_t offset);
|
||||
TSTree * ts_tree_make_node(TSSymbol symbol, size_t child_count, size_t immediate_child_count, TSTree **children);
|
||||
|
||||
typedef enum {
|
||||
TSTreeOptionsHidden = 1,
|
||||
TSTreeOptionsExtra = 2,
|
||||
TSTreeOptionsWrapper = 4,
|
||||
} TSTreeOptions;
|
||||
|
||||
TSTree * ts_tree_make_leaf(TSSymbol symbol, size_t size, size_t offset, int is_hidden);
|
||||
TSTree * ts_tree_make_node(TSSymbol symbol, size_t child_count, TSTree **children, int is_hidden);
|
||||
TSTree * ts_tree_make_error(char lookahead_char, size_t expected_input_count, const TSSymbol *expected_inputs, size_t size, size_t offset);
|
||||
void ts_tree_retain(TSTree *tree);
|
||||
void ts_tree_release(TSTree *tree);
|
||||
|
|
@ -22,7 +29,6 @@ int ts_tree_equals(const TSTree *tree1, const TSTree *tree2);
|
|||
char * ts_tree_string(const TSTree *tree, const char **names);
|
||||
char * ts_tree_error_string(const TSTree *tree, const char **names);
|
||||
TSTree ** ts_tree_children(const TSTree *tree, size_t *count);
|
||||
TSTree ** ts_tree_immediate_children(const TSTree *tree, size_t *count);
|
||||
size_t ts_tree_total_size(const TSTree *tree);
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue