mirror of
https://github.com/neovim/neovim.git
synced 2025-09-28 22:18:33 +00:00
fix(treesitter): more efficient node:root()
This commit is contained in:
@@ -623,7 +623,7 @@ void push_tree(lua_State *L, TSTree *tree, bool do_copy)
|
|||||||
lua_setfenv(L, -2); // [udata]
|
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);
|
TSTree **ud = luaL_checkudata(L, index, TS_META_TREE);
|
||||||
return ud;
|
return ud;
|
||||||
@@ -1093,22 +1093,13 @@ static int node_named_children(lua_State *L)
|
|||||||
|
|
||||||
static int node_root(lua_State *L)
|
static int node_root(lua_State *L)
|
||||||
{
|
{
|
||||||
TSNode parent;
|
|
||||||
TSNode result;
|
|
||||||
|
|
||||||
TSNode node;
|
TSNode node;
|
||||||
if (!node_check(L, 1, &node)) {
|
if (!node_check(L, 1, &node)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
parent = node;
|
|
||||||
result = node;
|
|
||||||
|
|
||||||
while (!ts_node_is_null(parent)){
|
TSNode root = ts_tree_root_node(node.tree);
|
||||||
result = parent;
|
push_node(L, root, 1);
|
||||||
parent = ts_node_parent(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
push_node(L, result, 1);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user