Вот пример, казалось бы, что тут не так? (str всегда не пустая строка)
function isComment(str){
return str[0] === '/' && str[1] === '*';
}
Функция деоптимизировалась из-за второго условия. Так как если строка меньше двух символов, то происходит выход за пределы строки
Чтобы не было деоптимизации нужно сделать так:
function isComment(str){
return str.length >= 2 && str[0] === '/' && str[1] === '*';
}
И в коде было еще несколько мест, где был выход за пределы массива, которые приводили к деоптимизации.