@@ -88,7 +88,7 @@ impl<'a> StringReader<'a> {
8888 /// Returns the next token. EFFECT: advances the string_reader.
8989 pub fn try_next_token ( & mut self ) -> Result < Token , ( ) > {
9090 assert ! ( self . fatal_errs. is_empty( ) ) ;
91- let ret_val = self . peek_token . clone ( ) ;
91+ let ret_val = self . peek_token . take ( ) ;
9292 self . advance_token ( ) ?;
9393 Ok ( ret_val)
9494 }
@@ -205,8 +205,7 @@ impl<'a> StringReader<'a> {
205205 ch : Some ( '\n' ) ,
206206 source_file,
207207 end_src_index : src. len ( ) ,
208- // dummy values; not read
209- peek_token : Token { kind : token:: Eof , span : syntax_pos:: DUMMY_SP } ,
208+ peek_token : Token :: dummy ( ) ,
210209 peek_span_src_raw : syntax_pos:: DUMMY_SP ,
211210 src,
212211 fatal_errs : Vec :: new ( ) ,
@@ -320,21 +319,15 @@ impl<'a> StringReader<'a> {
320319 self . peek_token = comment;
321320 }
322321 None => {
323- if self . is_eof ( ) {
324-
325- let ( real, raw) = self . mk_sp_and_raw (
326- self . source_file . end_pos ,
327- self . source_file . end_pos ,
328- ) ;
329- self . peek_token = Token { kind : token:: Eof , span : real } ;
330- self . peek_span_src_raw = raw;
322+ let ( kind, start_pos, end_pos) = if self . is_eof ( ) {
323+ ( token:: Eof , self . source_file . end_pos , self . source_file . end_pos )
331324 } else {
332- let start_bytepos = self . pos ;
333- let kind = self . next_token_inner ( ) ?;
334- let ( real, raw) = self . mk_sp_and_raw ( start_bytepos, self . pos ) ;
335- self . peek_token = Token { kind, span : real } ;
336- self . peek_span_src_raw = raw;
325+ let start_pos = self . pos ;
326+ ( self . next_token_inner ( ) ?, start_pos, self . pos )
337327 } ;
328+ let ( real, raw) = self . mk_sp_and_raw ( start_pos, end_pos) ;
329+ self . peek_token = Token :: new ( kind, real) ;
330+ self . peek_span_src_raw = raw;
338331 }
339332 }
340333
@@ -544,7 +537,7 @@ impl<'a> StringReader<'a> {
544537 } else {
545538 token:: Comment
546539 } ;
547- Some ( Token { kind, span : self . mk_sp ( start_bpos, self . pos ) } )
540+ Some ( Token :: new ( kind, self . mk_sp ( start_bpos, self . pos ) ) )
548541 }
549542 Some ( '*' ) => {
550543 self . bump ( ) ;
@@ -568,10 +561,10 @@ impl<'a> StringReader<'a> {
568561 while !self . ch_is ( '\n' ) && !self . is_eof ( ) {
569562 self . bump ( ) ;
570563 }
571- return Some ( Token {
572- kind : token:: Shebang ( self . name_from ( start) ) ,
573- span : self . mk_sp ( start, self . pos ) ,
574- } ) ;
564+ return Some ( Token :: new (
565+ token:: Shebang ( self . name_from ( start) ) ,
566+ self . mk_sp ( start, self . pos ) ,
567+ ) ) ;
575568 }
576569 }
577570 None
@@ -596,10 +589,7 @@ impl<'a> StringReader<'a> {
596589 while is_pattern_whitespace ( self . ch ) {
597590 self . bump ( ) ;
598591 }
599- let c = Some ( Token {
600- kind : token:: Whitespace ,
601- span : self . mk_sp ( start_bpos, self . pos ) ,
602- } ) ;
592+ let c = Some ( Token :: new ( token:: Whitespace , self . mk_sp ( start_bpos, self . pos ) ) ) ;
603593 debug ! ( "scanning whitespace: {:?}" , c) ;
604594 c
605595 }
@@ -658,10 +648,7 @@ impl<'a> StringReader<'a> {
658648 token:: Comment
659649 } ;
660650
661- Some ( Token {
662- kind,
663- span : self . mk_sp ( start_bpos, self . pos ) ,
664- } )
651+ Some ( Token :: new ( kind, self . mk_sp ( start_bpos, self . pos ) ) )
665652 } )
666653 }
667654
@@ -1588,21 +1575,21 @@ mod tests {
15881575 assert_eq ! ( string_reader. next_token( ) , token:: Comment ) ;
15891576 assert_eq ! ( string_reader. next_token( ) , token:: Whitespace ) ;
15901577 let tok1 = string_reader. next_token ( ) ;
1591- let tok2 = Token {
1592- kind : token:: Ident ( id, false ) ,
1593- span : Span :: new ( BytePos ( 21 ) , BytePos ( 23 ) , NO_EXPANSION ) ,
1594- } ;
1578+ let tok2 = Token :: new (
1579+ token:: Ident ( id, false ) ,
1580+ Span :: new ( BytePos ( 21 ) , BytePos ( 23 ) , NO_EXPANSION ) ,
1581+ ) ;
15951582 assert_eq ! ( tok1. kind, tok2. kind) ;
15961583 assert_eq ! ( tok1. span, tok2. span) ;
15971584 assert_eq ! ( string_reader. next_token( ) , token:: Whitespace ) ;
15981585 // the 'main' id is already read:
15991586 assert_eq ! ( string_reader. pos. clone( ) , BytePos ( 28 ) ) ;
16001587 // read another token:
16011588 let tok3 = string_reader. next_token ( ) ;
1602- let tok4 = Token {
1603- kind : mk_ident ( "main" ) ,
1604- span : Span :: new ( BytePos ( 24 ) , BytePos ( 28 ) , NO_EXPANSION ) ,
1605- } ;
1589+ let tok4 = Token :: new (
1590+ mk_ident ( "main" ) ,
1591+ Span :: new ( BytePos ( 24 ) , BytePos ( 28 ) , NO_EXPANSION ) ,
1592+ ) ;
16061593 assert_eq ! ( tok3. kind, tok4. kind) ;
16071594 assert_eq ! ( tok3. span, tok4. span) ;
16081595 // the lparen is already read:
0 commit comments