Skip to content

Commit 33c3228

Browse files
committed
---
yaml --- r: 3463 b: refs/heads/master c: 308bc31 h: refs/heads/master i: 3461: f427d16 3459: 3453e4a 3455: dc5d756 v: v3
1 parent b8719aa commit 33c3228

File tree

2 files changed

+80
-80
lines changed

2 files changed

+80
-80
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 325f46da06ccda82e465b0a1ba8449a04a89e601
2+
refs/heads/master: 308bc31f242d2c1e0e41f5d13a980315b5ce1afb

trunk/src/comp/back/link.rs

Lines changed: 79 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -282,90 +282,91 @@ type link_meta = rec(str name,
282282

283283
fn build_link_meta(&session::session sess, &ast::crate c,
284284
&str output, sha1 sha) -> link_meta {
285-
auto meta_info = crate_link_metas(c);
286285

287-
auto name = crate_meta_name(sess, c, output);
288-
auto vers = crate_meta_vers(sess, c);
289-
auto extras_hash = crate_meta_extras_hash(sha, c);
290-
291-
ret rec(name = name, vers = vers, extras_hash = extras_hash);
292-
}
293-
294-
type link_metas = rec(option::t[str] name,
295-
option::t[str] vers,
296-
vec[@ast::meta_item] cmh_items);
297-
298-
fn crate_link_metas(&ast::crate c) -> link_metas {
299-
let option::t[str] name = none;
300-
let option::t[str] vers = none;
301-
let vec[@ast::meta_item] cmh_items = [];
302-
for (@ast::meta_item meta in
303-
attr::find_linkage_metas(c.node.attrs)) {
304-
alt (meta.node) {
305-
case (ast::meta_name_value("name", ?v)) {
306-
// FIXME: Should probably warn about duplicate name items
307-
name = some(v);
308-
}
309-
case (ast::meta_name_value("value", ?v)) {
310-
// FIXME: Should probably warn about duplicate value items
311-
vers = some(v);
312-
}
313-
case (_) {
314-
cmh_items += [meta];
286+
type provided_metas = rec(option::t[str] name,
287+
option::t[str] vers,
288+
vec[@ast::meta_item] cmh_items);
289+
290+
fn provided_link_metas(&ast::crate c) -> provided_metas {
291+
let option::t[str] name = none;
292+
let option::t[str] vers = none;
293+
let vec[@ast::meta_item] cmh_items = [];
294+
for (@ast::meta_item meta in
295+
attr::find_linkage_metas(c.node.attrs)) {
296+
alt (meta.node) {
297+
case (ast::meta_name_value("name", ?v)) {
298+
// FIXME: Should probably warn about duplicate name items
299+
name = some(v);
300+
}
301+
case (ast::meta_name_value("value", ?v)) {
302+
// FIXME: Should probably warn about duplicate value items
303+
vers = some(v);
304+
}
305+
case (_) {
306+
cmh_items += [meta];
307+
}
315308
}
316309
}
310+
ret rec(name = name,
311+
vers = vers,
312+
cmh_items = cmh_items);
317313
}
318-
ret rec(name = name,
319-
vers = vers,
320-
cmh_items = cmh_items);
321-
}
322314

323-
// This calculates CMH as defined above
324-
fn crate_meta_extras_hash(sha1 sha, &ast::crate crate) -> str {
325-
fn len_and_str(&str s) -> str { ret #fmt("%u_%s", str::byte_len(s), s); }
315+
// This calculates CMH as defined above
316+
fn crate_meta_extras_hash(sha1 sha, &ast::crate crate,
317+
&provided_metas metas) -> str {
318+
fn len_and_str(&str s) -> str {
319+
ret #fmt("%u_%s", str::byte_len(s), s);
320+
}
326321

327-
auto cmh_items = {
328-
auto cmh_items = crate_link_metas(crate).cmh_items;
329-
attr::sort_meta_items(cmh_items)
330-
};
331-
332-
sha.reset();
333-
for (@ast::meta_item m_ in cmh_items) {
334-
auto m = m_;
335-
alt (m.node) {
336-
case (ast::meta_name_value(?key, ?value)) {
337-
sha.input_str(len_and_str(key));
338-
sha.input_str(len_and_str(value));
339-
}
340-
case (ast::meta_word(?name)) {
341-
sha.input_str(len_and_str(name));
342-
}
343-
case (ast::meta_list(_, _)) {
344-
fail "unimplemented meta_item variant";
322+
auto cmh_items = attr::sort_meta_items(metas.cmh_items);
323+
324+
sha.reset();
325+
for (@ast::meta_item m_ in cmh_items) {
326+
auto m = m_;
327+
alt (m.node) {
328+
case (ast::meta_name_value(?key, ?value)) {
329+
sha.input_str(len_and_str(key));
330+
sha.input_str(len_and_str(value));
331+
}
332+
case (ast::meta_word(?name)) {
333+
sha.input_str(len_and_str(name));
334+
}
335+
case (ast::meta_list(_, _)) {
336+
fail "unimplemented meta_item variant";
337+
}
345338
}
346339
}
340+
ret truncated_sha1_result(sha);
347341
}
348-
ret truncated_sha1_result(sha);
349-
}
350342

351-
fn crate_meta_name(&session::session sess, &ast::crate crate,
352-
&str output) -> str {
353-
ret alt (crate_link_metas(crate).name) {
354-
case (some(?v)) { v }
355-
case (none) {
356-
auto os = str::split(fs::basename(output), '.' as u8);
357-
assert (vec::len(os) >= 2u);
358-
vec::pop(os);
359-
str::connect(os, ".")
360-
}
361-
};
362-
}
343+
fn crate_meta_name(&session::session sess, &ast::crate crate,
344+
&str output, &provided_metas metas) -> str {
345+
ret alt (metas.name) {
346+
case (some(?v)) { v }
347+
case (none) {
348+
auto os = str::split(fs::basename(output), '.' as u8);
349+
assert (vec::len(os) >= 2u);
350+
vec::pop(os);
351+
str::connect(os, ".")
352+
}
353+
};
354+
}
363355

364-
fn crate_meta_vers(&session::session sess, &ast::crate crate) -> str {
365-
ret alt (crate_link_metas(crate).vers) {
366-
case (some(?v)) { v }
367-
case (none) { "0.0" }
368-
};
356+
fn crate_meta_vers(&session::session sess, &ast::crate crate,
357+
&provided_metas metas) -> str {
358+
ret alt (metas.vers) {
359+
case (some(?v)) { v }
360+
case (none) { "0.0" }
361+
};
362+
}
363+
364+
auto provided_metas = provided_link_metas(c);
365+
auto name = crate_meta_name(sess, c, output, provided_metas);
366+
auto vers = crate_meta_vers(sess, c, provided_metas);
367+
auto extras_hash = crate_meta_extras_hash(sha, c, provided_metas);
368+
369+
ret rec(name = name, vers = vers, extras_hash = extras_hash);
369370
}
370371

371372
fn truncated_sha1_result(sha1 sha) -> str {
@@ -374,8 +375,7 @@ fn truncated_sha1_result(sha1 sha) -> str {
374375

375376

376377
// This calculates STH for a symbol, as defined above
377-
fn symbol_hash(ty::ctxt tcx, sha1 sha, &ty::t t, str crate_meta_name,
378-
str crate_meta_extras_hash) -> str {
378+
fn symbol_hash(ty::ctxt tcx, sha1 sha, &ty::t t, &link_meta link_meta) -> str {
379379
// NB: do *not* use abbrevs here as we want the symbol names
380380
// to be independent of one another in the crate.
381381

@@ -384,9 +384,10 @@ fn symbol_hash(ty::ctxt tcx, sha1 sha, &ty::t t, str crate_meta_name,
384384
tcx=tcx,
385385
abbrevs=metadata::tyencode::ac_no_abbrevs);
386386
sha.reset();
387-
sha.input_str(crate_meta_name);
387+
sha.input_str(link_meta.name);
388388
sha.input_str("-");
389-
sha.input_str(crate_meta_name);
389+
// FIXME: This wants to be link_meta.meta_hash
390+
sha.input_str(link_meta.name);
390391
sha.input_str("-");
391392
sha.input_str(metadata::tyencode::ty_str(cx, t));
392393
auto hash = truncated_sha1_result(sha);
@@ -402,8 +403,7 @@ fn get_symbol_hash(&@crate_ctxt ccx, &ty::t t) -> str {
402403
case (none) {
403404
hash =
404405
symbol_hash(ccx.tcx, ccx.sha, t,
405-
ccx.link_meta.name,
406-
ccx.link_meta.extras_hash);
406+
ccx.link_meta);
407407
ccx.type_sha1s.insert(t, hash);
408408
}
409409
}

0 commit comments

Comments
 (0)