setNativeLanguage method

bool setNativeLanguage(
  1. TreeSitterGrammar? language
)

Native ts_parser_set_language semantics, including its nullable input.

Unlike the safe Rust-style setLanguage wrapper, the C function resets and releases the previously assigned language before validating the replacement. Consequently, a false result leaves this parser unbound.

Implementation

bool setNativeLanguage(TreeSitterGrammar? language) {
  _checkNotDisposed();
  reset();
  final previous = _grammar;
  _grammar = null;
  _generatedParser = null;
  if (previous != null) _releaseGrammarLanguage(previous);
  if (language == null) return true;

  try {
    _validateLanguage(language);
  } on TreeSitterLanguageError {
    return false;
  }
  if (language case GeneratedTreeSitterGrammar(:final language)) {
    if (language.isWasm &&
        (_wasmStore == null || !_wasmStore!.attachLanguageTable(language))) {
      return false;
    }
  }
  _retainGrammarLanguage(language);
  _grammar = language;
  _generatedParser = language is GeneratedTreeSitterGrammar
      ? GeneratedTreeSitterParser(language.language)
      : null;
  return true;
}