diff options
| author | Andrew Cann <shum@canndrew.org> | 2016-05-10 00:03:59 +0800 |
|---|---|---|
| committer | Andrew Cann <shum@canndrew.org> | 2016-08-13 21:37:09 +0800 |
| commit | ba7330c1cc50e210f8e48c8c8a38c794caa087e0 (patch) | |
| tree | 966fbb3667ecc111db22e17c1b203dcf67fd1de9 /src/libsyntax | |
| parent | e64f68817d850ccbe642d7f067083bc655115d84 (diff) | |
| download | rust-ba7330c1cc50e210f8e48c8c8a38c794caa087e0.tar.gz rust-ba7330c1cc50e210f8e48c8c8a38c794caa087e0.zip | |
Start implementation of RFC 1216 (make ! a type)
Add `TyKind::Empty` and fix resulting build errors.
Diffstat (limited to 'src/libsyntax')
| -rw-r--r-- | src/libsyntax/ast.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/fold.rs | 1 | ||||
| -rw-r--r-- | src/libsyntax/print/pprust.rs | 3 | ||||
| -rw-r--r-- | src/libsyntax/visit.rs | 1 |
4 files changed, 8 insertions, 0 deletions
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<Ty>), /// A fixed length array (`[T; n]`) FixedLengthVec(P<Ty>, P<Expr>), @@ -1357,6 +1358,8 @@ pub enum TyKind { Rptr(Option<Lifetime>, MutTy), /// A bare function (e.g. `fn(usize) -> bool`) BareFn(P<BareFnTy>), + /// The empty type (`!`) + Empty, /// A tuple (`(A, B, C, D,...)`) Tup(Vec<P<Ty>> ), /// 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: Folder>(t: P<Ty>, fld: &mut T) -> P<Ty> { 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<V: Visitor>(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); } |
