X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_resolve%2Flib.rs;h=ac09534f1e0e5eecff77883b9fd23f2a2f8b7a0d;hb=beeaea4a70766f7cc78abdc6b5991f124f349ca5;hp=4f6b3f9353afab9d4ecacfd66ccf253d6eebdc44;hpb=59eb44407652f5b66a66231f12f66f89c5df5c5f;p=rust.git diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 4f6b3f9353a..ac09534f1e0 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -65,7 +65,7 @@ use rustc::util::lev_distance::lev_distance; use syntax::ast; -use syntax::ast::{Ident, Name, NodeId, CrateNum, TyIs, TyI8, TyI16, TyI32, TyI64}; +use syntax::ast::{CRATE_NODE_ID, Ident, Name, NodeId, CrateNum, TyIs, TyI8, TyI16, TyI32, TyI64}; use syntax::ast::{TyUs, TyU8, TyU16, TyU32, TyU64, TyF64, TyF32}; use syntax::attr::AttrMetaMethods; use syntax::ext::mtwt; @@ -491,7 +491,7 @@ fn visit_poly_trait_ref(&mut self, } visit::walk_poly_trait_ref(self, tref, m); } - fn visit_variant(&mut self, variant: &hir::Variant, generics: &Generics) { + fn visit_variant(&mut self, variant: &hir::Variant, generics: &Generics, item_id: ast::NodeId) { execute_callback!(hir_map::Node::NodeVariant(variant), self); if let Some(ref dis_expr) = variant.node.disr_expr { // resolve the discriminator expr as a constant @@ -501,19 +501,8 @@ fn visit_variant(&mut self, variant: &hir::Variant, generics: &Generics) { } // `visit::walk_variant` without the discriminant expression. - match variant.node.kind { - hir::TupleVariantKind(ref variant_arguments) => { - for variant_argument in variant_arguments { - self.visit_ty(&*variant_argument.ty); - } - } - hir::StructVariantKind(ref struct_definition) => { - self.visit_struct_def(&**struct_definition, - variant.node.name, - generics, - variant.node.id); - } - } + self.visit_variant_data(&variant.node.data, variant.node.name, + generics, item_id, variant.span); } fn visit_foreign_item(&mut self, foreign_item: &hir::ForeignItem) { execute_callback!(hir_map::Node::NodeForeignItem(foreign_item), self); @@ -1188,8 +1177,9 @@ fn new(session: &'a Session, make_glob_map: MakeGlobMap) -> Resolver<'a, 'tcx> { let graph_root = NameBindings::new(); + let root_def_id = ast_map.local_def_id(CRATE_NODE_ID); graph_root.define_module(NoParentLink, - Some(DefId { krate: 0, node: 0 }), + Some(root_def_id), NormalModuleKind, false, true, @@ -1257,8 +1247,8 @@ fn record_import_use(&mut self, import_id: NodeId, name: Name) { } fn get_trait_name(&self, did: DefId) -> Name { - if did.is_local() { - self.ast_map.expect_item(did.node).name + if let Some(node_id) = self.ast_map.as_local_node_id(did) { + self.ast_map.expect_item(node_id).name } else { csearch::get_trait_name(&self.session.cstore, did) } @@ -1981,7 +1971,7 @@ fn upvarify(&self, self.session.span_bug(span, &format!("unexpected {:?} in bindings", def)) } - DefLocal(node_id) => { + DefLocal(_, node_id) => { for rib in ribs { match rib.kind { NormalRibKind => { @@ -1989,11 +1979,12 @@ fn upvarify(&self, } ClosureRibKind(function_id) => { let prev_def = def; + let node_def_id = self.ast_map.local_def_id(node_id); let mut seen = self.freevars_seen.borrow_mut(); let seen = seen.entry(function_id).or_insert_with(|| NodeMap()); if let Some(&index) = seen.get(&node_id) { - def = DefUpvar(node_id, index, function_id); + def = DefUpvar(node_def_id, node_id, index, function_id); continue; } let mut freevars = self.freevars.borrow_mut(); @@ -2002,7 +1993,7 @@ fn upvarify(&self, let depth = vec.len(); vec.push(Freevar { def: prev_def, span: span }); - def = DefUpvar(node_id, depth, function_id); + def = DefUpvar(node_def_id, node_id, depth, function_id); seen.insert(node_id, depth); } ItemRibKind | MethodRibKind => { @@ -2156,7 +2147,8 @@ fn resolve_item(&mut self, item: &Item) { TypeSpace, ItemRibKind), |this| { - this.with_self_rib(DefSelfTy(Some(DefId::local(item.id)), None), |this| { + let local_def_id = this.ast_map.local_def_id(item.id); + this.with_self_rib(DefSelfTy(Some(local_def_id), None), |this| { this.visit_generics(generics); walk_list!(this, visit_ty_param_bound, bounds); @@ -2280,7 +2272,7 @@ fn with_type_parameter_rib(&mut self, type_parameters: TypeParameters, f: F) function_type_rib.bindings.insert(name, DlDef(DefTyParam(space, index as u32, - DefId::local(type_parameter.id), + self.ast_map.local_def_id(type_parameter.id), name))); } self.type_ribs.push(function_type_rib); @@ -2815,7 +2807,8 @@ struct or enum variant", debug!("(resolving pattern) binding `{}`", renamed); - let def = DefLocal(pattern.id); + let def_id = self.ast_map.local_def_id(pattern.id); + let def = DefLocal(def_id, pattern.id); // Record the definition so that later passes // will be able to distinguish variants from @@ -3497,8 +3490,8 @@ fn get_module(this: &mut Resolver, span: Span, name_path: &[ast::Name]) } fn is_static_method(this: &Resolver, did: DefId) -> bool { - if did.is_local() { - let sig = match this.ast_map.get(did.node) { + if let Some(node_id) = this.ast_map.as_local_node_id(did) { + let sig = match this.ast_map.get(node_id) { hir_map::NodeTraitItem(trait_item) => match trait_item.node { hir::MethodTraitItem(ref sig, _) => sig, _ => return false @@ -3845,9 +3838,8 @@ fn get_traits_containing_item(&mut self, name: Name) -> Vec { fn add_trait_info(found_traits: &mut Vec, trait_def_id: DefId, name: Name) { - debug!("(adding trait info) found trait {}:{} for method '{}'", - trait_def_id.krate, - trait_def_id.node, + debug!("(adding trait info) found trait {:?} for method '{}'", + trait_def_id, name); found_traits.push(trait_def_id); }