loadLanguage method
Implementation
TreeSitterWasmLanguage loadLanguage(String name, List<int> bytes) {
_checkNotDisposed();
if (name.contains('\u0000')) {
throw ArgumentError.value(name, 'name', 'must not contain NUL');
}
final dylinkInfo = treeSitterParseWasmDylinkInfo(bytes);
if (dylinkInfo == null) {
throw const TreeSitterWasmError(
TreeSitterWasmErrorKind.parse,
'failed to parse dylink section of wasm module',
);
}
final Uint8List ownedBytes;
try {
ownedBytes = Uint8List.fromList(bytes);
} on RangeError catch (error) {
throw TreeSitterWasmError(
TreeSitterWasmErrorKind.parse,
error.toString(),
);
}
final TreeSitterWasmInstantiation loaded;
try {
loaded = _runtime.loadLanguage(
name: name,
bytes: ownedBytes,
dylinkInfo: dylinkInfo,
);
} on TreeSitterWasmError {
rethrow;
} catch (error) {
throw TreeSitterWasmError(
TreeSitterWasmErrorKind.other,
error.toString(),
);
}
_pruneDeletedLanguages();
_wasmLanguageOrigins[loaded.language] = true;
final state = _TreeSitterWasmLanguageState(
language: loaded.language,
module: loaded.module,
dylinkInfo: dylinkInfo,
);
_entries.add(_TreeSitterWasmStoreEntry(state, loaded.instance));
_wasmLanguageStates[loaded.language] = state;
return TreeSitterWasmLanguage._(state);
}