diff options
| author | Alex Crichton <alex@alexcrichton.com> | 2015-04-07 14:22:55 -0700 |
|---|---|---|
| committer | Alex Crichton <alex@alexcrichton.com> | 2015-04-07 17:54:34 -0700 |
| commit | 2b9076ee19da12e3a70bdb2c630e55f8395173d2 (patch) | |
| tree | e490d0b590bb66460f9d5f23271c832683d92a2c /src/librustdoc | |
| parent | 6950f68870e73251c86f559dbf050ce197a24695 (diff) | |
| download | rust-2b9076ee19da12e3a70bdb2c630e55f8395173d2.tar.gz rust-2b9076ee19da12e3a70bdb2c630e55f8395173d2.zip | |
rustdoc: Encode ABI in all methods
This commit ensures that the ABI of functions is propagated all the way through to the documentation. Closes #22038
Diffstat (limited to 'src/librustdoc')
| -rw-r--r-- | src/librustdoc/clean/inline.rs | 5 | ||||
| -rw-r--r-- | src/librustdoc/clean/mod.rs | 12 | ||||
| -rw-r--r-- | src/librustdoc/doctree.rs | 2 | ||||
| -rw-r--r-- | src/librustdoc/html/format.rs | 12 | ||||
| -rw-r--r-- | src/librustdoc/html/render.rs | 5 | ||||
| -rw-r--r-- | src/librustdoc/visit_ast.rs | 3 |
6 files changed, 33 insertions, 6 deletions
diff --git a/src/librustdoc/clean/inline.rs b/src/librustdoc/clean/inline.rs index 24184bae95b..4237eb68d28 100644 --- a/src/librustdoc/clean/inline.rs +++ b/src/librustdoc/clean/inline.rs @@ -163,8 +163,8 @@ pub fn build_external_trait(cx: &DocContext, tcx: &ty::ctxt, fn build_external_function(cx: &DocContext, tcx: &ty::ctxt, did: ast::DefId) -> clean::Function { let t = ty::lookup_item_type(tcx, did); - let (decl, style) = match t.ty.sty { - ty::ty_bare_fn(_, ref f) => ((did, &f.sig).clean(cx), f.unsafety), + let (decl, style, abi) = match t.ty.sty { + ty::ty_bare_fn(_, ref f) => ((did, &f.sig).clean(cx), f.unsafety, f.abi), _ => panic!("bad function"), }; let predicates = ty::lookup_predicates(tcx, did); @@ -172,6 +172,7 @@ fn build_external_function(cx: &DocContext, tcx: &ty::ctxt, did: ast::DefId) -> decl: decl, generics: (&t.generics, &predicates, subst::FnSpace).clean(cx), unsafety: style, + abi: abi, } } diff --git a/src/librustdoc/clean/mod.rs b/src/librustdoc/clean/mod.rs index 6c243a5d795..6c59205cd3e 100644 --- a/src/librustdoc/clean/mod.rs +++ b/src/librustdoc/clean/mod.rs @@ -1054,6 +1054,7 @@ pub struct Function { pub decl: FnDecl, pub generics: Generics, pub unsafety: ast::Unsafety, + pub abi: abi::Abi } impl Clean<Item> for doctree::Function { @@ -1069,6 +1070,7 @@ impl Clean<Item> for doctree::Function { decl: self.decl.clean(cx), generics: self.generics.clean(cx), unsafety: self.unsafety, + abi: self.abi, }), } } @@ -2316,7 +2318,14 @@ impl Clean<ViewListIdent> for ast::PathListItem { impl Clean<Vec<Item>> for ast::ForeignMod { fn clean(&self, cx: &DocContext) -> Vec<Item> { - self.items.clean(cx) + let mut items = self.items.clean(cx); + for item in &mut items { + match item.inner { + ForeignFunctionItem(ref mut f) => f.abi = self.abi, + _ => {} + } + } + items } } @@ -2328,6 +2337,7 @@ impl Clean<Item> for ast::ForeignItem { decl: decl.clean(cx), generics: generics.clean(cx), unsafety: ast::Unsafety::Unsafe, + abi: abi::Rust, }) } ast::ForeignItemStatic(ref ty, mutbl) => { diff --git a/src/librustdoc/doctree.rs b/src/librustdoc/doctree.rs index c6d8b9428c5..862bca1b813 100644 --- a/src/librustdoc/doctree.rs +++ b/src/librustdoc/doctree.rs @@ -15,6 +15,7 @@ pub use self::TypeBound::*; use syntax; use syntax::codemap::Span; +use syntax::abi; use syntax::ast; use syntax::attr; use syntax::ast::{Ident, NodeId}; @@ -134,6 +135,7 @@ pub struct Function { pub unsafety: ast::Unsafety, pub whence: Span, pub generics: ast::Generics, + pub abi: abi::Abi, } pub struct Typedef { diff --git a/src/librustdoc/html/format.rs b/src/librustdoc/html/format.rs index ae9d9761001..f6215dcb00c 100644 --- a/src/librustdoc/html/format.rs +++ b/src/librustdoc/html/format.rs @@ -18,6 +18,7 @@ use std::fmt; use std::iter::repeat; +use syntax::abi::Abi; use syntax::ast; use syntax::ast_util; @@ -54,6 +55,7 @@ pub struct WhereClause<'a>(pub &'a clean::Generics); pub struct TyParamBounds<'a>(pub &'a [clean::TyParamBound]); /// Wrapper struct for emitting a comma-separated list of items pub struct CommaSep<'a, T: 'a>(pub &'a [T]); +pub struct AbiSpace(pub Abi); impl VisSpace { pub fn get(&self) -> Option<ast::Visibility> { @@ -691,6 +693,16 @@ impl fmt::Display for RawMutableSpace { } } +impl fmt::Display for AbiSpace { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + match self.0 { + Abi::Rust => Ok(()), + Abi::C => write!(f, "extern "), + abi => write!(f, "extern {} ", abi), + } + } +} + impl<'a> fmt::Display for Stability<'a> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { let Stability(stab) = *self; diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index 92fe5b019db..a1ec58cd3dd 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -62,7 +62,7 @@ use clean; use doctree; use fold::DocFolder; use html::format::{VisSpace, Method, UnsafetySpace, MutableSpace, Stability}; -use html::format::{ConciseStability, TyParamBounds, WhereClause, href}; +use html::format::{ConciseStability, TyParamBounds, WhereClause, href, AbiSpace}; use html::highlight; use html::item_type::ItemType; use html::layout; @@ -1746,10 +1746,11 @@ fn item_static(w: &mut fmt::Formatter, it: &clean::Item, fn item_function(w: &mut fmt::Formatter, it: &clean::Item, f: &clean::Function) -> fmt::Result { - try!(write!(w, "<pre class='rust fn'>{vis}{unsafety}fn \ + try!(write!(w, "<pre class='rust fn'>{vis}{unsafety}{abi}fn \ {name}{generics}{decl}{where_clause}</pre>", vis = VisSpace(it.visibility), unsafety = UnsafetySpace(f.unsafety), + abi = AbiSpace(f.abi), name = it.name.as_ref().unwrap(), generics = f.generics, where_clause = WhereClause(&f.generics), diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index 6ed6626d64c..a1fa96322a4 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -123,7 +123,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { pub fn visit_fn(&mut self, item: &ast::Item, name: ast::Ident, fd: &ast::FnDecl, - unsafety: &ast::Unsafety, _abi: &abi::Abi, + unsafety: &ast::Unsafety, abi: &abi::Abi, gen: &ast::Generics) -> Function { debug!("Visiting fn"); Function { @@ -136,6 +136,7 @@ impl<'a, 'tcx> RustdocVisitor<'a, 'tcx> { whence: item.span, generics: gen.clone(), unsafety: *unsafety, + abi: *abi, } } |
