librustc: De-@str resolve

This commit is contained in:
Patrick Walton 2014-01-31 12:25:11 -08:00 committed by Huon Wilson
parent 9869374256
commit daf5e6f6f4
2 changed files with 47 additions and 33 deletions

View File

@ -490,7 +490,7 @@ fn encode_reexported_static_methods(ecx: &EncodeContext,
exp: &middle::resolve::Export2) {
match ecx.tcx.items.find(exp.def_id.node) {
Some(ast_map::NodeItem(item, path)) => {
let original_name = ecx.tcx.sess.str_of(item.ident);
let original_name = token::get_ident(item.ident.name);
//
// We don't need to reexport static methods on items
@ -502,7 +502,7 @@ fn encode_reexported_static_methods(ecx: &EncodeContext,
// encoded metadata for static methods relative to Bar,
// but not yet for Foo.
//
if mod_path != *path || exp.name != original_name {
if mod_path != *path || original_name.get() != exp.name {
if !encode_reexported_static_base_methods(ecx, ebml_w, exp) {
if encode_reexported_static_trait_methods(ecx, ebml_w, exp) {
debug!("(encode reexported static methods) {} \

View File

@ -20,9 +20,8 @@ use syntax::ast::*;
use syntax::ast;
use syntax::ast_util::{def_id_of_def, local_def, mtwt_resolve};
use syntax::ast_util::{path_to_ident, walk_pat, trait_method_to_ty_method};
use syntax::parse::token::{IdentInterner, special_idents};
use syntax::parse::token;
use syntax::parse::token::{IdentInterner, interner_get};
use syntax::parse::token::special_idents;
use syntax::print::pprust::path_to_str;
use syntax::codemap::{Span, DUMMY_SP, Pos};
use syntax::opt_vec::OptVec;
@ -53,7 +52,7 @@ pub type TraitMap = HashMap<NodeId,@RefCell<~[DefId]>>;
pub type ExportMap2 = @RefCell<HashMap<NodeId, ~[Export2]>>;
pub struct Export2 {
name: @str, // The name of the target.
name: ~str, // The name of the target.
def_id: DefId, // The definition of the target.
}
@ -2114,24 +2113,26 @@ impl Resolver {
}
fn import_directive_subclass_to_str(&mut self,
subclass: ImportDirectiveSubclass)
-> @str {
subclass: ImportDirectiveSubclass)
-> ~str {
match subclass {
SingleImport(_target, source) => self.session.str_of(source),
GlobImport => @"*"
SingleImport(_target, source) => {
self.session.str_of(source).to_str()
}
GlobImport => ~"*"
}
}
fn import_path_to_str(&mut self,
idents: &[Ident],
subclass: ImportDirectiveSubclass)
-> @str {
idents: &[Ident],
subclass: ImportDirectiveSubclass)
-> ~str {
if idents.is_empty() {
self.import_directive_subclass_to_str(subclass)
} else {
(format!("{}::{}",
self.idents_to_str(idents),
self.import_directive_subclass_to_str(subclass))).to_managed()
self.idents_to_str(idents),
self.import_directive_subclass_to_str(subclass)))
}
}
@ -2584,7 +2585,7 @@ impl Resolver {
debug!("(resolving glob import) writing resolution `{}` in `{}` \
to `{}`",
interner_get(name),
token::get_ident(name).get().to_str(),
self.module_to_str(containing_module),
self.module_to_str(module_));
@ -3354,10 +3355,10 @@ impl Resolver {
match namebindings.def_for_namespace(ns) {
Some(d) => {
debug!("(computing exports) YES: export '{}' => {:?}",
interner_get(name),
token::get_ident(name).get().to_str(),
def_id_of_def(d));
exports2.push(Export2 {
name: interner_get(name),
name: token::get_ident(name).get().to_str(),
def_id: def_id_of_def(d)
});
}
@ -3380,7 +3381,7 @@ impl Resolver {
match importresolution.target_for_namespace(ns) {
Some(target) => {
debug!("(computing exports) maybe export '{}'",
interner_get(*name));
token::get_ident(*name).get().to_str());
self.add_exports_of_namebindings(exports2,
*name,
target.bindings,
@ -4155,19 +4156,23 @@ impl Resolver {
for (&key, &binding_0) in map_0.iter() {
match map_i.find(&key) {
None => {
let string = token::get_ident(key);
self.resolve_error(
p.span,
format!("variable `{}` from pattern \\#1 is \
not bound in pattern \\#{}",
interner_get(key), i + 1));
string.get(),
i + 1));
}
Some(binding_i) => {
if binding_0.binding_mode != binding_i.binding_mode {
let string = token::get_ident(key);
self.resolve_error(
binding_i.span,
format!("variable `{}` is bound with different \
mode in pattern \\#{} than in pattern \\#1",
interner_get(key), i + 1));
string.get(),
i + 1));
}
}
}
@ -4175,11 +4180,13 @@ impl Resolver {
for (&key, &binding) in map_i.iter() {
if !map_0.contains_key(&key) {
let string = token::get_ident(key);
self.resolve_error(
binding.span,
format!("variable `{}` from pattern \\#{} is \
not bound in pattern \\#1",
interner_get(key), i + 1));
string.get(),
i + 1));
}
}
}
@ -4371,9 +4378,10 @@ impl Resolver {
match self.resolve_bare_identifier_pattern(ident) {
FoundStructOrEnumVariant(def, lp)
if mode == RefutableMode => {
let string = token::get_ident(renamed);
debug!("(resolving pattern) resolving `{}` to \
struct or enum variant",
interner_get(renamed));
string.get());
self.enforce_default_binding_mode(
pattern,
@ -4382,17 +4390,19 @@ impl Resolver {
self.record_def(pattern.id, (def, lp));
}
FoundStructOrEnumVariant(..) => {
let string = token::get_ident(renamed);
self.resolve_error(pattern.span,
format!("declaration of `{}` \
shadows an enum \
variant or unit-like \
struct in scope",
interner_get(renamed)));
string.get()));
}
FoundConst(def, lp) if mode == RefutableMode => {
let string = token::get_ident(renamed);
debug!("(resolving pattern) resolving `{}` to \
constant",
interner_get(renamed));
string.get());
self.enforce_default_binding_mode(
pattern,
@ -4406,8 +4416,9 @@ impl Resolver {
allowed here");
}
BareIdentifierPatternUnresolved => {
let string = token::get_ident(renamed);
debug!("(resolving pattern) binding `{}`",
interner_get(renamed));
string.get());
let def = match mode {
RefutableMode => {
@ -5009,10 +5020,10 @@ impl Resolver {
}
fn find_best_match_for_name(&mut self, name: &str, max_distance: uint)
-> Option<@str> {
-> Option<~str> {
let this = &mut *self;
let mut maybes: ~[@str] = ~[];
let mut maybes: ~[~str] = ~[];
let mut values: ~[uint] = ~[];
let mut j = {
@ -5024,14 +5035,15 @@ impl Resolver {
let value_ribs = this.value_ribs.borrow();
let bindings = value_ribs.get()[j].bindings.borrow();
for (&k, _) in bindings.get().iter() {
maybes.push(interner_get(k));
let string = token::get_ident(k);
maybes.push(string.get().to_str());
values.push(uint::MAX);
}
}
let mut smallest = 0;
for (i, &other) in maybes.iter().enumerate() {
values[i] = name.lev_distance(other);
for (i, other) in maybes.iter().enumerate() {
values[i] = name.lev_distance(*other);
if values[i] <= values[smallest] {
smallest = i;
@ -5190,7 +5202,9 @@ impl Resolver {
self.resolve_error(expr.span,
format!("use of undeclared label \
`{}`",
interner_get(label))),
token::get_ident(label)
.get()
.to_str())),
Some(DlDef(def @ DefLabel(_))) => {
// FIXME: is AllPublic correct?
self.record_def(expr.id, (def, AllPublic))
@ -5510,7 +5524,7 @@ impl Resolver {
self.populate_module_if_necessary(module_);
let children = module_.children.borrow();
for (&name, _) in children.get().iter() {
debug!("* {}", interner_get(name));
debug!("* {}", token::get_ident(name).get().to_str());
}
debug!("Import resolutions:");
@ -5534,7 +5548,7 @@ impl Resolver {
}
}
debug!("* {}:{}{}", interner_get(*name),
debug!("* {}:{}{}", token::get_ident(*name).get().to_str(),
value_repr, type_repr);
}
}