aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2022-08-25 18:24:56 +0200
committerbfredl <bjorn.linse@gmail.com>2022-08-25 18:24:56 +0200
commite5fe41198c57a746b282fdfcde5ccb7c5adad605 (patch)
tree9ba976096b9be401831710f665f28495ed68a02e /src
parent8554164b1e985e552576cf3dcf1178a959ebf5e3 (diff)
downloadrneovim-e5fe41198c57a746b282fdfcde5ccb7c5adad605.tar.gz
rneovim-e5fe41198c57a746b282fdfcde5ccb7c5adad605.tar.bz2
rneovim-e5fe41198c57a746b282fdfcde5ccb7c5adad605.zip
fix(treesitter): more efficient node:root()
Diffstat (limited to 'src')
-rw-r--r--src/nvim/lua/treesitter.c15
1 files changed, 3 insertions, 12 deletions
diff --git a/src/nvim/lua/treesitter.c b/src/nvim/lua/treesitter.c
index 8803fd452c..7ff4fbbff4 100644
--- a/src/nvim/lua/treesitter.c
+++ b/src/nvim/lua/treesitter.c
@@ -623,7 +623,7 @@ void push_tree(lua_State *L, TSTree *tree, bool do_copy)
lua_setfenv(L, -2); // [udata]
}
-static TSTree **tree_check(lua_State *L, uint16_t index)
+static TSTree **tree_check(lua_State *L, int index)
{
TSTree **ud = luaL_checkudata(L, index, TS_META_TREE);
return ud;
@@ -1093,22 +1093,13 @@ static int node_named_children(lua_State *L)
static int node_root(lua_State *L)
{
- TSNode parent;
- TSNode result;
-
TSNode node;
if (!node_check(L, 1, &node)) {
return 0;
}
- parent = node;
- result = node;
-
- while (!ts_node_is_null(parent)){
- result = parent;
- parent = ts_node_parent(result);
- }
- push_node(L, result, 1);
+ TSNode root = ts_tree_root_node(node.tree);
+ push_node(L, root, 1);
return 1;
}