@@ -237,12 +237,16 @@ impl TokenIdAlloc {
237
237
fn open_delim ( & mut self , open_abs_range : TextRange ) -> tt:: TokenId {
238
238
let token_id = tt:: TokenId ( self . next_id ) ;
239
239
self . next_id += 1 ;
240
- self . map . insert_delim ( token_id, open_abs_range, open_abs_range) ;
240
+ self . map . insert_delim (
241
+ token_id,
242
+ open_abs_range - self . global_offset ,
243
+ open_abs_range - self . global_offset ,
244
+ ) ;
241
245
token_id
242
246
}
243
247
244
248
fn close_delim ( & mut self , id : tt:: TokenId , close_abs_range : TextRange ) {
245
- self . map . update_close_delim ( id, close_abs_range) ;
249
+ self . map . update_close_delim ( id, close_abs_range - self . global_offset ) ;
246
250
}
247
251
}
248
252
@@ -297,6 +301,7 @@ trait TokenConvertor {
297
301
}
298
302
299
303
result. push ( if k. is_punct ( ) {
304
+ assert_eq ! ( range. len( ) . to_usize( ) , 1 ) ;
300
305
let delim = match k {
301
306
T ! [ '(' ] => Some ( ( tt:: DelimiterKind :: Parenthesis , T ! [ ')' ] ) ) ,
302
307
T ! [ '{' ] => Some ( ( tt:: DelimiterKind :: Brace , T ! [ '}' ] ) ) ,
@@ -461,25 +466,25 @@ impl TokenConvertor for Convertor {
461
466
}
462
467
463
468
fn bump ( & mut self ) -> Option < ( Self :: Token , TextRange ) > {
464
- let curr = self . current . clone ( ) ?;
465
- if !curr. text_range ( ) . is_subrange ( & self . range ) {
466
- return None ;
467
- }
468
-
469
469
if let Some ( ( punct, offset) ) = self . punct_offset . clone ( ) {
470
470
if offset. to_usize ( ) + 1 < punct. text ( ) . len ( ) {
471
471
let offset = offset + TextUnit :: from_usize ( 1 ) ;
472
472
let range = punct. text_range ( ) ;
473
- self . punct_offset = Some ( ( punct, offset) ) ;
473
+ self . punct_offset = Some ( ( punct. clone ( ) , offset) ) ;
474
474
let range = TextRange :: offset_len ( range. start ( ) + offset, TextUnit :: from_usize ( 1 ) ) ;
475
- return Some ( ( SynToken :: Punch ( curr , offset) , range) ) ;
475
+ return Some ( ( SynToken :: Punch ( punct , offset) , range) ) ;
476
476
}
477
477
}
478
478
479
+ let curr = self . current . clone ( ) ?;
480
+ if !curr. text_range ( ) . is_subrange ( & self . range ) {
481
+ return None ;
482
+ }
479
483
self . current = curr. next_token ( ) ;
480
484
481
485
let token = if curr. kind ( ) . is_punct ( ) {
482
486
let range = curr. text_range ( ) ;
487
+ let range = TextRange :: offset_len ( range. start ( ) , TextUnit :: from_usize ( 1 ) ) ;
483
488
self . punct_offset = Some ( ( curr. clone ( ) , TextUnit :: from_usize ( 0 ) ) ) ;
484
489
( SynToken :: Punch ( curr, TextUnit :: from_usize ( 0 ) ) , range)
485
490
} else {
@@ -492,18 +497,18 @@ impl TokenConvertor for Convertor {
492
497
}
493
498
494
499
fn peek ( & self ) -> Option < Self :: Token > {
495
- let curr = self . current . clone ( ) ?;
496
- if !curr. text_range ( ) . is_subrange ( & self . range ) {
497
- return None ;
498
- }
499
-
500
500
if let Some ( ( punct, mut offset) ) = self . punct_offset . clone ( ) {
501
501
offset = offset + TextUnit :: from_usize ( 1 ) ;
502
502
if offset. to_usize ( ) < punct. text ( ) . len ( ) {
503
503
return Some ( SynToken :: Punch ( punct, offset) ) ;
504
504
}
505
505
}
506
506
507
+ let curr = self . current . clone ( ) ?;
508
+ if !curr. text_range ( ) . is_subrange ( & self . range ) {
509
+ return None ;
510
+ }
511
+
507
512
let token = if curr. kind ( ) . is_punct ( ) {
508
513
SynToken :: Punch ( curr, TextUnit :: from_usize ( 0 ) )
509
514
} else {
0 commit comments