[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?
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;