Skip to content

Commit c407c83

Browse files
committed
Support parsing 'unsafe mod'
This too was added in Rust 1.48 by rust-lang/rust#75857
1 parent 2308ad8 commit c407c83

File tree

7 files changed

+22
-0
lines changed

7 files changed

+22
-0
lines changed

src/gen/clone.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,7 @@ impl Clone for ItemMod {
11771177
ItemMod {
11781178
attrs: self.attrs.clone(),
11791179
vis: self.vis.clone(),
1180+
unsafety: self.unsafety.clone(),
11801181
mod_token: self.mod_token.clone(),
11811182
ident: self.ident.clone(),
11821183
content: self.content.clone(),

src/gen/debug.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1655,6 +1655,7 @@ impl Debug for ItemMod {
16551655
let mut formatter = formatter.debug_struct("ItemMod");
16561656
formatter.field("attrs", &self.attrs);
16571657
formatter.field("vis", &self.vis);
1658+
formatter.field("unsafety", &self.unsafety);
16581659
formatter.field("mod_token", &self.mod_token);
16591660
formatter.field("ident", &self.ident);
16601661
formatter.field("content", &self.content);

src/gen/eq.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1182,6 +1182,7 @@ impl PartialEq for ItemMod {
11821182
fn eq(&self, other: &Self) -> bool {
11831183
self.attrs == other.attrs
11841184
&& self.vis == other.vis
1185+
&& self.unsafety == other.unsafety
11851186
&& self.ident == other.ident
11861187
&& self.content == other.content
11871188
&& self.semi == other.semi

src/gen/fold.rs

+1
Original file line numberDiff line numberDiff line change
@@ -2017,6 +2017,7 @@ where
20172017
ItemMod {
20182018
attrs: FoldHelper::lift(node.attrs, |it| f.fold_attribute(it)),
20192019
vis: f.fold_visibility(node.vis),
2020+
unsafety: (node.unsafety).map(|it| Token![unsafe](tokens_helper(f, &it.span))),
20202021
mod_token: Token![mod](tokens_helper(f, &node.mod_token.span)),
20212022
ident: f.fold_ident(node.ident),
20222023
content: (node.content).map(|it| {

src/gen/hash.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1538,6 +1538,7 @@ impl Hash for ItemMod {
15381538
{
15391539
self.attrs.hash(state);
15401540
self.vis.hash(state);
1541+
self.unsafety.hash(state);
15411542
self.ident.hash(state);
15421543
self.content.hash(state);
15431544
self.semi.hash(state);

src/item.rs

+5
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ ast_struct! {
214214
pub struct ItemMod {
215215
pub attrs: Vec<Attribute>,
216216
pub vis: Visibility,
217+
pub unsafety: Option<Token![unsafe]>,
217218
pub mod_token: Token![mod],
218219
pub ident: Ident,
219220
pub content: Option<(token::Brace, Vec<Item>)>,
@@ -1580,6 +1581,7 @@ pub mod parsing {
15801581
fn parse(input: ParseStream) -> Result<Self> {
15811582
let outer_attrs = input.call(Attribute::parse_outer)?;
15821583
let vis: Visibility = input.parse()?;
1584+
let unsafety = input.parse()?;
15831585
let mod_token: Token![mod] = input.parse()?;
15841586
let ident: Ident = input.parse()?;
15851587

@@ -1588,6 +1590,7 @@ pub mod parsing {
15881590
Ok(ItemMod {
15891591
attrs: outer_attrs,
15901592
vis,
1593+
unsafety,
15911594
mod_token,
15921595
ident,
15931596
content: None,
@@ -1606,6 +1609,7 @@ pub mod parsing {
16061609
Ok(ItemMod {
16071610
attrs: private::attrs(outer_attrs, inner_attrs),
16081611
vis,
1612+
unsafety,
16091613
mod_token,
16101614
ident,
16111615
content: Some((brace_token, items)),
@@ -2761,6 +2765,7 @@ mod printing {
27612765
fn to_tokens(&self, tokens: &mut TokenStream) {
27622766
tokens.append_all(self.attrs.outer());
27632767
self.vis.to_tokens(tokens);
2768+
self.unsafety.to_tokens(tokens);
27642769
self.mod_token.to_tokens(tokens);
27652770
self.ident.to_tokens(tokens);
27662771
if let Some((brace, items)) = &self.content {

tests/debug/gen.rs

+12
Original file line numberDiff line numberDiff line change
@@ -3183,6 +3183,18 @@ impl Debug for Lite<syn::ItemMod> {
31833183
formatter.field("attrs", Lite(&_val.attrs));
31843184
}
31853185
formatter.field("vis", Lite(&_val.vis));
3186+
if let Some(val) = &_val.unsafety {
3187+
#[derive(RefCast)]
3188+
#[repr(transparent)]
3189+
struct Print(syn::token::Unsafe);
3190+
impl Debug for Print {
3191+
fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
3192+
formatter.write_str("Some")?;
3193+
Ok(())
3194+
}
3195+
}
3196+
formatter.field("unsafety", Print::ref_cast(val));
3197+
}
31863198
formatter.field("ident", Lite(&_val.ident));
31873199
if let Some(val) = &_val.content {
31883200
#[derive(RefCast)]

0 commit comments

Comments
 (0)