Subject: bug#65810: 30.0.50; C-M-f and related functions error out in c++-ts-mode

From: Eli Zaretskii <[email-masked]>
Date: Thu, 07 Sep 2023 21:09:33 +0300

> From: João Távora <[email-masked]>
> Cc: [email-masked]
> Date: Thu, 07 Sep 2023 18:48:07 +0100
> 
> Now just type C-M-f or any C-M-something command.
> 
>   Debugger entered--Lisp error: (treesit-invalid-predicate nil)
>     treesit-node-match-p(#<treesit-node "{" in 1-2> sexp t)
>     #f(compiled-function (node) #<bytecode 0x1a160a6a590699e2>)(#<treesit-node "{" in 1-2>)
>     treesit-node-match-p(#<treesit-node "{" in 1-2> #f(compiled-function (node) #<bytecode 0x1a160a6a590699e2>) t)
>     treesit-node-top-level(#<treesit-node "{" in 1-2> #f(compiled-function (node) #<bytecode 0x1a160a6a590699e2>) t)
>     treesit--things-around(5 sexp)
>     treesit--navigate-thing(5 -1 beg sexp restricted)
>     treesit-beginning-of-thing(sexp 1 restricted)
>     treesit-forward-sexp(-1)
>     forward-sexp(-1 nil)
>     forward-sexp(-1 5)
>     backward-sexp(1 5)
>     funcall-interactively(backward-sexp 1 5)
>     call-interactively(backward-sexp nil nil)
>     command-execute(backward-sexp)
> 
> simple.cpp can be any C++ file, from a simple
> 
>    int main() {return 0;}
> 
> to a completely empty file.

With the above sample file I can indeed reproduce the error.  But not
with real-life files I tried, where functions are larger and there's
usually more than one function.

Yuan, could you please look into this?