Cache parent nodes to speed up ts_node_parent in common cases

This commit is contained in:
Max Brunsfeld 2018-05-29 16:00:32 -07:00
parent 69d8c6f5e6
commit f3014cb767
4 changed files with 87 additions and 14 deletions

View file

@ -5,13 +5,25 @@
extern "C" {
#endif
typedef struct {
const Subtree *child;
const Subtree *parent;
Length position;
TSSymbol alias_symbol;
} ParentCacheEntry;
struct TSTree {
const Subtree *root;
const TSLanguage *language;
ParentCacheEntry *parent_cache;
uint32_t parent_cache_start;
uint32_t parent_cache_size;
};
TSTree *ts_tree_new(const Subtree *root, const TSLanguage *language);
TSNode ts_node_new(const TSTree *, const Subtree *, Length, TSSymbol);
TSNode ts_tree_get_cached_parent(const TSTree *, const TSNode *);
void ts_tree_set_cached_parent(const TSTree *, const TSNode *, const TSNode *);
#ifdef __cplusplus
}