#[deriving(Clone, Encodable, Decodable, PartialEq)]
pub enum TyParamBound {
- RegionBound, // FIXME(#16518) -- need to include name of actual region
+ RegionBound(Lifetime),
+ UnboxedFnBound, // FIXME
+ UnknownBound,
TraitBound(Type)
}
impl Clean<TyParamBound> for ast::TyParamBound {
fn clean(&self, cx: &DocContext) -> TyParamBound {
match *self {
- ast::RegionTyParamBound(_) => RegionBound,
+ ast::RegionTyParamBound(lt) => RegionBound(lt.clean(cx)),
ast::UnboxedFnTyParamBound(_) => {
// FIXME(pcwalton): Wrong.
- RegionBound
- }
+ UnboxedFnBound
+ },
ast::TraitTyParamBound(ref t) => TraitBound(t.clean(cx)),
}
}
impl Clean<Vec<TyParamBound>> for ty::ExistentialBounds {
fn clean(&self, cx: &DocContext) -> Vec<TyParamBound> {
- let mut vec = vec!(RegionBound);
+ let mut vec = vec![];
+ self.region_bound.clean(cx).map(|b| vec.push(RegionBound(b)));
for bb in self.builtin_bounds.iter() {
vec.push(bb.clean(cx));
}
fn clean(&self, cx: &DocContext) -> TyParamBound {
let tcx = match cx.tcx_opt() {
Some(tcx) => tcx,
- None => return RegionBound,
+ None => return UnknownBound
};
let empty = subst::Substs::empty();
let (did, path) = match *self {
fn clean(&self, cx: &DocContext) -> TyParamBound {
let tcx = match cx.tcx_opt() {
Some(tcx) => tcx,
- None => return RegionBound,
+ None => return UnknownBound
};
let fqn = csearch::get_item_path(tcx, self.def_id);
let fqn = fqn.into_iter().map(|i| i.to_string())
impl Clean<Option<Vec<TyParamBound>>> for subst::Substs {
fn clean(&self, cx: &DocContext) -> Option<Vec<TyParamBound>> {
let mut v = Vec::new();
- v.extend(self.regions().iter().map(|_| RegionBound));
+ v.extend(self.regions().iter().filter_map(|r| r.clean(cx)).map(RegionBound));
v.extend(self.types.iter().map(|t| TraitBound(t.clean(cx))));
if v.len() > 0 {Some(v)} else {None}
}
let s: &'a str = s.as_slice();
return s;
}
+
+ pub fn statik() -> Lifetime {
+ Lifetime("'static".to_string())
+ }
}
impl Clean<Lifetime> for ast::Lifetime {
impl Clean<Option<Lifetime>> for ty::Region {
fn clean(&self, cx: &DocContext) -> Option<Lifetime> {
match *self {
- ty::ReStatic => Some(Lifetime("'static".to_string())),
+ ty::ReStatic => Some(Lifetime::statik()),
ty::ReLateBound(_, ty::BrNamed(_, name)) =>
Some(Lifetime(token::get_name(name).get().to_string())),
ty::ReEarlyBound(_, _, _, name) => Some(Lifetime(name.clean(cx))),
impl fmt::Show for clean::TyParamBound {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match *self {
- clean::RegionBound => {
- f.write("'static".as_bytes())
+ clean::RegionBound(ref lt) => {
+ write!(f, "{}", *lt)
+ }
+ clean::UnboxedFnBound(..) => {
+ write!(f, "Fn(???)") // FIXME
+ }
+ clean::UnknownBound => {
+ write!(f, "'static")
}
clean::TraitBound(ref ty) => {
write!(f, "{}", *ty)
let mut ret = String::new();
for bound in decl.bounds.iter() {
match *bound {
- clean::RegionBound => {}
+ clean::RegionBound(..) |
+ clean::UnboxedFnBound |
+ clean::UnknownBound => {}
clean::TraitBound(ref t) => {
if ret.len() == 0 {
ret.push_str(": ");