Skip to content

Commit 70a28dc

Browse files
committed
Cleanup attribute code. Issue #487
1 parent 26ce1e1 commit 70a28dc

File tree

3 files changed

+23
-28
lines changed

3 files changed

+23
-28
lines changed

src/comp/front/attr.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ export sort_meta_items;
1414
export remove_meta_items_by_name;
1515
export get_attr_name;
1616
export mk_name_value_item;
17-
export mk_link_item;
17+
export mk_list_item;
1818
export mk_word_item;
19+
export mk_attr;
1920

2021
// From a list of crate attributes get only the meta_items that impact crate
2122
// linkage
@@ -171,14 +172,20 @@ fn mk_name_value_item(ast::ident name, str value) -> @ast::meta_item {
171172
ret @span(ast::meta_name_value(name, value));
172173
}
173174

174-
fn mk_list_item(ast::ident name, &vec[@ast::meta_item] items) -> @ast::meta_item {
175+
fn mk_list_item(ast::ident name,
176+
&vec[@ast::meta_item] items) -> @ast::meta_item {
175177
ret @span(ast::meta_list(name, items));
176178
}
177179

178180
fn mk_word_item(ast::ident name) -> @ast::meta_item {
179181
ret @span(ast::meta_word(name));
180182
}
181183

184+
fn mk_attr(@ast::meta_item item) -> ast::attribute {
185+
ret span(rec(style = ast::attr_inner,
186+
value = *item));
187+
}
188+
182189
//
183190
// Local Variables:
184191
// mode: rust

src/comp/metadata/decoder.rs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import std::str;
77
import std::io;
88
import std::map::hashmap;
99
import front::ast;
10+
import front::attr;
1011
import middle::ty;
1112
import tags::*;
1213
import tydecode::parse_def_id;
@@ -267,25 +268,22 @@ fn get_meta_items(&ebml::doc md) -> vec[@ast::meta_item] {
267268
ebml::tagged_docs(md, tag_meta_item_word)) {
268269
auto nd = ebml::get_doc(meta_item_doc, tag_meta_item_name);
269270
auto n = str::unsafe_from_bytes(ebml::doc_data(nd));
270-
items += [@rec(node=ast::meta_word(n),
271-
span=rec(lo=0u, hi=0u))];
271+
items += [attr::mk_word_item(n)];
272272
}
273273
for each (ebml::doc meta_item_doc in
274274
ebml::tagged_docs(md, tag_meta_item_name_value)) {
275275
auto nd = ebml::get_doc(meta_item_doc, tag_meta_item_name);
276276
auto vd = ebml::get_doc(meta_item_doc, tag_meta_item_value);
277277
auto n = str::unsafe_from_bytes(ebml::doc_data(nd));
278278
auto v = str::unsafe_from_bytes(ebml::doc_data(vd));
279-
items += [@rec(node=ast::meta_name_value(n, v),
280-
span=rec(lo=0u, hi=0u))];
279+
items += [attr::mk_name_value_item(n, v)];
281280
}
282281
for each (ebml::doc meta_item_doc in
283282
ebml::tagged_docs(md, tag_meta_item_list)) {
284283
auto nd = ebml::get_doc(meta_item_doc, tag_meta_item_name);
285284
auto n = str::unsafe_from_bytes(ebml::doc_data(nd));
286285
auto subitems = get_meta_items(meta_item_doc);
287-
items += [@rec(node=ast::meta_list(n, subitems),
288-
span=rec(lo=0u, hi=0u))];
286+
items += [attr::mk_list_item(n, subitems)];
289287
}
290288
ret items;
291289
}

src/comp/metadata/encoder.rs

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -463,7 +463,7 @@ fn encode_attributes(&ebml::writer ebml_w, &vec[attribute] attrs) {
463463

464464
// So there's a special crate attribute called 'link' which defines the
465465
// metadata that Rust cares about for linking crates. This attribute requires
466-
// name and value attributes, so if the user didn't provide them we will throw
466+
// 'name' and 'vers' items, so if the user didn't provide them we will throw
467467
// them in anyway with default values.
468468
fn synthesize_crate_attrs(&@crate_ctxt cx,
469469
&@crate crate) -> vec[attribute] {
@@ -472,33 +472,23 @@ fn synthesize_crate_attrs(&@crate_ctxt cx,
472472
&vec[@meta_item] items)
473473
-> attribute {
474474

475-
auto bogus_span = rec(lo = 0u, hi = 0u);
475+
assert cx.link_meta.name != "";
476+
assert cx.link_meta.vers != "";
476477

477-
auto name_item_ = meta_name_value("name", cx.link_meta.name);
478-
auto name_item = rec(node=name_item_,
479-
span=bogus_span);
480-
481-
auto vers_item_ = meta_name_value("vers", cx.link_meta.vers);
482-
auto vers_item = rec(node=vers_item_,
483-
span=bogus_span);
478+
auto name_item = attr::mk_name_value_item("name",
479+
cx.link_meta.name);
480+
auto vers_item = attr::mk_name_value_item("vers",
481+
cx.link_meta.vers);
484482

485483
auto other_items = {
486484
auto tmp = attr::remove_meta_items_by_name(items, "name");
487485
attr::remove_meta_items_by_name(tmp, "vers")
488486
};
489487

490-
auto meta_items = [@name_item] + [@vers_item] + other_items;
491-
492-
auto link_item_ = meta_list("link", meta_items);
493-
auto link_item = rec(node=link_item_,
494-
span=bogus_span);
495-
496-
auto attr_ = rec(style = attr_inner,
497-
value = link_item);
498-
auto attr = rec(node=attr_,
499-
span=bogus_span);
488+
auto meta_items = [name_item] + [vers_item] + other_items;
489+
auto link_item = attr::mk_list_item("link", meta_items);
500490

501-
ret attr;
491+
ret attr::mk_attr(link_item);
502492
}
503493

504494
let vec[attribute] attrs = [];

0 commit comments

Comments
 (0)