1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-25 15:29:32 -05:00

chore: optimize USVString webidl converters (#10865)

This commit is contained in:
Luca Casonato 2021-06-06 16:56:44 +02:00 committed by GitHub
parent 1fb2e23a67
commit 5bd77f29e5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -331,29 +331,28 @@
converters.USVString = (V, opts) => { converters.USVString = (V, opts) => {
const S = converters.DOMString(V, opts); const S = converters.DOMString(V, opts);
const n = S.length; const n = S.length;
const U = []; let U = "";
for (let i = 0; i < n; ++i) { for (let i = 0; i < n; ++i) {
const c = S.charCodeAt(i); const c = S.charCodeAt(i);
if (c < 0xd800 || c > 0xdfff) { if (c < 0xd800 || c > 0xdfff) {
U.push(String.fromCodePoint(c)); U += String.fromCodePoint(c);
} else if (0xdc00 <= c && c <= 0xdfff) { } else if (0xdc00 <= c && c <= 0xdfff) {
U.push(String.fromCodePoint(0xfffd)); U += String.fromCodePoint(0xfffd);
} else if (i === n - 1) { } else if (i === n - 1) {
U.push(String.fromCodePoint(0xfffd)); U += String.fromCodePoint(0xfffd);
} else { } else {
const d = S.charCodeAt(i + 1); const d = S.charCodeAt(i + 1);
if (0xdc00 <= d && d <= 0xdfff) { if (0xdc00 <= d && d <= 0xdfff) {
const a = c & 0x3ff; const a = c & 0x3ff;
const b = d & 0x3ff; const b = d & 0x3ff;
U.push(String.fromCodePoint((2 << 15) + (2 << 9) * a + b)); U += String.fromCodePoint((2 << 15) + (2 << 9) * a + b);
++i; ++i;
} else { } else {
U.push(String.fromCodePoint(0xfffd)); U += String.fromCodePoint(0xfffd);
} }
} }
} }
return U;
return U.join("");
}; };
converters.object = (V, opts) => { converters.object = (V, opts) => {