@@ -142,7 +142,14 @@ impl<'a> Lexer<'a> {
142142 }
143143
144144 #[ inline( always) ]
145+ /// This function should be used to replace [Lexer::input_slice_and_move] if
146+ /// the `end` comes from [Lexer::cur_pos] or [Lexer::last_pos]
145147 unsafe fn input_slice ( & mut self , start : BytePos , end : BytePos ) -> & ' a str {
148+ self . input . fast_slice ( start, end)
149+ }
150+
151+ #[ inline( always) ]
152+ unsafe fn input_slice_and_move ( & mut self , start : BytePos , end : BytePos ) -> & ' a str {
146153 self . input . slice ( start, end)
147154 }
148155
@@ -638,7 +645,7 @@ impl<'a> Lexer<'a> {
638645 let end = self . input( ) . end_pos( ) ;
639646
640647 if self . comments_buffer( ) . is_some( ) {
641- let s = unsafe { self . input_slice ( slice_start, end) } ;
648+ let s = unsafe { self . input_slice_and_move ( slice_start, end) } ;
642649 let cmt = swc_common:: comments:: Comment {
643650 kind: swc_common:: comments:: CommentKind :: Line ,
644651 span: Span :: new_with_checked( start, end) ,
@@ -1045,7 +1052,7 @@ impl<'a> Lexer<'a> {
10451052 let lazy_integer = self . read_number_no_dot_as_str :: < 10 > ( ) ?;
10461053 let s = unsafe {
10471054 // Safety: We got both start and end position from `self.input`
1048- self . input_slice ( lazy_integer. start , lazy_integer. end )
1055+ self . input_slice_and_move ( lazy_integer. start , lazy_integer. end )
10491056 } ;
10501057
10511058 // legacy octal number is not allowed in bigint.
@@ -1157,7 +1164,7 @@ impl<'a> Lexer<'a> {
11571164 let raw = remove_underscore ( raw, has_underscore) ;
11581165 raw. parse ( ) . expect ( "failed to parse float literal" )
11591166 } else {
1160- let s = unsafe { self . input_slice ( lazy_integer. start , lazy_integer. end ) } ;
1167+ let s = unsafe { self . input_slice_and_move ( lazy_integer. start , lazy_integer. end ) } ;
11611168 let s = remove_underscore ( s, has_underscore) ;
11621169 parse_integer :: < 10 > ( & s)
11631170 } ;
@@ -1224,7 +1231,7 @@ impl<'a> Lexer<'a> {
12241231
12251232 let s = unsafe {
12261233 // Safety: We got both start and end position from `self.input`
1227- self . input_slice ( lazy_integer. start , lazy_integer. end )
1234+ self . input_slice_and_move ( lazy_integer. start , lazy_integer. end )
12281235 } ;
12291236 if self . eat ( b'n' ) {
12301237 let end = self . cur_pos ( ) ;
@@ -1873,7 +1880,7 @@ impl<'a> Lexer<'a> {
18731880 let s = unsafe {
18741881 // Safety: start and end are valid position because we got them from
18751882 // `self.input`
1876- self . input_slice ( slice_start, start)
1883+ self . input_slice_and_move ( slice_start, start)
18771884 } ;
18781885 buf. push_str ( s) ;
18791886 unsafe {
0 commit comments