setNativeLanguage method
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;
}