diff --git a/src/runtime/language.c b/src/runtime/language.c index 45d19698..0fb03b6c 100644 --- a/src/runtime/language.c +++ b/src/runtime/language.c @@ -50,7 +50,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++) { + uint32_t count = ts_language_symbol_count(self); + for (TSSymbol i = 0; i < 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 f7867f5b..30861ee7 100644 --- a/test/runtime/language_test.cc +++ b/test/runtime/language_test.cc @@ -69,6 +69,15 @@ describe("Language", []() { Equals("ERROR") ); AssertThat(ts_language_symbol_for_name(language, "non_existent_symbol"), Equals(0u)); + + TSSymbol last = ts_language_symbol_count(language)-1; + AssertThat( + ts_language_symbol_for_name( + language, + ts_language_symbol_name(language, last) + ), + Equals(last) + ); }); }); });