Restucture wasm module, return a normal TSLanguage from load_language
This commit is contained in:
parent
3f1a7f9cd4
commit
042e6f9d57
26 changed files with 3068 additions and 317 deletions
|
|
@ -89,7 +89,6 @@ struct TSParser {
|
|||
Stack *stack;
|
||||
SubtreePool tree_pool;
|
||||
const TSLanguage *language;
|
||||
const TSWasmLanguage *wasm_language;
|
||||
TSWasmStore *wasm_store;
|
||||
ReduceActionSet reduce_actions;
|
||||
Subtree finished_tree;
|
||||
|
|
@ -487,7 +486,7 @@ static Subtree ts_parser__lex(
|
|||
);
|
||||
ts_lexer_start(&self->lexer);
|
||||
found_token = false;
|
||||
if (self->wasm_language) {
|
||||
if (ts_language_is_wasm(self->language)) {
|
||||
found_token = ts_wasm_store_run_main_lex_function(self->wasm_store, lex_mode.lex_state);
|
||||
} else {
|
||||
found_token = self->language->lex_fn(&self->lexer.data, lex_mode.lex_state);
|
||||
|
|
@ -553,7 +552,7 @@ static Subtree ts_parser__lex(
|
|||
ts_lexer_reset(&self->lexer, self->lexer.token_start_position);
|
||||
ts_lexer_start(&self->lexer);
|
||||
|
||||
if (self->wasm_language) {
|
||||
if (ts_language_is_wasm(self->language)) {
|
||||
is_keyword = ts_wasm_store_run_keyword_lex_function(self->wasm_store, 0);
|
||||
} else {
|
||||
is_keyword = self->language->keyword_lex_fn(&self->lexer.data, 0);
|
||||
|
|
@ -1812,14 +1811,6 @@ bool ts_parser_set_language(TSParser *self, const TSLanguage *language) {
|
|||
}
|
||||
|
||||
self->language = language;
|
||||
|
||||
#ifdef TREE_SITTER_FEATURE_WASM
|
||||
if (self->wasm_language) {
|
||||
ts_wasm_language_delete(self->wasm_language);
|
||||
self->wasm_language = NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
ts_parser_reset(self);
|
||||
return true;
|
||||
}
|
||||
|
|
@ -1900,8 +1891,12 @@ TSTree *ts_parser_parse(
|
|||
) {
|
||||
if (!self->language || !input.read) return NULL;
|
||||
|
||||
if (self->wasm_store) {
|
||||
ts_wasm_store_start(self->wasm_store, &self->lexer.data, self->wasm_language);
|
||||
if (ts_language_is_wasm(self->language)) {
|
||||
if (self->wasm_store) {
|
||||
ts_wasm_store_start(self->wasm_store, &self->lexer.data, self->language);
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
ts_lexer_set_input(&self->lexer, input);
|
||||
|
|
@ -2023,28 +2018,8 @@ TSTree *ts_parser_parse_string_encoding(
|
|||
});
|
||||
}
|
||||
|
||||
#ifdef TREE_SITTER_FEATURE_WASM
|
||||
|
||||
void ts_parser_set_wasm_language(TSParser *self, const TSWasmLanguage *language) {
|
||||
if (language) {
|
||||
self->language = language->language;
|
||||
ts_wasm_language_retain(language);
|
||||
}
|
||||
self->wasm_language = language;
|
||||
ts_parser_reset(self);
|
||||
}
|
||||
|
||||
const TSWasmLanguage *ts_parser_wasm_language(TSParser *self) {
|
||||
if (self->wasm_language) {
|
||||
ts_wasm_language_retain(self->wasm_language);
|
||||
}
|
||||
return self->wasm_language;
|
||||
}
|
||||
|
||||
void ts_parser_set_wasm_store(TSParser *self, TSWasmStore *store) {
|
||||
self->wasm_store = store;
|
||||
}
|
||||
|
||||
#endif // TREE_SITTER_FEATURE_WASM
|
||||
|
||||
#undef LOG
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue