perf(compiler): further improve advanceBy perf
This commit is contained in:
parent
2b4f06b24c
commit
98571ab496
@ -36,15 +36,21 @@ export function advancePositionWithMutation(
|
|||||||
): Position {
|
): Position {
|
||||||
__DEV__ && assert(numberOfCharacters <= source.length)
|
__DEV__ && assert(numberOfCharacters <= source.length)
|
||||||
|
|
||||||
const str = source.slice(0, numberOfCharacters)
|
let linesCount = 0
|
||||||
const lines = str.split(/\r?\n/)
|
let lastNewLinePos = -1
|
||||||
|
for (let i = 0; i < numberOfCharacters; i++) {
|
||||||
|
if (source.charCodeAt(i) === 10 /* newline char code */) {
|
||||||
|
linesCount++
|
||||||
|
lastNewLinePos = i
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pos.offset += numberOfCharacters
|
pos.offset += numberOfCharacters
|
||||||
pos.line += lines.length - 1
|
pos.line += linesCount
|
||||||
pos.column =
|
pos.column =
|
||||||
lines.length === 1
|
lastNewLinePos === -1
|
||||||
? pos.column + numberOfCharacters
|
? pos.column + numberOfCharacters
|
||||||
: Math.max(1, lines.pop()!.length)
|
: Math.max(1, numberOfCharacters - lastNewLinePos - 1)
|
||||||
|
|
||||||
return pos
|
return pos
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user