提交 a636a83c 编写于 作者: V Vadim Petrochenkov

Use Names in path fragments and MacroDef

上级 64fb709f
......@@ -1787,7 +1787,7 @@ fn encode_macro_defs(rbml_w: &mut Encoder,
for def in &krate.exported_macros {
rbml_w.start_tag(tag_macro_def);
encode_name(rbml_w, def.ident.name);
encode_name(rbml_w, def.name);
encode_attributes(rbml_w, &def.attrs);
rbml_w.wr_tagged_str(tag_macro_def_body,
......
......@@ -333,11 +333,11 @@ pub struct Crate {
/// Not parsed directly, but created on macro import or `macro_rules!` expansion.
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug)]
pub struct MacroDef {
pub ident: Ident,
pub name: Name,
pub attrs: Vec<Attribute>,
pub id: NodeId,
pub span: Span,
pub imported_from: Option<Ident>,
pub imported_from: Option<Name>,
pub export: bool,
pub use_locally: bool,
pub allow_internal_unstable: bool,
......@@ -1039,14 +1039,14 @@ pub struct Variant_ {
#[derive(Clone, PartialEq, Eq, RustcEncodable, RustcDecodable, Hash, Debug, Copy)]
pub enum PathListItem_ {
PathListIdent {
name: Ident,
name: Name,
/// renamed in list, eg `use foo::{bar as baz};`
rename: Option<Ident>,
rename: Option<Name>,
id: NodeId
},
PathListMod {
/// renamed in list, eg `use foo::{self as baz};`
rename: Option<Ident>,
rename: Option<Name>,
id: NodeId
}
}
......@@ -1058,7 +1058,7 @@ pub fn id(&self) -> NodeId {
}
}
pub fn rename(&self) -> Option<Ident> {
pub fn rename(&self) -> Option<Name> {
match *self {
PathListIdent { rename, .. } | PathListMod { rename, .. } => rename
}
......@@ -1077,7 +1077,7 @@ pub enum ViewPath_ {
/// or just
///
/// `foo::bar::baz` (with `as baz` implicitly on the right)
ViewPathSimple(Ident, Path),
ViewPathSimple(Name, Path),
/// `foo::bar::*`
ViewPathGlob(Path),
......
......@@ -22,7 +22,7 @@ pub fn lower_view_path(view_path: &ViewPath) -> P<hir::ViewPath> {
P(Spanned {
node: match view_path.node {
ViewPathSimple(ident, ref path) => {
hir::ViewPathSimple(ident, lower_path(path))
hir::ViewPathSimple(ident.name, lower_path(path))
}
ViewPathGlob(ref path) => {
hir::ViewPathGlob(lower_path(path))
......@@ -35,11 +35,14 @@ pub fn lower_view_path(view_path: &ViewPath) -> P<hir::ViewPath> {
PathListIdent { id, name, rename } =>
hir::PathListIdent {
id: id,
name: name,
rename: rename.clone(),
name: name.name,
rename: rename.map(|x| x.name),
},
PathListMod { id, rename } =>
hir::PathListMod { id: id, rename: rename.clone() }
hir::PathListMod {
id: id,
rename: rename.map(|x| x.name)
}
},
span: path_list_ident.span
}
......@@ -526,11 +529,11 @@ pub fn lower_crate(c: &Crate) -> hir::Crate {
pub fn lower_macro_def(m: &MacroDef) -> hir::MacroDef {
hir::MacroDef {
ident: m.ident,
name: m.ident.name,
attrs: m.attrs.clone(),
id: m.id,
span: m.span,
imported_from: m.imported_from,
imported_from: m.imported_from.map(|x| x.name),
export: m.export,
use_locally: m.use_locally,
allow_internal_unstable: m.allow_internal_unstable,
......
......@@ -2174,15 +2174,14 @@ pub fn print_where_clause(&mut self, where_clause: &hir::WhereClause)
pub fn print_view_path(&mut self, vp: &hir::ViewPath) -> io::Result<()> {
match vp.node {
hir::ViewPathSimple(ident, ref path) => {
hir::ViewPathSimple(name, ref path) => {
try!(self.print_path(path, false, 0));
// FIXME(#6993) can't compare identifiers directly here
if path.segments.last().unwrap().identifier.name !=
ident.name {
if path.segments.last().unwrap().identifier.name != name {
try!(space(&mut self.s));
try!(self.word_space("as"));
try!(self.print_ident(ident));
try!(self.print_name(name));
}
Ok(())
......@@ -2203,7 +2202,7 @@ pub fn print_view_path(&mut self, vp: &hir::ViewPath) -> io::Result<()> {
try!(self.commasep(Inconsistent, &idents[..], |s, w| {
match w.node {
hir::PathListIdent { name, .. } => {
s.print_ident(name)
s.print_name(name)
},
hir::PathListMod { .. } => {
word(&mut s.s, "self")
......
......@@ -312,8 +312,7 @@ fn build_reduced_graph_for_item(&mut self, item: &Item, parent: &Rc<Module>) ->
ResolutionError::SelfImportsOnlyAllowedWithin);
}
let subclass = SingleImport(binding.name,
source_name);
let subclass = SingleImport(binding, source_name);
self.build_import_directive(&**parent,
module_path,
subclass,
......@@ -343,7 +342,7 @@ fn build_reduced_graph_for_item(&mut self, item: &Item, parent: &Rc<Module>) ->
for source_item in source_items {
let (module_path, name, rename) = match source_item.node {
PathListIdent { name, rename, .. } =>
(module_path.clone(), name.name, rename.unwrap_or(name).name),
(module_path.clone(), name, rename.unwrap_or(name)),
PathListMod { rename, .. } => {
let name = match module_path.last() {
Some(name) => *name,
......@@ -358,7 +357,7 @@ fn build_reduced_graph_for_item(&mut self, item: &Item, parent: &Rc<Module>) ->
}
};
let module_path = module_path.split_last().unwrap().1;
let rename = rename.map(|n| n.name).unwrap_or(name);
let rename = rename.unwrap_or(name);
(module_path.to_vec(), name, rename)
}
};
......
......@@ -2210,23 +2210,23 @@ fn resolve_item(&mut self, item: &Item) {
ItemUse(ref view_path) => {
// check for imports shadowing primitive types
let check_rename = |this: &Self, id, ident: Ident| {
let check_rename = |this: &Self, id, name| {
match this.def_map.borrow().get(&id).map(|d| d.full_def()) {
Some(DefTy(..)) | Some(DefStruct(..)) | Some(DefTrait(..)) | None => {
this.check_if_primitive_type_name(ident.name, item.span);
this.check_if_primitive_type_name(name, item.span);
}
_ => {}
}
};
match view_path.node {
hir::ViewPathSimple(ident, _) => {
check_rename(self, item.id, ident);
hir::ViewPathSimple(name, _) => {
check_rename(self, item.id, name);
}
hir::ViewPathList(ref prefix, ref items) => {
for item in items {
if let Some(ident) = item.node.rename() {
check_rename(self, item.node.id(), ident);
if let Some(name) = item.node.rename() {
check_rename(self, item.node.id(), name);
}
}
......
......@@ -43,7 +43,7 @@
///
/// The returned value is `None` if the `id` could not be inlined, and `Some`
/// of a vector of items if it was successfully expanded.
pub fn try_inline(cx: &DocContext, id: ast::NodeId, into: Option<ast::Ident>)
pub fn try_inline(cx: &DocContext, id: ast::NodeId, into: Option<ast::Name>)
-> Option<Vec<clean::Item>> {
let tcx = match cx.tcx_opt() {
Some(tcx) => tcx,
......
......@@ -2386,14 +2386,14 @@ fn clean(&self, cx: &DocContext) -> Vec<Item> {
(ret, ImportList(resolve_use_source(cx, p.clean(cx), self.id),
remaining))
}
hir::ViewPathSimple(i, ref p) => {
hir::ViewPathSimple(name, ref p) => {
if !denied {
match inline::try_inline(cx, self.id, Some(i)) {
match inline::try_inline(cx, self.id, Some(name)) {
Some(items) => return items,
None => {}
}
}
(vec![], SimpleImport(i.clean(cx),
(vec![], SimpleImport(name.clean(cx),
resolve_use_source(cx, p.clean(cx), self.id)))
}
};
......
......@@ -210,12 +210,12 @@ pub struct DefaultImpl {
}
pub struct Macro {
pub name: Ident,
pub name: Name,
pub id: ast::NodeId,
pub attrs: Vec<ast::Attribute>,
pub whence: Span,
pub stab: Option<attr::Stability>,
pub imported_from: Option<Ident>,
pub imported_from: Option<Name>,
}
pub struct ExternCrate {
......
......@@ -199,7 +199,7 @@ fn visit_view_path(&mut self, path: hir::ViewPath_,
}
fn resolve_id(&mut self, id: ast::NodeId, renamed: Option<ast::Ident>,
fn resolve_id(&mut self, id: ast::NodeId, renamed: Option<ast::Name>,
glob: bool, om: &mut Module, please_inline: bool) -> bool {
let tcx = match self.cx.tcx_opt() {
Some(tcx) => tcx,
......@@ -241,9 +241,9 @@ fn resolve_id(&mut self, id: ast::NodeId, renamed: Option<ast::Ident>,
}
pub fn visit_item(&mut self, item: &hir::Item,
renamed: Option<ast::Ident>, om: &mut Module) {
renamed: Option<ast::Name>, om: &mut Module) {
debug!("Visiting item {:?}", item);
let name = renamed.map_or(item.name, |x| x.name);
let name = renamed.unwrap_or(item.name);
match item.node {
hir::ItemExternCrate(ref p) => {
let path = match *p {
......@@ -398,7 +398,7 @@ fn visit_macro(&self, def: &hir::MacroDef) -> Macro {
Macro {
id: def.id,
attrs: def.attrs.clone(),
name: def.ident,
name: def.name,
whence: def.span,
stab: self.stability(def.id),
imported_from: def.imported_from,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册