GNU bug report logs - #77077
Markers in treesit_check_node

Previous Next

Package: emacs;

Reported by: Juri Linkov <juri <at> linkov.net>

Date: Mon, 17 Mar 2025 18:01:02 UTC

Severity: normal

Fixed in version 31.0.50

Done: Juri Linkov <juri <at> linkov.net>

Bug is archived. No further changes may be made.

Full log


Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Juri Linkov <juri <at> linkov.net>
To: bug-gnu-emacs <at> gnu.org
Subject: Markers in treesit_check_node
Date: Mon, 17 Mar 2025 19:52:27 +0200
In mhtml-ts-mode activate the region, type 'C-c C-t'
and an element name like div, type RET RET, then:

Debugger entered--Lisp error: (wrong-type-argument integerp #<marker (moves after insertion) at 10 in test.html>)
  treesit-query-capture(#<treesit-parser for html> #<treesit-compiled-query> 7 #<marker (moves after insertion) at 10 in test.html>)
  treesit-query-range(#<treesit-parser for html> #<treesit-compiled-query> 7 #<marker (moves after insertion) at 10 in test.html> nil nil)
  treesit--update-ranges-non-local(#<treesit-parser for html> #<treesit-compiled-query> javascript 32 1 7 #<marker (moves after insertion) at 10 in test.html> nil nil)
  treesit--update-range-1(7 #<marker (moves after insertion) at 10 in test.html> #<treesit-parser for html> ...)
  treesit-update-ranges(7 #<marker (moves after insertion) at 10 in test.html>)
  treesit-indent-region(7 #<marker (moves after insertion) at 10 in test.html>)
  indent-region(7 #<marker (moves after insertion) at 10 in test.html> nil)
  skeleton-internal-1(n t nil)
  skeleton-insert(... -1 nil)
  skeleton-proxy-new(... nil nil)
  sgml-tag(nil nil)
  funcall-interactively(sgml-tag nil nil)
  command-execute(sgml-tag)

Here's the patch to fix this and it seems no more changes necessary
since it fails only on checking, but on using it converts markers
to numbers automatically.

diff --git a/src/treesit.c b/src/treesit.c
index b0979397d35..7df9bb4d0d3 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -2190,6 +2190,9 @@ treesit_check_node (Lisp_Object obj)
 static void
 treesit_check_position (Lisp_Object obj, struct buffer *buf)
 {
+  if (MARKERP (obj))
+    obj = make_fixnum (marker_position (obj));
+
   treesit_check_positive_integer (obj);
   ptrdiff_t pos = XFIXNUM (obj);
   if (pos < BUF_BEGV (buf) || pos > BUF_ZV (buf))




This bug report was last modified 58 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.