/*** Parsing functions */
+static void
+ts_check_parser (Lisp_Object obj)
+{
+ CHECK_TS_PARSER (obj);
+ if (XTS_PARSER (obj)->deleted)
+ xsignal1 (Qtreesit_parser_deleted, obj);
+}
+
/* An auxiliary function that saves a few lines of code. Assumes TREE
is not NULL. */
static inline void
{
CHECK_CONS (parser_list);
Lisp_Object lisp_parser = XCAR (parser_list);
- CHECK_TS_PARSER (lisp_parser);
+ ts_check_parser (lisp_parser);
TSTree *tree = XTS_PARSER (lisp_parser)->tree;
if (tree != NULL)
{
lisp_parser->visible_beg = BUF_BEGV (XBUFFER (buffer));
lisp_parser->visible_end = BUF_ZV (XBUFFER (buffer));
lisp_parser->timestamp = 0;
+ lisp_parser->deleted = false;
eassert (lisp_parser->visible_beg <= lisp_parser->visible_end);
return make_lisp_ptr (lisp_parser, Lisp_Vectorlike);
}
doc: /* Delete PARSER from its buffer. */)
(Lisp_Object parser)
{
- CHECK_TS_PARSER (parser);
+ ts_check_parser (parser);
+
Lisp_Object buffer = XTS_PARSER (parser)->buffer;
struct buffer *buf = XBUFFER (buffer);
BVAR (buf, ts_parser_list)
= Fdelete (parser, BVAR (buf, ts_parser_list));
+
+ XTS_PARSER (parser)->deleted = true;
return Qnil;
}
doc: /* Return the buffer of PARSER. */)
(Lisp_Object parser)
{
- CHECK_TS_PARSER (parser);
+ ts_check_parser (parser);
Lisp_Object buf;
XSETBUFFER (buf, XBUFFER (XTS_PARSER (parser)->buffer));
return buf;
This symbol is the one used to create the parser. */)
(Lisp_Object parser)
{
- CHECK_TS_PARSER (parser);
+ ts_check_parser (parser);
return XTS_PARSER (parser)->language_symbol;
}
doc: /* Return the root node of PARSER. */)
(Lisp_Object parser)
{
- CHECK_TS_PARSER (parser);
+ ts_check_parser (parser);
ts_ensure_parsed (parser);
TSNode root_node = ts_tree_root_node (XTS_PARSER (parser)->tree);
return make_ts_node (parser, root_node);
is nil, set PARSER to parse the whole buffer. */)
(Lisp_Object parser, Lisp_Object ranges)
{
- CHECK_TS_PARSER (parser);
+ ts_check_parser (parser);
CHECK_CONS (ranges);
ts_check_range_argument (ranges);
nil. */)
(Lisp_Object parser)
{
- CHECK_TS_PARSER (parser);
+ ts_check_parser (parser);
uint32_t len;
const TSRange *ranges = ts_parser_included_ranges
(XTS_PARSER (parser)->parser, &len);
"treesit-node-outdated");
DEFSYM (Quser_emacs_directory,
"user-emacs-directory");
+ DEFSYM (Qtreesit_parser_deleted, "treesit-parser-deleted");
define_error (Qtreesit_error, "Generic tree-sitter error", Qerror);
define_error (Qtreesit_query_error, "Query pattern is malformed",
define_error (Qtreesit_node_outdated,
"This node is outdated, please retrieve a new one",
Qtreesit_error);
+ define_error (Qtreesit_parser_deleted,
+ "This parser is deleted and cannot be used",
+ Qtreesit_error);
DEFVAR_LISP ("treesit-load-name-override-list",
Vtreesit_load_name_override_list,