Skip to content

Commit 8f85000

Browse files
committed
---
yaml --- r: 2171 b: refs/heads/master c: c49735d h: refs/heads/master i: 2169: fdeb980 2167: f423c12 v: v3
1 parent a44ffaf commit 8f85000

File tree

2 files changed

+35
-40
lines changed

2 files changed

+35
-40
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: c470cd2d662dfff155503813d1139799c60bdd04
2+
refs/heads/master: c49735d7c48770f21d2fd5e1e92a41e78d1506d2

trunk/src/comp/middle/trans.rs

Lines changed: 34 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -6586,6 +6586,10 @@ fn decl_native_fn_and_pair(@crate_ctxt ccx,
65866586
}
65876587

65886588
type walk_ctxt = rec(mutable vec[str] path);
6589+
fn new_walk_ctxt() -> @walk_ctxt {
6590+
let vec[str] path = vec();
6591+
ret @rec(mutable path=path);
6592+
}
65896593

65906594
fn enter_item(@walk_ctxt cx, @ast.item item) {
65916595
alt (item.node) {
@@ -6679,9 +6683,7 @@ fn collect_item_2(@crate_ctxt ccx, @walk_ctxt wcx, @ast.item i) {
66796683
}
66806684

66816685
fn collect_items(@crate_ctxt ccx, @ast.crate crate) {
6682-
let vec[str] path = vec();
6683-
auto wcx = @rec(mutable path=path);
6684-
6686+
auto wcx = new_walk_ctxt();
66856687
auto visitor0 = walk.default_visitor();
66866688
auto visitor1 = rec(visit_native_item_pre =
66876689
bind collect_native_item(ccx, wcx, _),
@@ -6695,14 +6697,14 @@ fn collect_items(@crate_ctxt ccx, @ast.crate crate) {
66956697
walk.walk_crate(visitor2, *crate);
66966698
}
66976699

6698-
fn collect_tag_ctor(&@local_ctxt cx, @ast.item i) -> @local_ctxt {
6700+
fn collect_tag_ctor(@crate_ctxt ccx, @walk_ctxt wcx, @ast.item i) {
6701+
enter_item(wcx, i);
66996702

67006703
alt (i.node) {
6701-
67026704
case (ast.item_tag(_, ?variants, ?tps, _, _)) {
67036705
for (ast.variant variant in variants) {
67046706
if (_vec.len[ast.variant_arg](variant.node.args) != 0u) {
6705-
decl_fn_and_pair(cx.ccx, cx.path + vec(variant.node.name),
6707+
decl_fn_and_pair(ccx, wcx.path + vec(variant.node.name),
67066708
"tag", tps, variant.node.ann,
67076709
variant.node.id);
67086710
}
@@ -6711,23 +6713,21 @@ fn collect_tag_ctor(&@local_ctxt cx, @ast.item i) -> @local_ctxt {
67116713

67126714
case (_) { /* fall through */ }
67136715
}
6714-
ret cx;
67156716
}
67166717

6717-
fn collect_tag_ctors(@local_ctxt cx, @ast.crate crate) {
6718-
6719-
let fold.ast_fold[@local_ctxt] fld =
6720-
fold.new_identity_fold[@local_ctxt]();
6721-
6722-
fld = @rec( update_env_for_item = bind collect_tag_ctor(_,_)
6723-
with *fld );
6724-
6725-
fold.fold_crate[@local_ctxt](cx, fld, crate);
6718+
fn collect_tag_ctors(@crate_ctxt ccx, @ast.crate crate) {
6719+
auto wcx = new_walk_ctxt();
6720+
auto visitor = rec(visit_item_pre = bind collect_tag_ctor(ccx, wcx, _),
6721+
visit_item_post = bind leave_item(wcx, _)
6722+
with walk.default_visitor());
6723+
walk.walk_crate(visitor, *crate);
67266724
}
67276725

67286726
// The constant translation pass.
67296727

6730-
fn trans_constant(&@local_ctxt cx, @ast.item it) -> @local_ctxt {
6728+
fn trans_constant(@crate_ctxt ccx, @walk_ctxt wcx, @ast.item it) {
6729+
enter_item(wcx, it);
6730+
67316731
alt (it.node) {
67326732
case (ast.item_tag(?ident, ?variants, _, ?tag_id, _)) {
67336733
auto i = 0u;
@@ -6737,17 +6737,17 @@ fn trans_constant(&@local_ctxt cx, @ast.item it) -> @local_ctxt {
67376737

67386738
auto discrim_val = C_int(i as int);
67396739

6740-
auto s = mangle_name_by_seq(cx.ccx, cx.path,
6740+
auto s = mangle_name_by_seq(ccx, wcx.path,
67416741
#fmt("_rust_tag_discrim_%s_%u",
67426742
ident, i));
6743-
auto discrim_gvar = llvm.LLVMAddGlobal(cx.ccx.llmod, T_int(),
6743+
auto discrim_gvar = llvm.LLVMAddGlobal(ccx.llmod, T_int(),
67446744
_str.buf(s));
67456745

67466746
llvm.LLVMSetInitializer(discrim_gvar, discrim_val);
67476747
llvm.LLVMSetGlobalConstant(discrim_gvar, True);
67486748

6749-
cx.ccx.discrims.insert(variant.node.id, discrim_gvar);
6750-
cx.ccx.discrim_symbols.insert(variant.node.id, s);
6749+
ccx.discrims.insert(variant.node.id, discrim_gvar);
6750+
ccx.discrim_symbols.insert(variant.node.id, s);
67516751

67526752
i += 1u;
67536753
}
@@ -6757,27 +6757,22 @@ fn trans_constant(&@local_ctxt cx, @ast.item it) -> @local_ctxt {
67576757
// FIXME: The whole expr-translation system needs cloning to deal
67586758
// with consts.
67596759
auto v = C_int(1);
6760-
cx.ccx.item_ids.insert(cid, v);
6761-
auto s = mangle_name_by_type(cx.ccx, cx.path + vec(name),
6762-
node_ann_type(cx.ccx, ann));
6763-
cx.ccx.item_symbols.insert(cid, s);
6760+
ccx.item_ids.insert(cid, v);
6761+
auto s = mangle_name_by_type(ccx, wcx.path + vec(name),
6762+
node_ann_type(ccx, ann));
6763+
ccx.item_symbols.insert(cid, s);
67646764
}
67656765

6766-
case (_) {
6767-
// empty
6768-
}
6766+
case (_) {}
67696767
}
6770-
6771-
ret cx;
67726768
}
67736769

6774-
fn trans_constants(@local_ctxt cx, @ast.crate crate) {
6775-
let fold.ast_fold[@local_ctxt] fld =
6776-
fold.new_identity_fold[@local_ctxt]();
6777-
6778-
fld = @rec(update_env_for_item = bind trans_constant(_,_) with *fld);
6779-
6780-
fold.fold_crate[@local_ctxt](cx, fld, crate);
6770+
fn trans_constants(@crate_ctxt ccx, @ast.crate crate) {
6771+
auto wcx = new_walk_ctxt();
6772+
auto visitor = rec(visit_item_pre = bind trans_constant(ccx, wcx, _),
6773+
visit_item_post = bind leave_item(wcx, _)
6774+
with walk.default_visitor());
6775+
walk.walk_crate(visitor, *crate);
67816776
}
67826777

67836778

@@ -7517,8 +7512,8 @@ fn trans_crate(session.session sess, @ast.crate crate,
75177512
create_typedefs(ccx);
75187513

75197514
collect_items(ccx, crate);
7520-
collect_tag_ctors(cx, crate);
7521-
trans_constants(cx, crate);
7515+
collect_tag_ctors(ccx, crate);
7516+
trans_constants(ccx, crate);
75227517
trans_mod(cx, crate.node.module);
75237518
trans_vec_append_glue(cx);
75247519
auto crate_map = create_crate_map(ccx);

0 commit comments

Comments
 (0)