@@ -112,10 +112,10 @@ impl<'a> ParserImpl<'a> {
112
112
113
113
#[ inline]
114
114
pub ( crate ) fn parse_identifier_kind ( & mut self , kind : Kind ) -> ( Span , Atom < ' a > ) {
115
- let span = self . start_span ( ) ;
115
+ let span = self . cur_token ( ) . span ( ) ;
116
116
let name = self . cur_string ( ) ;
117
117
self . bump_remap ( kind) ;
118
- ( self . end_span ( span) , Atom :: from ( name) )
118
+ ( span, Atom :: from ( name) )
119
119
}
120
120
121
121
pub ( crate ) fn check_identifier ( & mut self , kind : Kind , ctx : Context ) {
@@ -134,10 +134,10 @@ impl<'a> ParserImpl<'a> {
134
134
/// # `IdentifierName`
135
135
/// # Panics
136
136
pub ( crate ) fn parse_private_identifier ( & mut self ) -> PrivateIdentifier < ' a > {
137
- let span = self . start_span ( ) ;
137
+ let span = self . cur_token ( ) . span ( ) ;
138
138
let name = Atom :: from ( self . cur_string ( ) ) ;
139
139
self . bump_any ( ) ;
140
- self . ast . private_identifier ( self . end_span ( span) , name)
140
+ self . ast . private_identifier ( span, name)
141
141
}
142
142
143
143
/// Section [Primary Expression](https://tc39.es/ecma262/#sec-primary-expression)
@@ -281,14 +281,14 @@ impl<'a> ParserImpl<'a> {
281
281
}
282
282
283
283
pub ( crate ) fn parse_literal_null ( & mut self ) -> NullLiteral {
284
- let span = self . start_span ( ) ;
284
+ let span = self . cur_token ( ) . span ( ) ;
285
285
self . bump_any ( ) ; // bump `null`
286
- self . ast . null_literal ( self . end_span ( span) )
286
+ self . ast . null_literal ( span)
287
287
}
288
288
289
289
pub ( crate ) fn parse_literal_number ( & mut self ) -> NumericLiteral < ' a > {
290
- let span = self . start_span ( ) ;
291
290
let token = self . cur_token ( ) ;
291
+ let span = token. span ( ) ;
292
292
let src = self . cur_src ( ) ;
293
293
let value = match token. kind ( ) {
294
294
Kind :: Decimal | Kind :: Binary | Kind :: Octal | Kind :: Hex => {
@@ -300,7 +300,7 @@ impl<'a> ParserImpl<'a> {
300
300
_ => unreachable ! ( ) ,
301
301
} ;
302
302
let value = value. unwrap_or_else ( |err| {
303
- self . set_fatal_error ( diagnostics:: invalid_number ( err, token . span ( ) ) ) ;
303
+ self . set_fatal_error ( diagnostics:: invalid_number ( err, span) ) ;
304
304
0.0 // Dummy value
305
305
} ) ;
306
306
let base = match token. kind ( ) {
@@ -319,11 +319,10 @@ impl<'a> ParserImpl<'a> {
319
319
_ => return self . unexpected ( ) ,
320
320
} ;
321
321
self . bump_any ( ) ;
322
- self . ast . numeric_literal ( self . end_span ( span) , value, Some ( Atom :: from ( src) ) , base)
322
+ self . ast . numeric_literal ( span, value, Some ( Atom :: from ( src) ) , base)
323
323
}
324
324
325
325
pub ( crate ) fn parse_literal_bigint ( & mut self ) -> BigIntLiteral < ' a > {
326
- let span = self . start_span ( ) ;
327
326
let base = match self . cur_kind ( ) {
328
327
Kind :: Decimal => BigintBase :: Decimal ,
329
328
Kind :: Binary => BigintBase :: Binary ,
@@ -332,24 +331,25 @@ impl<'a> ParserImpl<'a> {
332
331
_ => return self . unexpected ( ) ,
333
332
} ;
334
333
let token = self . cur_token ( ) ;
334
+ let span = token. span ( ) ;
335
335
let raw = self . cur_src ( ) ;
336
336
let src = raw. strip_suffix ( 'n' ) . unwrap ( ) ;
337
337
let _value = parse_big_int ( src, token. kind ( ) , token. has_separator ( ) )
338
- . map_err ( |err| diagnostics:: invalid_number ( err, token . span ( ) ) ) ;
338
+ . map_err ( |err| diagnostics:: invalid_number ( err, span) ) ;
339
339
self . bump_any ( ) ;
340
- self . ast . big_int_literal ( self . end_span ( span) , raw, base)
340
+ self . ast . big_int_literal ( span, raw, base)
341
341
}
342
342
343
343
pub ( crate ) fn parse_literal_regexp ( & mut self ) -> RegExpLiteral < ' a > {
344
- let span = self . start_span ( ) ;
345
344
let ( pattern_end, flags, flags_error) = self . read_regex ( ) ;
346
345
if !self . lexer . errors . is_empty ( ) {
347
346
return self . unexpected ( ) ;
348
347
}
349
- let pattern_start = self . cur_token ( ) . start ( ) + 1 ; // +1 to exclude left `/`
348
+ let span = self . cur_token ( ) . span ( ) ;
349
+ let pattern_start = span. start + 1 ; // +1 to exclude left `/`
350
350
let pattern_text = & self . source_text [ pattern_start as usize ..pattern_end as usize ] ;
351
351
let flags_start = pattern_end + 1 ; // +1 to include right `/`
352
- let flags_text = & self . source_text [ flags_start as usize ..self . cur_token ( ) . end ( ) as usize ] ;
352
+ let flags_text = & self . source_text [ flags_start as usize ..span . end as usize ] ;
353
353
let raw = self . cur_src ( ) ;
354
354
self . bump_any ( ) ;
355
355
@@ -368,11 +368,7 @@ impl<'a> ParserImpl<'a> {
368
368
369
369
let pattern = RegExpPattern { text : Atom :: from ( pattern_text) , pattern } ;
370
370
371
- self . ast . reg_exp_literal (
372
- self . end_span ( span) ,
373
- RegExp { pattern, flags } ,
374
- Some ( Atom :: from ( raw) ) ,
375
- )
371
+ self . ast . reg_exp_literal ( span, RegExp { pattern, flags } , Some ( Atom :: from ( raw) ) )
376
372
}
377
373
378
374
#[ cfg( feature = "regular_expression" ) ]
@@ -404,16 +400,11 @@ impl<'a> ParserImpl<'a> {
404
400
if !self . at ( Kind :: Str ) {
405
401
return self . unexpected ( ) ;
406
402
}
403
+ let span = self . cur_token ( ) . span ( ) ;
404
+ let raw = Atom :: from ( self . cur_src ( ) ) ;
407
405
let value = self . cur_string ( ) ;
408
- let span = self . start_span ( ) ;
409
406
let lone_surrogates = self . cur_token ( ) . lone_surrogates ( ) ;
410
407
self . bump_any ( ) ;
411
- let span = self . end_span ( span) ;
412
- // SAFETY:
413
- // range comes from the lexer, which are ensured to meeting the criteria of `get_unchecked`.
414
- let raw = Atom :: from ( unsafe {
415
- self . source_text . get_unchecked ( span. start as usize ..span. end as usize )
416
- } ) ;
417
408
self . ast . string_literal_with_lone_surrogates ( span, value, Some ( raw) , lone_surrogates)
418
409
}
419
410
0 commit comments