tree-sitter: handle node equality

This commit is contained in:
Björn Linse
2019-09-22 11:33:55 +02:00
parent 3ffcb477ef
commit d5a69eb076
2 changed files with 26 additions and 0 deletions

View File

@@ -48,6 +48,7 @@ static struct luaL_Reg tree_meta[] = {
static struct luaL_Reg node_meta[] = {
{ "__tostring", node_tostring },
{ "__eq", node_eq },
{ "__len", node_child_count },
{ "range", node_range },
{ "start", node_start },
@@ -431,6 +432,23 @@ static int node_tostring(lua_State *L)
return 1;
}
static int node_eq(lua_State *L)
{
TSNode node;
if (!node_check(L, &node)) {
return 0;
}
// This should only be called if both x and y in "x == y" has the
// treesitter_node metatable. So it is ok to error out otherwise.
TSNode *ud = luaL_checkudata(L, 2, "treesitter_node");
if (!ud) {
return 0;
}
TSNode node2 = *ud;
lua_pushboolean(L, ts_node_eq(node, node2));
return 1;
}
static int node_range(lua_State *L)
{
TSNode node;