loadLanguage method

TreeSitterWasmLanguage loadLanguage(
  1. String name,
  2. List<int> bytes
)

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);
}