From c8d7c16f87b5b896ee101483a89def14b097927a Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Thu, 25 Feb 2016 17:35:49 -0800 Subject: [PATCH] Use out-of-context states when in error parse state --- include/tree_sitter/parser.h | 1 + src/runtime/language.c | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/include/tree_sitter/parser.h b/include/tree_sitter/parser.h index bb2f31b6..7d4ad028 100644 --- a/include/tree_sitter/parser.h +++ b/include/tree_sitter/parser.h @@ -10,6 +10,7 @@ extern "C" { #include "tree_sitter/runtime.h" #define ts_lex_state_error 0 +#define ts_parse_state_error ((TSStateId)-1) #define TS_DEBUG_BUFFER_SIZE 512 typedef struct TSTree TSTree; diff --git a/src/runtime/language.c b/src/runtime/language.c index f56d0893..662dbbeb 100644 --- a/src/runtime/language.c +++ b/src/runtime/language.c @@ -3,7 +3,11 @@ const TSParseAction *ts_language_actions(const TSLanguage *language, TSStateId state, TSSymbol sym, size_t *count) { - unsigned short action_index = + if (state == ts_parse_state_error) { + state = language->out_of_context_states[sym]; + } + + unsigned action_index = (language->parse_table + (state * language->symbol_count))[sym]; *count = language->parse_actions[action_index].count; const TSParseActionEntry *entry = language->parse_actions + action_index + 1;