diff --git a/src/runtime/language.c b/src/runtime/language.c index c8e0bfc1..45d19698 100644 --- a/src/runtime/language.c +++ b/src/runtime/language.c @@ -48,6 +48,8 @@ const char *ts_language_symbol_name(const TSLanguage *language, TSSymbol symbol) } TSSymbol ts_language_symbol_for_name(const TSLanguage *self, const char *name) { + if (!strcmp(name, "ERROR")) return ts_builtin_sym_error; + for (TSSymbol i = 0; i < self->symbol_count; i++) { if (!strcmp(self->symbol_names[i], name)) { return i; diff --git a/test/runtime/language_test.cc b/test/runtime/language_test.cc index 1c460347..f7867f5b 100644 --- a/test/runtime/language_test.cc +++ b/test/runtime/language_test.cc @@ -50,6 +50,27 @@ describe("Language", []() { ts_tree_delete(tree); }); }); + + describe("symbol_for_name(name)", [&]() { + it("returns the symbol for the given name", [&]() { + const TSLanguage *language = load_real_language("javascript"); + AssertThat( + ts_language_symbol_name( + language, + ts_language_symbol_for_name(language, "if_statement") + ), + Equals("if_statement") + ); + AssertThat( + ts_language_symbol_name( + language, + ts_language_symbol_for_name(language, "ERROR") + ), + Equals("ERROR") + ); + AssertThat(ts_language_symbol_for_name(language, "non_existent_symbol"), Equals(0u)); + }); + }); }); END_TEST