diff options
| author | bors <bors@rust-lang.org> | 2015-01-01 06:36:24 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-01-01 06:36:24 +0000 |
| commit | c594959cdff07b5545747809bb045bfa2868ebcc (patch) | |
| tree | 513aa126d93284020db5f97fd32ed45b0e0f26af /src/librustc_resolve | |
| parent | 47b8479e73e40395f1b1b2d0c6281f28f80301e4 (diff) | |
| parent | f0976e2cf3f6b0027f118b791e0888b29fbb41a7 (diff) | |
auto merge of #19388 : nick29581/rust/rc-show, r=alexcrichto
r? @huonw or @alexcrichton
Apparently, we have previously rejected an RFC like this. However, since then we removed `{:?}` and so without this debugging gets really difficult as soon as there is a RefCell anywhere, so I believe there is more benefit to adding these impls than there was before. By using "try_borrow" we can avoid panicing in `Show` (I think).
@ huon in response to a comment in #19254: I noticed that `drop()` checks for the ptr being null, so I checked here too. Now I am checking for both, if you're confident I can change to only checking `strong()`.
Diffstat (limited to 'src/librustc_resolve')
| -rw-r--r-- | src/librustc_resolve/lib.rs | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/librustc_resolve/lib.rs b/src/librustc_resolve/lib.rs index 7efa9ad737f..10756f21551 100644 --- a/src/librustc_resolve/lib.rs +++ b/src/librustc_resolve/lib.rs @@ -88,6 +88,7 @@ use syntax::visit::{mod, Visitor}; use std::collections::{HashMap, HashSet}; use std::collections::hash_map::Entry::{Occupied, Vacant}; use std::cell::{Cell, RefCell}; +use std::fmt; use std::mem::replace; use std::rc::{Rc, Weak}; use std::uint; @@ -178,7 +179,7 @@ impl<'a, 'v, 'tcx> Visitor<'v> for Resolver<'a, 'tcx> { } /// Contains data for specific types of import directives. -#[deriving(Copy)] +#[deriving(Copy,Show)] enum ImportDirectiveSubclass { SingleImport(Name /* target */, Name /* source */), GlobImport @@ -309,6 +310,7 @@ enum Shadowable { } /// One import directive. +#[deriving(Show)] struct ImportDirective { module_path: Vec<Name>, subclass: ImportDirectiveSubclass, @@ -338,7 +340,7 @@ impl ImportDirective { } /// The item that an import resolves to. -#[deriving(Clone)] +#[deriving(Clone,Show)] struct Target { target_module: Rc<Module>, bindings: Rc<NameBindings>, @@ -359,6 +361,7 @@ impl Target { } /// An ImportResolution represents a particular `use` directive. +#[deriving(Show)] struct ImportResolution { /// Whether this resolution came from a `use` or a `pub use`. Note that this /// should *not* be used whenever resolution is being performed, this is @@ -438,7 +441,7 @@ impl ImportResolution { } /// The link from a module up to its nearest parent node. -#[deriving(Clone)] +#[deriving(Clone,Show)] enum ParentLink { NoParentLink, ModuleParentLink(Weak<Module>, Name), @@ -446,7 +449,7 @@ enum ParentLink { } /// The type of module this is. -#[deriving(Copy, PartialEq)] +#[deriving(Copy, PartialEq, Show)] enum ModuleKind { NormalModuleKind, TraitModuleKind, @@ -528,6 +531,15 @@ impl Module { } } +impl fmt::Show for Module { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + write!(f, "{}, kind: {}, {}", + self.def_id, + self.kind, + if self.is_public { "public" } else { "private" } ) + } +} + bitflags! { #[deriving(Show)] flags DefModifiers: u8 { @@ -537,7 +549,7 @@ bitflags! { } // Records a possibly-private type definition. -#[deriving(Clone)] +#[deriving(Clone,Show)] struct TypeNsDef { modifiers: DefModifiers, // see note in ImportResolution about how to use this module_def: Option<Rc<Module>>, @@ -555,6 +567,7 @@ struct ValueNsDef { // Records the definitions (at most one for each namespace) that a name is // bound to. +#[deriving(Show)] struct NameBindings { type_def: RefCell<Option<TypeNsDef>>, //< Meaning in type namespace. value_def: RefCell<Option<ValueNsDef>>, //< Meaning in value namespace. |
