From ba7330c1cc50e210f8e48c8c8a38c794caa087e0 Mon Sep 17 00:00:00 2001 From: Andrew Cann Date: Tue, 10 May 2016 00:03:59 +0800 Subject: Start implementation of RFC 1216 (make ! a type) Add `TyKind::Empty` and fix resulting build errors. --- src/libsyntax/ast.rs | 3 +++ src/libsyntax/fold.rs | 1 + src/libsyntax/print/pprust.rs | 3 +++ src/libsyntax/visit.rs | 1 + 4 files changed, 8 insertions(+) (limited to 'src/libsyntax') diff --git a/src/libsyntax/ast.rs b/src/libsyntax/ast.rs index 3f929e6d23a..6ba5eccc5cf 100644 --- a/src/libsyntax/ast.rs +++ b/src/libsyntax/ast.rs @@ -1348,6 +1348,7 @@ pub struct BareFnTy { /// The different kinds of types recognized by the compiler #[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)] pub enum TyKind { + /// A variable-length array (`[T]`) Vec(P), /// A fixed length array (`[T; n]`) FixedLengthVec(P, P), @@ -1357,6 +1358,8 @@ pub enum TyKind { Rptr(Option, MutTy), /// A bare function (e.g. `fn(usize) -> bool`) BareFn(P), + /// The empty type (`!`) + Empty, /// A tuple (`(A, B, C, D,...)`) Tup(Vec> ), /// A path (`module::module::...::Type`), optionally diff --git a/src/libsyntax/fold.rs b/src/libsyntax/fold.rs index afc990f498e..47addd8aba5 100644 --- a/src/libsyntax/fold.rs +++ b/src/libsyntax/fold.rs @@ -373,6 +373,7 @@ pub fn noop_fold_ty(t: P, fld: &mut T) -> P { decl: fld.fold_fn_decl(decl) })) } + TyKind::Empty => node, TyKind::Tup(tys) => TyKind::Tup(tys.move_map(|ty| fld.fold_ty(ty))), TyKind::Paren(ty) => TyKind::Paren(fld.fold_ty(ty)), TyKind::Path(qself, path) => { diff --git a/src/libsyntax/print/pprust.rs b/src/libsyntax/print/pprust.rs index 62e55eb78b7..6214dc5301b 100644 --- a/src/libsyntax/print/pprust.rs +++ b/src/libsyntax/print/pprust.rs @@ -976,6 +976,9 @@ impl<'a> State<'a> { try!(self.print_opt_lifetime(lifetime)); try!(self.print_mt(mt)); } + ast::TyKind::Empty => { + word(&mut self.s, "!")?; + }, ast::TyKind::Tup(ref elts) => { try!(self.popen()); try!(self.commasep(Inconsistent, &elts[..], diff --git a/src/libsyntax/visit.rs b/src/libsyntax/visit.rs index 6d3cdbdc6da..1d40e3e395e 100644 --- a/src/libsyntax/visit.rs +++ b/src/libsyntax/visit.rs @@ -319,6 +319,7 @@ pub fn walk_ty(visitor: &mut V, typ: &Ty) { walk_list!(visitor, visit_lifetime, opt_lifetime); visitor.visit_ty(&mutable_type.ty) } + TyKind::Empty => {}, TyKind::Tup(ref tuple_element_types) => { walk_list!(visitor, visit_ty, tuple_element_types); } -- cgit 1.4.1-3-g733a5