Skip to content

Commit 9e7ec91

Browse files
GearsDatapackslpil
authored andcommitted
Allow non-UTF-8 string segments in constant bit arrays
1 parent 0fd2e00 commit 9e7ec91

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

compiler-core/src/javascript/expression.rs

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1852,6 +1852,70 @@ impl<'module, 'a> Generator<'module, 'a> {
18521852
Ok(docvec!["codepointBits(", value, ")"])
18531853
}
18541854

1855+
// UTF16 strings
1856+
[Opt::Utf16 { .. }]
1857+
| [Opt::Utf16 { .. }, Opt::Big { .. }]
1858+
| [Opt::Big { .. }, Opt::Utf16 { .. }] => {
1859+
self.tracker.string_utf16_bit_array_segment_used = true;
1860+
let is_big = "true".to_doc();
1861+
Ok(docvec!["stringToUtf16(", value, ", ", is_big, ")"])
1862+
}
1863+
1864+
[Opt::Utf16 { .. }, Opt::Little { .. }]
1865+
| [Opt::Little { .. }, Opt::Utf16 { .. }] => {
1866+
self.tracker.string_utf16_bit_array_segment_used = true;
1867+
let is_big = "false".to_doc();
1868+
Ok(docvec!["stringToUtf16(", value, ", ", is_big, ")"])
1869+
}
1870+
1871+
// UTF16 codepoints
1872+
[Opt::Utf16Codepoint { .. }]
1873+
| [Opt::Utf16Codepoint { .. }, Opt::Big { .. }]
1874+
| [Opt::Big { .. }, Opt::Utf16Codepoint { .. }] => {
1875+
self.tracker.codepoint_utf16_bit_array_segment_used = true;
1876+
let is_big = "true".to_doc();
1877+
Ok(docvec!["codepointToUtf16(", value, ", ", is_big, ")"])
1878+
}
1879+
1880+
[Opt::Utf16Codepoint { .. }, Opt::Little { .. }]
1881+
| [Opt::Little { .. }, Opt::Utf16Codepoint { .. }] => {
1882+
self.tracker.codepoint_utf16_bit_array_segment_used = true;
1883+
let is_big = "false".to_doc();
1884+
Ok(docvec!["codepointToUtf16(", value, ", ", is_big, ")"])
1885+
}
1886+
1887+
// UTF32 strings
1888+
[Opt::Utf32 { .. }]
1889+
| [Opt::Utf32 { .. }, Opt::Big { .. }]
1890+
| [Opt::Big { .. }, Opt::Utf32 { .. }] => {
1891+
self.tracker.string_utf32_bit_array_segment_used = true;
1892+
let is_big = "true".to_doc();
1893+
Ok(docvec!["stringToUtf32(", value, ", ", is_big, ")"])
1894+
}
1895+
1896+
[Opt::Utf32 { .. }, Opt::Little { .. }]
1897+
| [Opt::Little { .. }, Opt::Utf32 { .. }] => {
1898+
self.tracker.string_utf32_bit_array_segment_used = true;
1899+
let is_big = "false".to_doc();
1900+
Ok(docvec!["stringToUtf32(", value, ", ", is_big, ")"])
1901+
}
1902+
1903+
// UTF32 codepoints
1904+
[Opt::Utf32Codepoint { .. }]
1905+
| [Opt::Utf32Codepoint { .. }, Opt::Big { .. }]
1906+
| [Opt::Big { .. }, Opt::Utf32Codepoint { .. }] => {
1907+
self.tracker.codepoint_utf32_bit_array_segment_used = true;
1908+
let is_big = "true".to_doc();
1909+
Ok(docvec!["codepointToUtf32(", value, ", ", is_big, ")"])
1910+
}
1911+
1912+
[Opt::Utf32Codepoint { .. }, Opt::Little { .. }]
1913+
| [Opt::Little { .. }, Opt::Utf32Codepoint { .. }] => {
1914+
self.tracker.codepoint_utf32_bit_array_segment_used = true;
1915+
let is_big = "false".to_doc();
1916+
Ok(docvec!["codepointToUtf32(", value, ", ", is_big, ")"])
1917+
}
1918+
18551919
// Bit arrays
18561920
[Opt::Bits { .. }] => Ok(value),
18571921

0 commit comments

Comments
 (0)