File tree Expand file tree Collapse file tree 1 file changed +25
-21
lines changed Expand file tree Collapse file tree 1 file changed +25
-21
lines changed Original file line number Diff line number Diff line change @@ -1872,28 +1872,32 @@ pub const unsafe fn encode_utf8_raw_unchecked(code: u32, dst: *mut u8) {
18721872 // SAFETY: The caller must guarantee that the buffer pointed to by `dst`
18731873 // is at least `len` bytes long.
18741874 unsafe {
1875- match len {
1876- 1 => {
1877- * dst = code as u8 ;
1878- }
1879- 2 => {
1880- * dst = ( code >> 6 & 0x1F ) as u8 | TAG_TWO_B ;
1881- * dst. add ( 1 ) = ( code & 0x3F ) as u8 | TAG_CONT ;
1882- }
1883- 3 => {
1884- * dst = ( code >> 12 & 0x0F ) as u8 | TAG_THREE_B ;
1885- * dst. add ( 1 ) = ( code >> 6 & 0x3F ) as u8 | TAG_CONT ;
1886- * dst. add ( 2 ) = ( code & 0x3F ) as u8 | TAG_CONT ;
1887- }
1888- 4 => {
1889- * dst = ( code >> 18 & 0x07 ) as u8 | TAG_FOUR_B ;
1890- * dst. add ( 1 ) = ( code >> 12 & 0x3F ) as u8 | TAG_CONT ;
1891- * dst. add ( 2 ) = ( code >> 6 & 0x3F ) as u8 | TAG_CONT ;
1892- * dst. add ( 3 ) = ( code & 0x3F ) as u8 | TAG_CONT ;
1893- }
1894- // SAFETY: `char` always takes between 1 and 4 bytes to encode in UTF-8.
1895- _ => crate :: hint:: unreachable_unchecked ( ) ,
1875+ if len == 1 {
1876+ * dst = code as u8 ;
1877+ return ;
18961878 }
1879+
1880+ let last1 = ( code >> 0 & 0x3F ) as u8 | TAG_CONT ;
1881+ let last2 = ( code >> 6 & 0x3F ) as u8 | TAG_CONT ;
1882+ if len == 2 {
1883+ * dst = last2 | TAG_TWO_B ;
1884+ * dst. add ( 1 ) = last1;
1885+ return ;
1886+ }
1887+
1888+ let last3 = ( code >> 12 & 0x3F ) as u8 | TAG_CONT ;
1889+ if len == 3 {
1890+ * dst = last3 | TAG_THREE_B ;
1891+ * dst. add ( 1 ) = last2;
1892+ * dst. add ( 2 ) = last1;
1893+ return ;
1894+ }
1895+
1896+ let last4 = ( code >> 18 & 0x3F ) as u8 | TAG_FOUR_B ;
1897+ * dst = last4 | TAG_FOUR_B ;
1898+ * dst. add ( 1 ) = last3;
1899+ * dst. add ( 2 ) = last2;
1900+ * dst. add ( 3 ) = last1;
18971901 }
18981902}
18991903
You can’t perform that action at this time.
0 commit comments