X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_resolve%2Flib.rs;h=ac09534f1e0e5eecff77883b9fd23f2a2f8b7a0d;hb=beeaea4a70766f7cc78abdc6b5991f124f349ca5;hp=f3789c773fb2d01153b9489d701c6f70e8df8405;hpb=aed73e0122e538375e6ef827e90c6d1a191c5fff;p=rust.git diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index f3789c773fb..ac09534f1e0 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -57,7 +57,7 @@ use rustc::metadata::decoder::{DefLike, DlDef, DlField, DlImpl}; use rustc::middle::def::*; use rustc::middle::def_id::DefId; -use rustc::middle::pat_util::pat_bindings; +use rustc::middle::pat_util::pat_bindings_hygienic; use rustc::middle::privacy::*; use rustc::middle::subst::{ParamSpace, FnSpace, TypeSpace}; use rustc::middle::ty::{Freevar, FreevarMap, TraitMap, GlobMap}; @@ -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,9 +2147,10 @@ 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); - visit::walk_ty_param_bounds_helper(this, bounds); + walk_list!(this, visit_ty_param_bound, bounds); for trait_item in trait_items { match trait_item.node { @@ -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); @@ -2542,10 +2534,10 @@ fn check_trait_item(&self, name: Name, span: Span, err: F) fn resolve_local(&mut self, local: &Local) { // Resolve the type. - visit::walk_ty_opt(self, &local.ty); + walk_list!(self, visit_ty, &local.ty); // Resolve the initializer. - visit::walk_expr_opt(self, &local.init); + walk_list!(self, visit_expr, &local.init); // Resolve the pattern. self.resolve_pattern(&*local.pat, @@ -2559,7 +2551,7 @@ fn resolve_local(&mut self, local: &Local) { // user and one 'x' came from the macro. fn binding_mode_map(&mut self, pat: &Pat) -> BindingMap { let mut result = HashMap::new(); - pat_bindings(&self.def_map, pat, |binding_mode, _id, sp, path1| { + pat_bindings_hygienic(&self.def_map, pat, |binding_mode, _id, sp, path1| { let name = mtwt::resolve(path1.node); result.insert(name, BindingInfo { span: sp, @@ -2622,7 +2614,7 @@ fn resolve_arm(&mut self, arm: &Arm) { // pat_idents are variants self.check_consistent_bindings(arm); - visit::walk_expr_opt(self, &arm.guard); + walk_list!(self, visit_expr, &arm.guard); self.visit_expr(&*arm.body); if !self.resolved { @@ -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 @@ -3710,7 +3703,7 @@ fn resolve_expr(&mut self, expr: &Expr) { false // Stop advancing }); - if method_scope && special_names::self_ == path_name { + if method_scope && special_names::self_.as_str() == &path_name[..] { resolve_error( self, expr.span, @@ -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); }