Skip to content

Commit 0bf75a2

Browse files
committed
collect crate meta info and ext crate names
1 parent 0984d1d commit 0bf75a2

File tree

4 files changed

+24
-11
lines changed

4 files changed

+24
-11
lines changed

src/comp/driver/rustc.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,9 @@ impure fn main(vec[str] args) {
128128

129129
auto crate_cache = common.new_int_hash[session.crate_metadata]();
130130
auto target_crate_num = 0;
131+
let vec[@front.ast.meta_item] md = vec();
131132
auto sess = session.session(target_crate_num, target_cfg, crate_cache,
132-
front.codemap.new_codemap());
133+
md, front.codemap.new_codemap());
133134

134135
let option.t[str] input_file = none[str];
135136
let option.t[str] output_file = none[str];

src/comp/driver/session.rs

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,13 @@ type cfg = rec(os os,
2323
ty_mach uint_type,
2424
ty_mach float_type);
2525

26-
type crate_metadata = vec[u8];
26+
type crate_metadata = rec(str name,
27+
vec[u8] data);
2728

28-
obj session(ast.crate_num cnum, cfg targ,
29-
map.hashmap[int, crate_metadata] crates,
30-
codemap.codemap cm) {
29+
state obj session(ast.crate_num cnum, cfg targ,
30+
map.hashmap[int, crate_metadata] crates,
31+
mutable vec[@ast.meta_item] metadata,
32+
codemap.codemap cm) {
3133

3234
fn get_targ_cfg() -> cfg {
3335
ret targ;
@@ -53,6 +55,13 @@ obj session(ast.crate_num cnum, cfg targ,
5355
fail;
5456
}
5557

58+
fn add_metadata(vec[@ast.meta_item] data) {
59+
metadata = metadata + data;
60+
}
61+
fn get_metadata() -> vec[@ast.meta_item] {
62+
ret metadata;
63+
}
64+
5665
fn span_warn(span sp, str msg) {
5766
auto lo = codemap.lookup_pos(cm, sp.lo);
5867
auto hi = codemap.lookup_pos(cm, sp.hi);

src/comp/front/creader.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ fn load_crate(session.session sess,
400400
auto path = fs.connect(library_search_path, filename);
401401
alt (get_metadata_section(path)) {
402402
case (option.some[vec[u8]](?cvec)) {
403-
sess.set_external_crate(cnum, cvec);
403+
sess.set_external_crate(cnum, rec(name=ident, data=cvec));
404404
ret;
405405
}
406406
case (_) {}
@@ -470,7 +470,7 @@ fn kind_has_type_params(u8 kind_ch) -> bool {
470470

471471
fn lookup_def(session.session sess, int cnum, vec[ast.ident] path)
472472
-> option.t[ast.def] {
473-
auto data = sess.get_external_crate(cnum);
473+
auto data = sess.get_external_crate(cnum).data;
474474

475475
auto did;
476476
alt (resolve_path(path, data)) {
@@ -513,7 +513,7 @@ fn lookup_def(session.session sess, int cnum, vec[ast.ident] path)
513513
fn get_type(session.session sess, ast.def_id def)
514514
-> ty.ty_param_count_and_ty {
515515
auto external_crate_id = def._0;
516-
auto data = sess.get_external_crate(external_crate_id);
516+
auto data = sess.get_external_crate(external_crate_id).data;
517517
auto item = lookup_item(def._1, data);
518518
auto t = item_type(item, external_crate_id);
519519

@@ -531,15 +531,15 @@ fn get_type(session.session sess, ast.def_id def)
531531

532532
fn get_symbol(session.session sess, ast.def_id def) -> str {
533533
auto external_crate_id = def._0;
534-
auto data = sess.get_external_crate(external_crate_id);
534+
auto data = sess.get_external_crate(external_crate_id).data;
535535
auto item = lookup_item(def._1, data);
536536
ret item_symbol(item);
537537
}
538538

539539
fn get_tag_variants(session.session sess, ast.def_id def)
540540
-> vec[trans.variant_info] {
541541
auto external_crate_id = def._0;
542-
auto data = sess.get_external_crate(external_crate_id);
542+
auto data = sess.get_external_crate(external_crate_id).data;
543543
auto items = ebml.get_doc(ebml.new_doc(data), metadata.tag_items);
544544
auto item = find_item(def._1, items);
545545

src/comp/front/eval.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,10 @@ impure fn eval_crate_directive(ctx cx,
419419
ast.index_view_item(index, vi);
420420
}
421421

422-
case (ast.cdir_meta(?mi)) {}
422+
case (ast.cdir_meta(?mi)) {
423+
cx.sess.add_metadata(mi);
424+
}
425+
423426
case (ast.cdir_syntax(?pth)) {}
424427
case (ast.cdir_auth(?pth, ?eff)) {}
425428
}

0 commit comments

Comments
 (0)