@@ -228,8 +228,8 @@ impl<'a> Parser<'a> {
228228 body,
229229 define_opaque : None ,
230230 } ) )
231- } else if self . eat_keyword ( exp ! ( Extern ) ) {
232- if self . eat_keyword ( exp ! ( Crate ) ) {
231+ } else if self . eat_keyword_case ( exp ! ( Extern ) , case ) {
232+ if self . eat_keyword_case ( exp ! ( Crate ) , case ) {
233233 // EXTERN CRATE
234234 self . parse_item_extern_crate ( ) ?
235235 } else {
@@ -241,19 +241,17 @@ impl<'a> Parser<'a> {
241241 let safety = self . parse_safety ( Case :: Sensitive ) ;
242242 self . expect_keyword ( exp ! ( Extern ) ) ?;
243243 self . parse_item_foreign_mod ( attrs, safety) ?
244- } else if self . is_static_global ( ) {
245- let safety = self . parse_safety ( Case :: Sensitive ) ;
244+ } else if let Some ( safety) = self . parse_global_static_front_matter ( case) {
246245 // STATIC ITEM
247- self . bump ( ) ; // `static`
248246 let mutability = self . parse_mutability ( ) ;
249247 self . parse_static_item ( safety, mutability) ?
250- } else if self . check_keyword ( exp ! ( Trait ) ) || self . check_trait_front_matter ( ) {
248+ } else if self . check_keyword_case ( exp ! ( Trait ) , case ) || self . check_trait_front_matter ( ) {
251249 // TRAIT ITEM
252250 self . parse_item_trait ( attrs, lo) ?
253251 } else if self . check_impl_frontmatter ( ) {
254252 // IMPL ITEM
255253 self . parse_item_impl ( attrs, def_ ( ) ) ?
256- } else if let Const :: Yes ( const_span) = self . parse_constness ( Case :: Sensitive ) {
254+ } else if let Const :: Yes ( const_span) = self . parse_constness ( case ) {
257255 // CONST ITEM
258256 self . recover_const_mut ( const_span) ;
259257 self . recover_missing_kw_before_item ( ) ?;
@@ -268,18 +266,18 @@ impl<'a> Parser<'a> {
268266 } ) )
269267 } else if self . is_reuse_path_item ( ) {
270268 self . parse_item_delegation ( ) ?
271- } else if self . check_keyword ( exp ! ( Mod ) )
272- || self . check_keyword ( exp ! ( Unsafe ) ) && self . is_keyword_ahead ( 1 , & [ kw:: Mod ] )
269+ } else if self . check_keyword_case ( exp ! ( Mod ) , case )
270+ || self . check_keyword_case ( exp ! ( Unsafe ) , case ) && self . is_keyword_ahead ( 1 , & [ kw:: Mod ] )
273271 {
274272 // MODULE ITEM
275273 self . parse_item_mod ( attrs) ?
276- } else if self . eat_keyword ( exp ! ( Type ) ) {
274+ } else if self . eat_keyword_case ( exp ! ( Type ) , case ) {
277275 // TYPE ITEM
278276 self . parse_type_alias ( def_ ( ) ) ?
279- } else if self . eat_keyword ( exp ! ( Enum ) ) {
277+ } else if self . eat_keyword_case ( exp ! ( Enum ) , case ) {
280278 // ENUM ITEM
281279 self . parse_item_enum ( ) ?
282- } else if self . eat_keyword ( exp ! ( Struct ) ) {
280+ } else if self . eat_keyword_case ( exp ! ( Struct ) , case ) {
283281 // STRUCT ITEM
284282 self . parse_item_struct ( ) ?
285283 } else if self . is_kw_followed_by_ident ( kw:: Union ) {
@@ -289,7 +287,7 @@ impl<'a> Parser<'a> {
289287 } else if self . is_builtin ( ) {
290288 // BUILTIN# ITEM
291289 return self . parse_item_builtin ( ) ;
292- } else if self . eat_keyword ( exp ! ( Macro ) ) {
290+ } else if self . eat_keyword_case ( exp ! ( Macro ) , case ) {
293291 // MACROS 2.0 ITEM
294292 self . parse_item_decl_macro ( lo) ?
295293 } else if let IsMacroRulesItem :: Yes { has_bang } = self . is_macro_rules_item ( ) {
@@ -1324,19 +1322,28 @@ impl<'a> Parser<'a> {
13241322 == Some ( true )
13251323 }
13261324
1327- fn is_static_global ( & mut self ) -> bool {
1328- if self . check_keyword ( exp ! ( Static ) ) {
1325+ fn parse_global_static_front_matter ( & mut self , case : Case ) -> Option < Safety > {
1326+ let is_global_static = if self . check_keyword_case ( exp ! ( Static ) , case ) {
13291327 // Check if this could be a closure.
13301328 !self . look_ahead ( 1 , |token| {
1331- if token. is_keyword ( kw:: Move ) || token. is_keyword ( kw:: Use ) {
1329+ if token. is_keyword_case ( kw:: Move , case ) || token. is_keyword_case ( kw:: Use , case ) {
13321330 return true ;
13331331 }
13341332 matches ! ( token. kind, token:: Or | token:: OrOr )
13351333 } )
13361334 } else {
13371335 // `$qual static`
1338- ( self . check_keyword ( exp ! ( Unsafe ) ) || self . check_keyword ( exp ! ( Safe ) ) )
1339- && self . look_ahead ( 1 , |t| t. is_keyword ( kw:: Static ) )
1336+ ( self . check_keyword_case ( exp ! ( Unsafe ) , case)
1337+ || self . check_keyword_case ( exp ! ( Safe ) , case) )
1338+ && self . look_ahead ( 1 , |t| t. is_keyword_case ( kw:: Static , case) )
1339+ } ;
1340+
1341+ if is_global_static {
1342+ let safety = self . parse_safety ( case) ;
1343+ let _ = self . eat_keyword_case ( exp ! ( Static ) , case) ;
1344+ Some ( safety)
1345+ } else {
1346+ None
13401347 }
13411348 }
13421349
0 commit comments