From 8c822293baa20d052e25afdbb2f267c1962d86a5 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 2 Jul 2024 01:08:58 +0000 Subject: [PATCH] Use a bitmask to avoid unnecessary calls to `contains` in `indexOfAnyCharCode`. --- src/compiler/core.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/compiler/core.ts b/src/compiler/core.ts index e40d8826ca6..7a4adf2de97 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -230,8 +230,14 @@ export function contains(array: readonly T[] | undefined, value: T, equalityC /** @internal */ export function indexOfAnyCharCode(text: string, charCodes: readonly number[], start?: number): number { + let bitMask = 0; + for (let i = 0; i < charCodes.length; i++) { + bitMask |= charCodes[i]; + } + for (let i = start ?? 0; i < text.length; i++) { - if (contains(charCodes, text.charCodeAt(i))) { + const current = text.charCodeAt(i); + if ((current & bitMask) === current && contains(charCodes, current)) { return i; } }