From 2669933d06fd936bb9b2f65be1a2526f9fcfd37e Mon Sep 17 00:00:00 2001 From: joshvera Date: Wed, 25 Nov 2015 11:08:44 -0500 Subject: [PATCH] Implement ts_find_parent_offset_point --- src/runtime/node.c | 2 +- src/runtime/tree.c | 13 +++++++++++++ src/runtime/tree.h | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/runtime/node.c b/src/runtime/node.c index 3ec0678f..8dbb255f 100644 --- a/src/runtime/node.c +++ b/src/runtime/node.c @@ -74,7 +74,7 @@ static inline TSNode ts_node__prev_sibling(TSNode self, TSNodeType type) { do { size_t index = tree->context.index; offset = ts_length_sub(offset, tree->context.offset); - offset_point = ts_find_parent_offset_point(tree, point); + offset_point = ts_find_parent_offset_point(tree); tree = tree->context.parent; if (!tree) break; diff --git a/src/runtime/tree.c b/src/runtime/tree.c index d7347ab6..31c13815 100644 --- a/src/runtime/tree.c +++ b/src/runtime/tree.c @@ -113,6 +113,19 @@ void ts_tree_release(TSTree *self) { } } +TSPoint ts_find_parent_offset_point(const TSTree *self) { + TSPoint size_point = self->size_point; + const TSTree *parent = self; + TSPoint current_offset_point; + + do { + parent = parent->context.parent; + current_offset_point = parent->context.offset_point; + } while (current_offset_point.line == 0); + + return (TSPoint){ .line = size_point.line, .column = current_offset_point.column }; +} + TSLength ts_tree_total_size(const TSTree *self) { return ts_length_add(self->padding, self->size); } diff --git a/src/runtime/tree.h b/src/runtime/tree.h index 9a51a022..582b3381 100644 --- a/src/runtime/tree.h +++ b/src/runtime/tree.h @@ -51,6 +51,8 @@ void ts_tree_release(TSTree *tree); bool ts_tree_eq(const TSTree *tree1, const TSTree *tree2); char *ts_tree_string(const TSTree *tree, const char **names, bool include_anonymous); + +TSPoint ts_find_parent_offset_point(const TSTree *self); TSLength ts_tree_total_size(const TSTree *tree); TSPoint ts_tree_total_size_point(const TSTree *self); void ts_tree_prepend_children(TSTree *, size_t, TSTree **);