about summary refs log tree commit diff
path: root/src/libsyntax
diff options
context:
space:
mode:
authorMazdak Farrokhzad <twingoow@gmail.com>2020-02-15 02:23:10 +0100
committerMazdak Farrokhzad <twingoow@gmail.com>2020-02-15 20:57:12 +0100
commit35884fe16889b39d4be43cf8effc3bdf843c6f12 (patch)
treec9d96a9b030337918d88626ee48bb3c7bebb3060 /src/libsyntax
parentf8d2264463162291f5cb3391c98d7bc95ec17d87 (diff)
parse extern consts
Diffstat (limited to 'src/libsyntax')
-rw-r--r--src/libsyntax/ast.rs4
-rw-r--r--src/libsyntax/mut_visit.rs2
-rw-r--r--src/libsyntax/visit.rs3
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);
         }