Skip to content

Commit

Permalink
Allow *-pointers in PtrTy (fixes rust-lang#16781)
Browse files Browse the repository at this point in the history
  • Loading branch information
Manishearth committed Aug 27, 2014
1 parent 80b45dd commit 2b312ec
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 1 deletion.
11 changes: 11 additions & 0 deletions src/libsyntax/ext/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,9 @@ pub trait AstBuilder {
ty: P<ast::Ty>,
lifetime: Option<ast::Lifetime>,
mutbl: ast::Mutability) -> P<ast::Ty>;
fn ty_ptr(&self, span: Span,
ty: P<ast::Ty>,
mutbl: ast::Mutability) -> P<ast::Ty>;
fn ty_uniq(&self, span: Span, ty: P<ast::Ty>) -> P<ast::Ty>;

fn ty_option(&self, ty: P<ast::Ty>) -> P<ast::Ty>;
Expand Down Expand Up @@ -369,6 +372,14 @@ impl<'a> AstBuilder for ExtCtxt<'a> {
ast::TyRptr(lifetime, self.ty_mt(ty, mutbl)))
}

fn ty_ptr(&self,
span: Span,
ty: P<ast::Ty>,
mutbl: ast::Mutability)
-> P<ast::Ty> {
self.ty(span,
ast::TyPtr(self.ty_mt(ty, mutbl)))
}
fn ty_uniq(&self, span: Span, ty: P<ast::Ty>) -> P<ast::Ty> {
self.ty(span, ast::TyUniq(ty))
}
Expand Down
6 changes: 5 additions & 1 deletion src/libsyntax/ext/deriving/generic/ty.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ use std::gc::Gc;
pub enum PtrTy<'a> {
/// &'lifetime mut
Borrowed(Option<&'a str>, ast::Mutability),
/// *mut
Raw(ast::Mutability),
}

/// A path, e.g. `::std::option::Option::<int>` (global). Has support
Expand Down Expand Up @@ -82,7 +84,7 @@ impl<'a> Path<'a> {
}
}

/// A type. Supports pointers (except for *), Self, and literals
/// A type. Supports pointers, Self, and literals
#[deriving(Clone)]
pub enum Ty<'a> {
Self,
Expand Down Expand Up @@ -143,6 +145,7 @@ impl<'a> Ty<'a> {
let lt = mk_lifetime(cx, span, lt);
cx.ty_rptr(span, raw_ty, lt, mutbl)
}
Raw(mutbl) => cx.ty_ptr(span, raw_ty, mutbl)
}
}
Literal(ref p) => { p.to_ty(cx, span, self_ty, self_generics) }
Expand Down Expand Up @@ -273,6 +276,7 @@ pub fn get_explicit_self(cx: &ExtCtxt, span: Span, self_ptr: &Option<PtrTy>)
let lt = lt.map(|s| cx.lifetime(span, cx.ident_of(s).name));
ast::SelfRegion(lt, mutbl, special_idents::self_)
}
Raw(_) => cx.span_bug(span, "attempted to use *self in deriving definition")
});
let self_expr = cx.expr_deref(span, self_path);
(self_expr, self_ty)
Expand Down

0 comments on commit 2b312ec

Please sign in to comment.