diff options
| author | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-02-15 02:23:10 +0100 |
|---|---|---|
| committer | Mazdak Farrokhzad <twingoow@gmail.com> | 2020-02-15 20:57:12 +0100 |
| commit | 35884fe16889b39d4be43cf8effc3bdf843c6f12 (patch) | |
| tree | c9d96a9b030337918d88626ee48bb3c7bebb3060 /src/libsyntax | |
| parent | f8d2264463162291f5cb3391c98d7bc95ec17d87 (diff) | |
parse extern consts
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 4 | ||||
| -rw-r--r-- | src/libsyntax/mut_visit.rs | 2 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 3 |
3 files changed, 7 insertions, 2 deletions
diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index ca39fbd6c5d..5041d43b16c 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -2605,6 +2605,9 @@ pub type ForeignItem = Item<ForeignItemKind>; /// An item within an `extern` block. #[derive(Clone, RustcEncodable, RustcDecodable, Debug)] pub enum ForeignItemKind { + /// A constant, `const $ident: $ty $def?;` where `def ::= "=" $expr? ;`. + /// If `def` is parsed, then the constant is provided, and otherwise required. + Const(P<Ty>, Option<P<Expr>>), /// A static item (`static FOO: u8`). Static(P<Ty>, Mutability, Option<P<Expr>>), /// A function. @@ -2619,6 +2622,7 @@ impl ForeignItemKind { pub fn descriptive_variant(&self) -> &str { match *self { ForeignItemKind::Fn(..) => "foreign function", + ForeignItemKind::Const(..) => "foreign const item", ForeignItemKind::Static(..) => "foreign static item", ForeignItemKind::TyAlias(..) => "foreign type", ForeignItemKind::Macro(..) => "macro in foreign module", diff --git a/src/libsyntax/mut_visit.rs b/src/libsyntax/mut_visit.rs index 91db6158689..ffc42340dba 100644 --- a/src/libsyntax/mut_visit.rs +++ b/src/libsyntax/mut_visit.rs @@ -1046,7 +1046,7 @@ pub fn noop_flat_map_foreign_item<T: MutVisitor>( visitor.visit_generics(generics); visit_opt(body, |body| visitor.visit_block(body)); } - ForeignItemKind::Static(ty, _, body) => { + ForeignItemKind::Const(ty, body) | ForeignItemKind::Static(ty, _, body) => { visitor.visit_ty(ty); visit_opt(body, |body| visitor.visit_expr(body)); } diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index f5763ecf573..5a21eb55528 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -534,7 +534,8 @@ pub fn walk_foreign_item<'a, V: Visitor<'a>>(visitor: &mut V, item: &'a ForeignI let kind = FnKind::Fn(FnCtxt::Foreign, item.ident, sig, &item.vis, body.as_deref()); visitor.visit_fn(kind, item.span, item.id); } - ForeignItemKind::Static(ref typ, _, ref body) => { + ForeignItemKind::Const(ref typ, ref body) + | ForeignItemKind::Static(ref typ, _, ref body) => { visitor.visit_ty(typ); walk_list!(visitor, visit_expr, body); } |
