The GetPreviousTokenization() function has an infinite loop, because `currentLineTemp` is never changed within the loop:
```
while (currentLineTemp <= snapshot.LineCount) {
if (!_tokenCache.TryGetTokenization(currentLineTemp, out lineTokenizationTemp)) {
lineTokenizationTemp = TokenizeLine(JSScanner, snapshot, stateTemp, currentLineTemp);
_tokenCache[currentLineTemp] = lineTokenizationTemp;
}
stateTemp = lineTokenizationTemp.State;
}
```
```
while (currentLineTemp <= snapshot.LineCount) {
if (!_tokenCache.TryGetTokenization(currentLineTemp, out lineTokenizationTemp)) {
lineTokenizationTemp = TokenizeLine(JSScanner, snapshot, stateTemp, currentLineTemp);
_tokenCache[currentLineTemp] = lineTokenizationTemp;
}
stateTemp = lineTokenizationTemp.State;
}
```