fix(treesitter): more efficient node:root()

This commit is contained in:
bfredl
2022-08-25 18:24:56 +02:00
parent 8554164b1e
commit e5fe41198c

View File

@@ -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;
} }