bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#60659: 30.0.50; tree-sitter: identical nodes are not `equal'


From: Yuan Fu
Subject: bug#60659: 30.0.50; tree-sitter: identical nodes are not `equal'
Date: Tue, 10 Jan 2023 18:57:02 -0800

Eli Zaretskii <eliz@gnu.org> writes:

>> From: Yuan Fu <casouri@gmail.com>
>> Date: Mon, 9 Jan 2023 21:56:19 -0800
>> Cc: 60659@debbugs.gnu.org
>> 
>> Eli, does this look right to you? In particular, I’m not sure if
>> it’s ok to call a lisp function (Ftreesit_node_eq) inside
>> internal_equal, even though it never signals.
>
> It is better to make a C function from most of the body of
> Ftreesit_node_eq, but without the CHECK_NODE parts, and make both
> Fequal and Ftreesit_node_eq call that.  Because CHECK_NODE can signal,
> right?  Also, you should make sure up front that _both_ o1 and o2 are
> treesit nodes, otherwise they cannot be 'equal'.

I should’ve included some context. There is code that checks whether o1
and o2 have the same (pseudo vector) type and size[1], and returns early
if not, so I only need to check the type of o1. And since I checked the
type of o1, CHECK_NODE will always succeed.

But still, using a C functions is more correct. How about this?

Attachment: equal.diff
Description: Binary data


Yuan

[1]

        ptrdiff_t size = ASIZE (o1);
        /* Pseudovectors have the type encoded in the size field, so this test
           actually checks that the objects have the same type as well as the
           same size.  */
        if (ASIZE (o2) != size)
          return false;

reply via email to

[Prev in Thread] Current Thread [Next in Thread]