}
}
+/* Resolve language symbol LANG according to
+ treesit-language-remap-alist. */
+static
+Lisp_Object resolve_language_symbol (Lisp_Object lang)
+{
+ Lisp_Object res = Fassoc (lang, Vtreesit_language_remap_alist, Qeq);
+ if (NILP (res))
+ return lang;
+ return Fcdr (res);
+}
+
/* Find the override name for LANGUAGE_SYMBOL in
treesit-load-name-override-list. Set NAME and C_SYMBOL to the
override name, and return true if there exists one, otherwise
/* Get query source and TSLanguage ready. */
Lisp_Object source = XTS_COMPILED_QUERY (query)->source;
Lisp_Object language = XTS_COMPILED_QUERY (query)->language;
+
+ Lisp_Object remapped_lang = resolve_language_symbol (language);
+ if (!SYMBOLP (remapped_lang))
+ {
+ *signal_symbol = Qtreesit_query_error;
+ *signal_data = list2 (build_string ("Invalid language symbol"),
+ remapped_lang);
+ return NULL;
+ }
+
/* This is the main reason why we compile query lazily: to avoid
loading languages early. */
struct treesit_loaded_lang lang
- = treesit_load_language (language, signal_symbol, signal_data);
+ = treesit_load_language (remapped_lang, signal_symbol, signal_data);
TSLanguage *treesit_lang = lang.lang;
if (treesit_lang == NULL)
return NULL;
xsignal (signal_symbol, signal_data);
}
-/* Resolve language symbol LANG according to
- treesit-language-remap-alist. */
-static
-Lisp_Object resolve_language_symbol (Lisp_Object lang)
-{
- Lisp_Object res = Fassoc (lang, Vtreesit_language_remap_alist, Qeq);
- if (NILP (res))
- return lang;
- return Fcdr (res);
-}
-
\f
/* Lisp definitions. */
if (buf->base_buffer)
buf = buf->base_buffer;
- language = resolve_language_symbol (language);
-
/* Return a fresh list so messing with that list doesn't affect our
internal data. */
Lisp_Object return_list = Qnil;
wrong_type_argument (Qtreesit_query_p, query);
CHECK_SYMBOL (language);
- Lisp_Object remapped_lang = resolve_language_symbol (language);
- CHECK_SYMBOL (remapped_lang);
-
treesit_initialize ();
if (TS_COMPILED_QUERY_P (query))
return query;
}
- Lisp_Object lisp_query = make_treesit_query (query, remapped_lang);
+ /* We don't map language here, instead, we remap language when
+ actually compiling the query. This way the query appears to have
+ the unmapped language to the Lisp world. */
+ Lisp_Object lisp_query = make_treesit_query (query, language);
/* Maybe actually compile. */
if (NILP (eager))