]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
perf(compiler): further improve advanceBy perf
authorEvan You <yyx990803@gmail.com>
Fri, 20 Sep 2019 01:18:18 +0000 (21:18 -0400)
committerEvan You <yyx990803@gmail.com>
Fri, 20 Sep 2019 01:18:18 +0000 (21:18 -0400)
packages/compiler-core/src/utils.ts

index ccea3ce80a9a63fe42b218c726ee85d65599fce7..354b8ec1b264f16201cefdddb797b21a17f2ec0f 100644 (file)
@@ -36,15 +36,21 @@ export function advancePositionWithMutation(
 ): Position {
   __DEV__ && assert(numberOfCharacters <= source.length)
 
-  const str = source.slice(0, numberOfCharacters)
-  const lines = str.split(/\r?\n/)
+  let linesCount = 0
+  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.line += lines.length - 1
+  pos.line += linesCount
   pos.column =
-    lines.length === 1
+    lastNewLinePos === -1
       ? pos.column + numberOfCharacters
-      : Math.max(1, lines.pop()!.length)
+      : Math.max(1, numberOfCharacters - lastNewLinePos - 1)
 
   return pos
 }