in src/main/kotlin/jsitter/impl/TSParser.kt [26:60]
override fun parse(text: Text, adjustedTree: Tree<T>?, cancellationToken: CancellationToken?): Tree<T>? {
if (adjustedTree?.actual == true) {
return adjustedTree
}
synchronized(this) {
SubtreeAccess.unsafe.putLong(this.cancellationFlagPtr, 0)
cancellationToken?.onCancel {
SubtreeAccess.unsafe.putLong(this.cancellationFlagPtr, 1)
}
if (cancellationToken?.cancelled == true) {
return null
}
val newTreePtr = JSitter.parse(
this.parserPtr,
(adjustedTree as TSTree?)?.treePtr ?: 0L,
TSTextInput(text, this.readingBuffer),
text.encoding.i,
this.readingBuffer)
JSitter.parserReset(parserPtr)
if (newTreePtr == 0L) {
return null
}
if (cancellationToken?.cancelled == true) {
JSitter.releaseTree(newTreePtr)
return null
}
return TSTree(
treePtr = newTreePtr,
root = TSSubtree(
language = this.language,
lifetime = TSTreeResource(newTreePtr),
subtreePtr = SubtreeAccess.root(newTreePtr)),
actual = true)
}
}