Skip to content

Commit c598a27

Browse files
committed
Represent the unsafety on foreign module
1 parent 00a8385 commit c598a27

File tree

2 files changed

+19
-5
lines changed

2 files changed

+19
-5
lines changed

syntax/file.rs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::syntax::namespace::Namespace;
22
use quote::quote;
33
use syn::parse::{Error, Parse, ParseStream, Result};
44
use syn::{
5-
braced, token, Attribute, Ident, Item as RustItem, ItemEnum, ItemForeignMod, ItemStruct,
5+
braced, token, Abi, Attribute, ForeignItem, Ident, Item as RustItem, ItemEnum, ItemStruct,
66
ItemUse, Token, Visibility,
77
};
88

@@ -25,6 +25,14 @@ pub enum Item {
2525
Other(RustItem),
2626
}
2727

28+
pub struct ItemForeignMod {
29+
pub attrs: Vec<Attribute>,
30+
pub unsafety: Option<Token![unsafe]>,
31+
pub abi: Abi,
32+
pub brace_token: token::Brace,
33+
pub items: Vec<ForeignItem>,
34+
}
35+
2836
impl Parse for Module {
2937
fn parse(input: ParseStream) -> Result<Self> {
3038
let namespace = Namespace::none();
@@ -71,7 +79,13 @@ impl Parse for Item {
7179
match item {
7280
RustItem::Struct(item) => Ok(Item::Struct(item)),
7381
RustItem::Enum(item) => Ok(Item::Enum(item)),
74-
RustItem::ForeignMod(item) => Ok(Item::ForeignMod(item)),
82+
RustItem::ForeignMod(item) => Ok(Item::ForeignMod(ItemForeignMod {
83+
attrs: item.attrs,
84+
unsafety: None,
85+
abi: item.abi,
86+
brace_token: item.brace_token,
87+
items: item.items,
88+
})),
7589
RustItem::Use(item) => Ok(Item::Use(item)),
7690
other => Ok(Item::Other(other)),
7791
}

syntax/parse.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::syntax::discriminant::DiscriminantSet;
2-
use crate::syntax::file::Item;
2+
use crate::syntax::file::{Item, ItemForeignMod};
33
use crate::syntax::report::Errors;
44
use crate::syntax::Atom::*;
55
use crate::syntax::{
@@ -12,8 +12,8 @@ use syn::parse::{ParseStream, Parser};
1212
use syn::punctuated::Punctuated;
1313
use syn::{
1414
Abi, Attribute, Error, Fields, FnArg, ForeignItem, ForeignItemFn, ForeignItemType,
15-
GenericArgument, Ident, ItemEnum, ItemForeignMod, ItemStruct, LitStr, Pat, PathArguments,
16-
Result, ReturnType, Token, Type as RustType, TypeBareFn, TypePath, TypeReference, TypeSlice,
15+
GenericArgument, Ident, ItemEnum, ItemStruct, LitStr, Pat, PathArguments, Result, ReturnType,
16+
Token, Type as RustType, TypeBareFn, TypePath, TypeReference, TypeSlice,
1717
};
1818

1919
pub mod kw {

0 commit comments

Comments
 (0)