@@ -49,6 +49,7 @@ impl<'a> Parser<'a> {
4949    } 
5050
5151    /// Parses the contents of a module (inner attributes followed by module items). 
52+      /// We exit once we hit `term` 
5253     pub  fn  parse_mod ( 
5354        & mut  self , 
5455        term :  & TokenKind , 
@@ -59,13 +60,13 @@ impl<'a> Parser<'a> {
5960        let  post_attr_lo = self . token . span ; 
6061        let  mut  items = ThinVec :: new ( ) ; 
6162        while  let  Some ( item)  = self . parse_item ( ForceCollect :: No ) ? { 
63+             self . maybe_consume_incorrect_semicolon ( Some ( & item) ) ; 
6264            items. push ( item) ; 
63-             self . maybe_consume_incorrect_semicolon ( & items) ; 
6465        } 
6566
6667        if  !self . eat ( term)  { 
6768            let  token_str = super :: token_descr ( & self . token ) ; 
68-             if  !self . maybe_consume_incorrect_semicolon ( & items)  { 
69+             if  !self . maybe_consume_incorrect_semicolon ( items. last ( ) . map ( |x|  & * * x ) )  { 
6970                let  msg = format ! ( "expected item, found {token_str}" ) ; 
7071                let  mut  err = self . dcx ( ) . struct_span_err ( self . token . span ,  msg) ; 
7172                let  span = self . token . span ; 
@@ -101,9 +102,9 @@ impl<'a> Parser<'a> {
101102        fn_parse_mode :  FnParseMode , 
102103        force_collect :  ForceCollect , 
103104    )  -> PResult < ' a ,  Option < Item > >  { 
104-         self . recover_diff_marker ( ) ; 
105+         self . recover_vcs_conflict_marker ( ) ; 
105106        let  attrs = self . parse_outer_attributes ( ) ?; 
106-         self . recover_diff_marker ( ) ; 
107+         self . recover_vcs_conflict_marker ( ) ; 
107108        self . parse_item_common ( attrs,  true ,  false ,  fn_parse_mode,  force_collect) 
108109    } 
109110
@@ -194,12 +195,12 @@ impl<'a> Parser<'a> {
194195        fn_parse_mode :  FnParseMode , 
195196        case :  Case , 
196197    )  -> PResult < ' a ,  Option < ItemInfo > >  { 
197-         let  def_final  = def == & Defaultness :: Final ; 
198+         let  check_pub  = def == & Defaultness :: Final ; 
198199        let  mut  def_ = || mem:: replace ( def,  Defaultness :: Final ) ; 
199200
200201        let  info = if  self . eat_keyword_case ( kw:: Use ,  case)  { 
201202            self . parse_use_item ( ) ?
202-         }  else  if  self . check_fn_front_matter ( def_final ,  case)  { 
203+         }  else  if  self . check_fn_front_matter ( check_pub ,  case)  { 
203204            // FUNCTION ITEM 
204205            let  ( ident,  sig,  generics,  body)  =
205206                self . parse_fn ( attrs,  fn_parse_mode,  lo,  vis,  case) ?; 
@@ -310,7 +311,7 @@ impl<'a> Parser<'a> {
310311        Ok ( Some ( info) ) 
311312    } 
312313
313-     fn  recover_import_as_use ( & mut  self )  -> PResult < ' a ,  Option < ( Ident ,   ItemKind ) > >  { 
314+     fn  recover_import_as_use ( & mut  self )  -> PResult < ' a ,  Option < ItemInfo > >  { 
314315        let  span = self . token . span ; 
315316        let  token_name = super :: token_descr ( & self . token ) ; 
316317        let  snapshot = self . create_snapshot_for_diagnostic ( ) ; 
@@ -328,7 +329,7 @@ impl<'a> Parser<'a> {
328329        } 
329330    } 
330331
331-     fn  parse_use_item ( & mut  self )  -> PResult < ' a ,  ( Ident ,   ItemKind ) >  { 
332+     fn  parse_use_item ( & mut  self )  -> PResult < ' a ,  ItemInfo >  { 
332333        let  tree = self . parse_use_tree ( ) ?; 
333334        if  let  Err ( mut  e)  = self . expect_semi ( )  { 
334335            match  tree. kind  { 
@@ -738,7 +739,7 @@ impl<'a> Parser<'a> {
738739            if  self . recover_doc_comment_before_brace ( )  { 
739740                continue ; 
740741            } 
741-             self . recover_diff_marker ( ) ; 
742+             self . recover_vcs_conflict_marker ( ) ; 
742743            match  parse_item ( self )  { 
743744                Ok ( None )  => { 
744745                    let  mut  is_unnecessary_semicolon = !items. is_empty ( ) 
@@ -1085,7 +1086,7 @@ impl<'a> Parser<'a> {
10851086     /// ``` 
10861087     fn  parse_use_tree_list ( & mut  self )  -> PResult < ' a ,  ThinVec < ( UseTree ,  ast:: NodeId ) > >  { 
10871088        self . parse_delim_comma_seq ( Delimiter :: Brace ,  |p| { 
1088-             p. recover_diff_marker ( ) ; 
1089+             p. recover_vcs_conflict_marker ( ) ; 
10891090            Ok ( ( p. parse_use_tree ( ) ?,  DUMMY_NODE_ID ) ) 
10901091        } ) 
10911092        . map ( |( r,  _) | r) 
@@ -1512,9 +1513,9 @@ impl<'a> Parser<'a> {
15121513    } 
15131514
15141515    fn  parse_enum_variant ( & mut  self ,  span :  Span )  -> PResult < ' a ,  Option < Variant > >  { 
1515-         self . recover_diff_marker ( ) ; 
1516+         self . recover_vcs_conflict_marker ( ) ; 
15161517        let  variant_attrs = self . parse_outer_attributes ( ) ?; 
1517-         self . recover_diff_marker ( ) ; 
1518+         self . recover_vcs_conflict_marker ( ) ; 
15181519        let  help = "enum variants can be `Variant`, `Variant = <integer>`, \  
15191520                     `Variant(Type, ..., TypeN)` or `Variant { fields: Types }`"; 
15201521        self . collect_tokens_trailing_token ( 
@@ -1703,6 +1704,10 @@ impl<'a> Parser<'a> {
17031704        Ok ( ( class_name,  ItemKind :: Union ( vdata,  generics) ) ) 
17041705    } 
17051706
1707+     /// This function parses the fields of record structs: 
1708+      /// 
1709+      ///   - `struct S { ... }` 
1710+      ///   - `enum E { Variant { ... } }` 
17061711     pub ( crate )  fn  parse_record_struct_body ( 
17071712        & mut  self , 
17081713        adt_ty :  & str , 
@@ -1729,19 +1734,10 @@ impl<'a> Parser<'a> {
17291734            self . eat ( & token:: CloseDelim ( Delimiter :: Brace ) ) ; 
17301735        }  else  { 
17311736            let  token_str = super :: token_descr ( & self . token ) ; 
1732-             let  msg = format ! ( 
1733-                 "expected {}`{{` after struct name, found {}" , 
1734-                 if  parsed_where {  ""  }  else {  "`where`, or "  } , 
1735-                 token_str
1736-             ) ; 
1737+             let  where_str = if  parsed_where {  ""  }  else  {  "`where`, or "  } ; 
1738+             let  msg = format ! ( "expected {where_str}`{{` after struct name, found {token_str}" ) ; 
17371739            let  mut  err = self . dcx ( ) . struct_span_err ( self . token . span ,  msg) ; 
1738-             err. span_label ( 
1739-                 self . token . span , 
1740-                 format ! ( 
1741-                     "expected {}`{{` after struct name" , 
1742-                     if  parsed_where {  ""  }  else {  "`where`, or "  } 
1743-                 ) , 
1744-             ) ; 
1740+             err. span_label ( self . token . span ,  format ! ( "expected {where_str}`{{` after struct name" , ) ) ; 
17451741            return  Err ( err) ; 
17461742        } 
17471743
@@ -1755,7 +1751,7 @@ impl<'a> Parser<'a> {
17551751            let  attrs = p. parse_outer_attributes ( ) ?; 
17561752            p. collect_tokens_trailing_token ( attrs,  ForceCollect :: No ,  |p,  attrs| { 
17571753                let  mut  snapshot = None ; 
1758-                 if  p. is_diff_marker ( & TokenKind :: BinOp ( token:: Shl ) ,  & TokenKind :: Lt )  { 
1754+                 if  p. is_vcs_conflict_marker ( & TokenKind :: BinOp ( token:: Shl ) ,  & TokenKind :: Lt )  { 
17591755                    // Account for `<<<<<<<` diff markers. We can't proactively error here because 
17601756                    // that can be a valid type start, so we snapshot and reparse only we've 
17611757                    // encountered another parse error. 
@@ -1766,7 +1762,7 @@ impl<'a> Parser<'a> {
17661762                    Ok ( vis)  => vis, 
17671763                    Err ( err)  => { 
17681764                        if  let  Some ( ref  mut  snapshot)  = snapshot { 
1769-                             snapshot. recover_diff_marker ( ) ; 
1765+                             snapshot. recover_vcs_conflict_marker ( ) ; 
17701766                        } 
17711767                        return  Err ( err) ; 
17721768                    } 
@@ -1775,7 +1771,7 @@ impl<'a> Parser<'a> {
17751771                    Ok ( ty)  => ty, 
17761772                    Err ( err)  => { 
17771773                        if  let  Some ( ref  mut  snapshot)  = snapshot { 
1778-                             snapshot. recover_diff_marker ( ) ; 
1774+                             snapshot. recover_vcs_conflict_marker ( ) ; 
17791775                        } 
17801776                        return  Err ( err) ; 
17811777                    } 
@@ -1800,9 +1796,9 @@ impl<'a> Parser<'a> {
18001796
18011797    /// Parses an element of a struct declaration. 
18021798     fn  parse_field_def ( & mut  self ,  adt_ty :  & str )  -> PResult < ' a ,  FieldDef >  { 
1803-         self . recover_diff_marker ( ) ; 
1799+         self . recover_vcs_conflict_marker ( ) ; 
18041800        let  attrs = self . parse_outer_attributes ( ) ?; 
1805-         self . recover_diff_marker ( ) ; 
1801+         self . recover_vcs_conflict_marker ( ) ; 
18061802        self . collect_tokens_trailing_token ( attrs,  ForceCollect :: No ,  |this,  attrs| { 
18071803            let  lo = this. token . span ; 
18081804            let  vis = this. parse_visibility ( FollowedByType :: No ) ?; 
@@ -2662,7 +2658,7 @@ impl<'a> Parser<'a> {
26622658        } 
26632659
26642660        let  ( mut  params,  _)  = self . parse_paren_comma_seq ( |p| { 
2665-             p. recover_diff_marker ( ) ; 
2661+             p. recover_vcs_conflict_marker ( ) ; 
26662662            let  snapshot = p. create_snapshot_for_diagnostic ( ) ; 
26672663            let  param = p. parse_param_general ( req_name,  first_param) . or_else ( |e| { 
26682664                let  guar = e. emit ( ) ; 
0 commit comments