Reset language when resetting wasm store (#3495)
* Reset language when resetting wasm store * test behavior of language copying
This commit is contained in:
parent
a861fabfbd
commit
779566f588
2 changed files with 32 additions and 0 deletions
|
|
@ -196,6 +196,27 @@ fn test_load_and_reload_wasm_language() {
|
|||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_reset_wasm_store() {
|
||||
allocations::record(|| {
|
||||
let mut language_store = WasmStore::new(ENGINE.clone()).unwrap();
|
||||
let wasm = fs::read(WASM_DIR.join("tree-sitter-rust.wasm")).unwrap();
|
||||
let language = language_store.load_language("rust", &wasm).unwrap();
|
||||
|
||||
let mut parser = Parser::new();
|
||||
let parser_store = WasmStore::new(ENGINE.clone()).unwrap();
|
||||
parser.set_wasm_store(parser_store).unwrap();
|
||||
parser.set_language(&language).unwrap();
|
||||
let tree = parser.parse("fn main() {}", None).unwrap();
|
||||
assert_eq!(tree.root_node().to_sexp(), "(source_file (function_item name: (identifier) parameters: (parameters) body: (block)))");
|
||||
|
||||
let parser_store = WasmStore::new(ENGINE.clone()).unwrap();
|
||||
parser.set_wasm_store(parser_store).unwrap();
|
||||
let tree = parser.parse("fn main() {}", None).unwrap();
|
||||
assert_eq!(tree.root_node().to_sexp(), "(source_file (function_item name: (identifier) parameters: (parameters) body: (block)))");
|
||||
});
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_load_wasm_errors() {
|
||||
allocations::record(|| {
|
||||
|
|
|
|||
|
|
@ -2144,11 +2144,22 @@ TSTree *ts_parser_parse_string_encoding(
|
|||
}
|
||||
|
||||
void ts_parser_set_wasm_store(TSParser *self, TSWasmStore *store) {
|
||||
if (self->language && ts_language_is_wasm(self->language)) {
|
||||
// Copy the assigned language into the new store.
|
||||
const TSLanguage *copy = ts_language_copy(self->language);
|
||||
ts_parser_set_language(self, copy);
|
||||
ts_language_delete(copy);
|
||||
}
|
||||
|
||||
ts_wasm_store_delete(self->wasm_store);
|
||||
self->wasm_store = store;
|
||||
}
|
||||
|
||||
TSWasmStore *ts_parser_take_wasm_store(TSParser *self) {
|
||||
if (self->language && ts_language_is_wasm(self->language)) {
|
||||
ts_parser_set_language(self, NULL);
|
||||
}
|
||||
|
||||
TSWasmStore *result = self->wasm_store;
|
||||
self->wasm_store = NULL;
|
||||
return result;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue