From 956889d8ff1c79db45ca9b1711f406961e71c272 Mon Sep 17 00:00:00 2001 From: Yuan Fu Date: Thu, 12 Jan 2023 17:07:21 -0800 Subject: Equal now recognizes tree-sitter nodes (bug#60659) Now equal uses ts_node_eq to check equality between nodes. * doc/lispref/parsing.texi: (Accessing Node Information): Update manual. * src/fns.c (internal_equal): Handle tree-sitter nodes. * src/treesit.c (treesit_node_eq): New function. (Ftreesit_node_eq): Factor out. Update docstring. * src/treesit.h (treesit_node_eq): Declare new function. --- src/fns.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/fns.c') diff --git a/src/fns.c b/src/fns.c index 1aaf17914a2..d5f7565d3d7 100644 --- a/src/fns.c +++ b/src/fns.c @@ -38,6 +38,10 @@ along with GNU Emacs. If not, see . */ #include "puresize.h" #include "gnutls.h" +#ifdef HAVE_TREE_SITTER +#include "treesit.h" +#endif + enum equal_kind { EQUAL_NO_QUIT, EQUAL_PLAIN, EQUAL_INCLUDING_PROPERTIES }; static bool internal_equal (Lisp_Object, Lisp_Object, enum equal_kind, int, Lisp_Object); @@ -2822,6 +2826,10 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, enum equal_kind equal_kind, && !memcmp (bool_vector_data (o1), bool_vector_data (o2), bool_vector_bytes (size))); } + if (TS_NODEP (o1)) + { + return treesit_node_eq (o1, o2); + } /* Aside from them, only true vectors, char-tables, compiled functions, and fonts (font-spec, font-entity, font-object) -- cgit v1.2.1 From e8a89a18b69cc8da2ab5ab4dcf1564f0e4517509 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Fri, 13 Jan 2023 08:58:03 +0200 Subject: ; Fix non-tree-sitter builds * src/fns.c (internal_equal): Call treesit_node_eq only if tree-sitter was compiled in. --- src/fns.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/fns.c') diff --git a/src/fns.c b/src/fns.c index d5f7565d3d7..3984e318feb 100644 --- a/src/fns.c +++ b/src/fns.c @@ -2826,10 +2826,11 @@ internal_equal (Lisp_Object o1, Lisp_Object o2, enum equal_kind equal_kind, && !memcmp (bool_vector_data (o1), bool_vector_data (o2), bool_vector_bytes (size))); } + +#ifdef HAVE_TREE_SITTER if (TS_NODEP (o1)) - { - return treesit_node_eq (o1, o2); - } + return treesit_node_eq (o1, o2); +#endif /* Aside from them, only true vectors, char-tables, compiled functions, and fonts (font-spec, font-entity, font-object) -- cgit v1.2.1