Skip to content

Commit 3c0eca7

Browse files
committed
librustc: convert creader and cstore to use @~strs
1 parent a18e7d6 commit 3c0eca7

File tree

8 files changed

+67
-68
lines changed

8 files changed

+67
-68
lines changed

src/librustc/metadata/creader.rs

+26-27
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ pub fn read_crates(diag: span_handler,
6464
type cache_entry = {
6565
cnum: int,
6666
span: span,
67-
hash: ~str,
67+
hash: @~str,
6868
metas: @~[@ast::meta_item]
6969
};
7070

@@ -100,7 +100,7 @@ fn warn_if_multiple_versions(e: @mut Env,
100100

101101
if matches.len() != 1u {
102102
diag.handler().warn(
103-
fmt!("using multiple versions of crate `%s`", name));
103+
fmt!("using multiple versions of crate `%s`", *name));
104104
for matches.each |match_| {
105105
diag.span_note(match_.span, ~"used here");
106106
let attrs = ~[
@@ -145,7 +145,7 @@ fn visit_view_item(e: @mut Env, i: @ast::view_item) {
145145
ast::view_item_extern_mod(ident, meta_items, id) => {
146146
debug!("resolving extern mod stmt. ident: %?, meta: %?",
147147
ident, meta_items);
148-
let cnum = resolve_crate(e, ident, meta_items, ~"", i.span);
148+
let cnum = resolve_crate(e, ident, meta_items, @~"", i.span);
149149
cstore::add_extern_mod_stmt_cnum(e.cstore, id, cnum);
150150
}
151151
_ => ()
@@ -172,21 +172,20 @@ fn visit_item(e: @mut Env, i: @ast::item) {
172172
let foreign_name =
173173
match attr::first_attr_value_str_by_name(i.attrs,
174174
~"link_name") {
175-
Some(ref nn) => {
176-
if **nn == ~"" {
175+
Some(nn) => {
176+
if *nn == ~"" {
177177
e.diag.span_fatal(
178178
i.span,
179179
~"empty #[link_name] not allowed; use " +
180180
~"#[nolink].");
181181
}
182-
/*bad*/copy *nn
182+
nn
183183
}
184-
None => @/*bad*/copy *e.intr.get(i.ident)
184+
None => e.intr.get(i.ident)
185185
};
186186
if attr::find_attrs_by_name(i.attrs, ~"nolink").is_empty() {
187187
already_added =
188-
!cstore::add_used_library(cstore,
189-
/*bad*/ copy *foreign_name);
188+
!cstore::add_used_library(cstore, foreign_name);
190189
}
191190
if !link_args.is_empty() && already_added {
192191
e.diag.span_fatal(i.span, ~"library '" + *foreign_name +
@@ -198,8 +197,8 @@ fn visit_item(e: @mut Env, i: @ast::item) {
198197

199198
for link_args.each |a| {
200199
match attr::get_meta_item_value_str(attr::attr_meta(*a)) {
201-
Some(ref linkarg) => {
202-
cstore::add_used_link_args(cstore, /*bad*/copy **linkarg);
200+
Some(linkarg) => {
201+
cstore::add_used_link_args(cstore, *linkarg);
203202
}
204203
None => { /* fallthrough */ }
205204
}
@@ -209,22 +208,22 @@ fn visit_item(e: @mut Env, i: @ast::item) {
209208
}
210209
}
211210

212-
fn metas_with(+ident: ~str, +key: ~str, +metas: ~[@ast::meta_item])
211+
fn metas_with(ident: @~str, key: @~str, +metas: ~[@ast::meta_item])
213212
-> ~[@ast::meta_item] {
214-
let name_items = attr::find_meta_items_by_name(metas, key);
213+
let name_items = attr::find_meta_items_by_name(metas, *key);
215214
if name_items.is_empty() {
216-
vec::append_one(metas, attr::mk_name_value_item_str(@key, @ident))
215+
vec::append_one(metas, attr::mk_name_value_item_str(key, ident))
217216
} else {
218217
metas
219218
}
220219
}
221220

222-
fn metas_with_ident(+ident: ~str, +metas: ~[@ast::meta_item])
221+
fn metas_with_ident(ident: @~str, +metas: ~[@ast::meta_item])
223222
-> ~[@ast::meta_item] {
224-
metas_with(ident, ~"name", metas)
223+
metas_with(ident, @~"name", metas)
225224
}
226225

227-
fn existing_match(e: @mut Env, metas: ~[@ast::meta_item], hash: ~str)
226+
fn existing_match(e: @mut Env, metas: ~[@ast::meta_item], hash: @~str)
228227
-> Option<int> {
229228
for e.crate_cache.each |c| {
230229
if loader::metadata_matches(*c.metas, metas)
@@ -238,10 +237,10 @@ fn existing_match(e: @mut Env, metas: ~[@ast::meta_item], hash: ~str)
238237
fn resolve_crate(e: @mut Env,
239238
ident: ast::ident,
240239
+metas: ~[@ast::meta_item],
241-
+hash: ~str,
240+
hash: @~str,
242241
span: span)
243242
-> ast::crate_num {
244-
let metas = metas_with_ident(/*bad*/copy *e.intr.get(ident), metas);
243+
let metas = metas_with_ident(@/*bad*/copy *e.intr.get(ident), metas);
245244

246245
match existing_match(e, metas, hash) {
247246
None => {
@@ -277,10 +276,10 @@ fn resolve_crate(e: @mut Env,
277276
let cname =
278277
match attr::last_meta_item_value_str_by_name(load_ctxt.metas,
279278
~"name") {
280-
Some(ref v) => /*bad*/copy *v,
281-
None => @/*bad*/copy *e.intr.get(ident),
279+
Some(v) => v,
280+
None => e.intr.get(ident),
282281
};
283-
let cmeta = @{name: /*bad*/copy *cname, data: cdata,
282+
let cmeta = @{name: cname, data: cdata,
284283
cnum_map: cnum_map, cnum: cnum};
285284

286285
let cstore = e.cstore;
@@ -303,10 +302,10 @@ fn resolve_crate_deps(e: @mut Env, cdata: @~[u8]) -> cstore::cnum_map {
303302
for decoder::get_crate_deps(e.intr, cdata).each |dep| {
304303
let extrn_cnum = dep.cnum;
305304
let cname = dep.name;
306-
let cmetas = metas_with(/*bad*/copy dep.vers, ~"vers", ~[]);
305+
let cmetas = metas_with(dep.vers, @~"vers", ~[]);
307306
debug!("resolving dep crate %s ver: %s hash: %s",
308-
*e.intr.get(dep.name), dep.vers, dep.hash);
309-
match existing_match(e, metas_with_ident(copy *e.intr.get(cname),
307+
*e.intr.get(dep.name), *dep.vers, *dep.hash);
308+
match existing_match(e, metas_with_ident(e.intr.get(cname),
310309
copy cmetas),
311310
dep.hash) {
312311
Some(local_cnum) => {
@@ -320,8 +319,8 @@ fn resolve_crate_deps(e: @mut Env, cdata: @~[u8]) -> cstore::cnum_map {
320319
// FIXME (#2404): Need better error reporting than just a bogus
321320
// span.
322321
let fake_span = dummy_sp();
323-
let local_cnum = resolve_crate(e, cname, cmetas,
324-
/*bad*/copy dep.hash, fake_span);
322+
let local_cnum = resolve_crate(e, cname, cmetas, dep.hash,
323+
fake_span);
325324
cnum_map.insert(extrn_cnum, local_cnum);
326325
}
327326
}

src/librustc/metadata/csearch.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub fn get_item_path(tcx: ty::ctxt, def: ast::def_id) -> ast_map::path {
8080
// FIXME #1920: This path is not always correct if the crate is not linked
8181
// into the root namespace.
8282
vec::append(~[ast_map::path_mod(tcx.sess.ident_of(
83-
/*bad*/copy cdata.name))], path)
83+
/*bad*/copy *cdata.name))], path)
8484
}
8585

8686
pub enum found_ast {

src/librustc/metadata/cstore.rs

+10-10
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use syntax::parse::token::ident_interner;
3333
// own crate numbers.
3434
pub type cnum_map = oldmap::HashMap<ast::crate_num, ast::crate_num>;
3535

36-
pub type crate_metadata = @{name: ~str,
36+
pub type crate_metadata = @{name: @~str,
3737
data: @~[u8],
3838
cnum_map: cnum_map,
3939
cnum: ast::crate_num};
@@ -68,12 +68,12 @@ pub fn get_crate_data(cstore: @mut CStore, cnum: ast::crate_num)
6868
return cstore.metas.get(&cnum);
6969
}
7070

71-
pub fn get_crate_hash(cstore: @mut CStore, cnum: ast::crate_num) -> ~str {
71+
pub fn get_crate_hash(cstore: @mut CStore, cnum: ast::crate_num) -> @~str {
7272
let cdata = get_crate_data(cstore, cnum);
7373
decoder::get_crate_hash(cdata.data)
7474
}
7575

76-
pub fn get_crate_vers(cstore: @mut CStore, cnum: ast::crate_num) -> ~str {
76+
pub fn get_crate_vers(cstore: @mut CStore, cnum: ast::crate_num) -> @~str {
7777
let cdata = get_crate_data(cstore, cnum);
7878
decoder::get_crate_vers(cdata.data)
7979
}
@@ -107,11 +107,11 @@ pub fn get_used_crate_files(cstore: @mut CStore) -> ~[Path] {
107107
return /*bad*/copy cstore.used_crate_files;
108108
}
109109

110-
pub fn add_used_library(cstore: @mut CStore, +lib: ~str) -> bool {
111-
assert lib != ~"";
110+
pub fn add_used_library(cstore: @mut CStore, lib: @~str) -> bool {
111+
assert *lib != ~"";
112112

113-
if cstore.used_libraries.contains(&lib) { return false; }
114-
cstore.used_libraries.push(lib);
113+
if cstore.used_libraries.contains(&*lib) { return false; }
114+
cstore.used_libraries.push(/*bad*/ copy *lib);
115115
true
116116
}
117117

@@ -151,18 +151,18 @@ pub fn get_dep_hashes(cstore: @mut CStore) -> ~[~str] {
151151
for extern_mod_crate_map.each_value |&cnum| {
152152
let cdata = cstore::get_crate_data(cstore, cnum);
153153
let hash = decoder::get_crate_hash(cdata.data);
154-
debug!("Add hash[%s]: %s", cdata.name, hash);
154+
debug!("Add hash[%s]: %s", *cdata.name, *hash);
155155
result.push({name: /*bad*/copy cdata.name, hash: hash});
156156
}
157157

158158
let sorted = std::sort::merge_sort(result, |a, b| a.name <= b.name);
159159

160160
debug!("sorted:");
161161
for sorted.each |x| {
162-
debug!(" hash[%s]: %s", x.name, x.hash);
162+
debug!(" hash[%s]: %s", *x.name, *x.hash);
163163
}
164164

165-
sorted.map(|ch| /*bad*/copy ch.hash)
165+
sorted.map(|ch| /*bad*/copy *ch.hash)
166166
}
167167

168168
// Local Variables:

src/librustc/metadata/decoder.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -1015,7 +1015,7 @@ fn list_meta_items(intr: @ident_interner,
10151015
}
10161016
}
10171017

1018-
fn list_crate_attributes(intr: @ident_interner, md: ebml::Doc, hash: ~str,
1018+
fn list_crate_attributes(intr: @ident_interner, md: ebml::Doc, hash: &str,
10191019
out: io::Writer) {
10201020
out.write_str(fmt!("=Crate Attributes (%s)=\n", hash));
10211021

@@ -1031,7 +1031,7 @@ pub fn get_crate_attributes(data: @~[u8]) -> ~[ast::attribute] {
10311031
}
10321032

10331033
pub type crate_dep = {cnum: ast::crate_num, name: ast::ident,
1034-
vers: ~str, hash: ~str};
1034+
vers: @~str, hash: @~str};
10351035

10361036
pub fn get_crate_deps(intr: @ident_interner, data: @~[u8]) -> ~[crate_dep] {
10371037
let mut deps: ~[crate_dep] = ~[];
@@ -1044,8 +1044,8 @@ pub fn get_crate_deps(intr: @ident_interner, data: @~[u8]) -> ~[crate_dep] {
10441044
for reader::tagged_docs(depsdoc, tag_crate_dep) |depdoc| {
10451045
deps.push({cnum: crate_num,
10461046
name: intr.intern(@docstr(depdoc, tag_crate_dep_name)),
1047-
vers: docstr(depdoc, tag_crate_dep_vers),
1048-
hash: docstr(depdoc, tag_crate_dep_hash)});
1047+
vers: @docstr(depdoc, tag_crate_dep_vers),
1048+
hash: @docstr(depdoc, tag_crate_dep_hash)});
10491049
crate_num += 1;
10501050
};
10511051
return deps;
@@ -1057,25 +1057,25 @@ fn list_crate_deps(intr: @ident_interner, data: @~[u8], out: io::Writer) {
10571057
for get_crate_deps(intr, data).each |dep| {
10581058
out.write_str(
10591059
fmt!("%d %s-%s-%s\n",
1060-
dep.cnum, *intr.get(dep.name), dep.hash, dep.vers));
1060+
dep.cnum, *intr.get(dep.name), *dep.hash, *dep.vers));
10611061
}
10621062

10631063
out.write_str(~"\n");
10641064
}
10651065

1066-
pub fn get_crate_hash(data: @~[u8]) -> ~str {
1066+
pub fn get_crate_hash(data: @~[u8]) -> @~str {
10671067
let cratedoc = reader::Doc(data);
10681068
let hashdoc = reader::get_doc(cratedoc, tag_crate_hash);
1069-
str::from_bytes(reader::doc_data(hashdoc))
1069+
@str::from_bytes(reader::doc_data(hashdoc))
10701070
}
10711071

1072-
pub fn get_crate_vers(data: @~[u8]) -> ~str {
1072+
pub fn get_crate_vers(data: @~[u8]) -> @~str {
10731073
let attrs = decoder::get_crate_attributes(data);
10741074
let linkage_attrs = attr::find_linkage_metas(attrs);
10751075

10761076
match attr::last_meta_item_value_str_by_name(linkage_attrs, ~"vers") {
1077-
Some(ref ver) => /*bad*/copy **ver,
1078-
None => ~"0.0"
1077+
Some(ver) => ver,
1078+
None => @~"0.0"
10791079
}
10801080
}
10811081

@@ -1097,7 +1097,7 @@ pub fn list_crate_metadata(intr: @ident_interner, bytes: @~[u8],
10971097
out: io::Writer) {
10981098
let hash = get_crate_hash(bytes);
10991099
let md = reader::Doc(bytes);
1100-
list_crate_attributes(intr, md, hash, out);
1100+
list_crate_attributes(intr, md, *hash, out);
11011101
list_crate_deps(intr, bytes, out);
11021102
}
11031103

src/librustc/metadata/encoder.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -1127,7 +1127,7 @@ fn encode_crate_deps(ecx: @encode_ctxt,
11271127
let mut deps = ~[];
11281128
do cstore::iter_crate_data(cstore) |key, val| {
11291129
let dep = {cnum: key,
1130-
name: ecx.tcx.sess.ident_of(/*bad*/ copy val.name),
1130+
name: ecx.tcx.sess.ident_of(/*bad*/ copy *val.name),
11311131
vers: decoder::get_crate_vers(val.data),
11321132
hash: decoder::get_crate_hash(val.data)};
11331133
deps.push(dep);
@@ -1189,10 +1189,10 @@ fn encode_crate_dep(ecx: @encode_ctxt, ebml_w: writer::Encoder,
11891189
ebml_w.writer.write(str::to_bytes(ecx.tcx.sess.str_of(dep.name)));
11901190
ebml_w.end_tag();
11911191
ebml_w.start_tag(tag_crate_dep_vers);
1192-
ebml_w.writer.write(str::to_bytes(dep.vers));
1192+
ebml_w.writer.write(str::to_bytes(*dep.vers));
11931193
ebml_w.end_tag();
11941194
ebml_w.start_tag(tag_crate_dep_hash);
1195-
ebml_w.writer.write(str::to_bytes(dep.hash));
1195+
ebml_w.writer.write(str::to_bytes(*dep.hash));
11961196
ebml_w.end_tag();
11971197
ebml_w.end_tag();
11981198
}

src/librustc/metadata/loader.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ pub type ctxt = {
4949
span: span,
5050
ident: ast::ident,
5151
metas: ~[@ast::meta_item],
52-
hash: ~str,
52+
hash: @~str,
5353
os: os,
5454
static: bool,
5555
intr: @ident_interner
@@ -91,7 +91,7 @@ fn find_library_crate_aux(cx: ctxt,
9191
filesearch: filesearch::FileSearch) ->
9292
Option<{ident: ~str, data: @~[u8]}> {
9393
let crate_name = crate_name_from_metas(/*bad*/copy cx.metas);
94-
let prefix: ~str = nn.prefix + crate_name + ~"-";
94+
let prefix: ~str = nn.prefix + *crate_name + ~"-";
9595
let suffix: ~str = /*bad*/copy nn.suffix;
9696
9797
let mut matches = ~[];
@@ -130,7 +130,7 @@ fn find_library_crate_aux(cx: ctxt,
130130
Some(/*bad*/copy matches[0])
131131
} else {
132132
cx.diag.span_err(
133-
cx.span, fmt!("multiple matching crates for `%s`", crate_name));
133+
cx.span, fmt!("multiple matching crates for `%s`", *crate_name));
134134
cx.diag.handler().note(~"candidates:");
135135
for matches.each |match_| {
136136
cx.diag.handler().note(fmt!("path: %s", match_.ident));
@@ -142,12 +142,12 @@ fn find_library_crate_aux(cx: ctxt,
142142
}
143143
}
144144

145-
pub fn crate_name_from_metas(+metas: ~[@ast::meta_item]) -> ~str {
145+
pub fn crate_name_from_metas(+metas: &[@ast::meta_item]) -> @~str {
146146
let name_items = attr::find_meta_items_by_name(metas, ~"name");
147147
match vec::last_opt(name_items) {
148148
Some(i) => {
149149
match attr::get_meta_item_value_str(i) {
150-
Some(ref n) => /*bad*/copy **n,
150+
Some(n) => n,
151151
// FIXME (#2406): Probably want a warning here since the user
152152
// is using the wrong type of meta item.
153153
_ => fail!()
@@ -167,7 +167,7 @@ pub fn note_linkage_attrs(intr: @ident_interner, diag: span_handler,
167167
168168
fn crate_matches(crate_data: @~[u8],
169169
metas: &[@ast::meta_item],
170-
hash: ~str) -> bool {
170+
hash: @~str) -> bool {
171171
let attrs = decoder::get_crate_attributes(crate_data);
172172
let linkage_metas = attr::find_linkage_metas(attrs);
173173
if !hash.is_empty() {

src/librustc/middle/trans/base.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -2859,9 +2859,9 @@ pub fn fill_crate_map(ccx: @crate_ctxt, map: ValueRef) {
28592859
let cstore = ccx.sess.cstore;
28602860
while cstore::have_crate_data(cstore, i) {
28612861
let cdata = cstore::get_crate_data(cstore, i);
2862-
let nm = ~"_rust_crate_map_" + cdata.name +
2863-
~"_" + cstore::get_crate_vers(cstore, i) +
2864-
~"_" + cstore::get_crate_hash(cstore, i);
2862+
let nm = ~"_rust_crate_map_" + *cdata.name +
2863+
~"_" + *cstore::get_crate_vers(cstore, i) +
2864+
~"_" + *cstore::get_crate_hash(cstore, i);
28652865
let cr = str::as_c_str(nm, |buf| {
28662866
unsafe {
28672867
llvm::LLVMAddGlobal(ccx.llmod, ccx.int_type, buf)

0 commit comments

Comments
 (0)