Start work on a --wasm flag for the test subcommand

This commit is contained in:
Max Brunsfeld 2022-10-24 16:59:17 -07:00
parent 08ccf5babf
commit 51720beeb0
4 changed files with 48 additions and 17 deletions

View file

@ -1865,13 +1865,24 @@ const TSLanguage *ts_parser_language(const TSParser *self) {
}
bool ts_parser_set_language(TSParser *self, const TSLanguage *language) {
if (language) {
if (language->version > TREE_SITTER_LANGUAGE_VERSION) return false;
if (language->version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION) return false;
}
ts_parser__external_scanner_destroy(self);
self->language = NULL;
if (language) {
if (
language->version > TREE_SITTER_LANGUAGE_VERSION ||
language->version < TREE_SITTER_MIN_COMPATIBLE_LANGUAGE_VERSION
) return false;
if (ts_language_is_wasm(language)) {
if (
!self->wasm_store ||
!ts_wasm_store_start(self->wasm_store, &self->lexer.data, language)
) return false;
}
}
self->language = language;
ts_wasm_store_start(self->wasm_store, &self->lexer.data, language);
ts_parser__external_scanner_create(self);
ts_parser_reset(self);
return true;

View file

@ -819,11 +819,11 @@ const TSLanguage *ts_wasm_store_load_language(
),
.symbol_metadata = copy(
&memory[wasm_language.symbol_metadata],
wasm_language.symbol_count * sizeof(TSSymbolMetadata)
(wasm_language.symbol_count + wasm_language.alias_count) * sizeof(TSSymbolMetadata)
),
.public_symbol_map = copy(
&memory[wasm_language.public_symbol_map],
wasm_language.symbol_count * sizeof(TSSymbol)
(wasm_language.symbol_count + wasm_language.alias_count) * sizeof(TSSymbol)
),
.lex_modes = copy(
&memory[wasm_language.lex_modes],
@ -884,6 +884,13 @@ const TSLanguage *ts_wasm_store_load_language(
);
}
if (language->version >= 14) {
language->primary_state_ids = copy(
&memory[wasm_language.primary_state_ids],
wasm_language.state_count * sizeof(TSStateId)
);
}
if (language->external_token_count > 0) {
language->external_scanner.symbol_map = copy(
&memory[wasm_language.external_scanner.symbol_map],
@ -985,8 +992,6 @@ bool ts_wasm_store_add_language(
bool ts_wasm_store_start(TSWasmStore *self, TSLexer *lexer, const TSLanguage *language) {
uint32_t instance_index;
if (!language) return false;
if (!ts_language_is_wasm(language)) return false;
if (!ts_wasm_store_add_language(self, language, &instance_index)) return false;
self->current_lexer = lexer;
self->current_instance = &self->language_instances.contents[instance_index];