Skip to content

Commit b7a418e

Browse files
committed
rustc: Conditionally compile view items. #2357
1 parent 3b399af commit b7a418e

File tree

2 files changed

+34
-6
lines changed

2 files changed

+34
-6
lines changed

src/rustc/front/config.rs

+24-6
Original file line numberDiff line numberDiff line change
@@ -39,11 +39,22 @@ fn filter_item(cx: ctxt, &&item: @ast::item) ->
3939
if item_in_cfg(cx, item) { option::some(item) } else { option::none }
4040
}
4141

42+
fn filter_view_item(cx: ctxt, &&view_item: @ast::view_item
43+
)-> option<@ast::view_item> {
44+
if view_item_in_cfg(cx, view_item) {
45+
option::some(view_item)
46+
} else {
47+
option::none
48+
}
49+
}
50+
4251
fn fold_mod(cx: ctxt, m: ast::_mod, fld: fold::ast_fold) ->
4352
ast::_mod {
44-
let filter = |a| filter_item(cx, a);
45-
let filtered_items = vec::filter_map(m.items, filter);
46-
ret {view_items: vec::map(m.view_items, fld.fold_view_item),
53+
let item_filter = |a| filter_item(cx, a);
54+
let filtered_items = vec::filter_map(m.items, item_filter);
55+
let view_item_filter = |a| filter_view_item(cx, a);
56+
let filtered_view_items = vec::filter_map(m.view_items, view_item_filter);
57+
ret {view_items: vec::map(filtered_view_items, fld.fold_view_item),
4758
items: vec::map(filtered_items, fld.fold_item)};
4859
}
4960

@@ -56,9 +67,12 @@ fn filter_foreign_item(cx: ctxt, &&item: @ast::foreign_item) ->
5667

5768
fn fold_foreign_mod(cx: ctxt, nm: ast::foreign_mod,
5869
fld: fold::ast_fold) -> ast::foreign_mod {
59-
let filter = |a| filter_foreign_item(cx, a);
60-
let filtered_items = vec::filter_map(nm.items, filter);
61-
ret {view_items: vec::map(nm.view_items, fld.fold_view_item),
70+
let item_filter = |a| filter_foreign_item(cx, a);
71+
let filtered_items = vec::filter_map(nm.items, item_filter);
72+
let view_item_filter = |a| filter_view_item(cx, a);
73+
let filtered_view_items = vec::filter_map(
74+
nm.view_items, view_item_filter);
75+
ret {view_items: vec::map(filtered_view_items, fld.fold_view_item),
6276
items: filtered_items};
6377
}
6478

@@ -98,6 +112,10 @@ fn foreign_item_in_cfg(cx: ctxt, item: @ast::foreign_item) -> bool {
98112
ret cx.in_cfg(item.attrs);
99113
}
100114

115+
fn view_item_in_cfg(cx: ctxt, item: @ast::view_item) -> bool {
116+
ret cx.in_cfg(item.attrs);
117+
}
118+
101119
// Determine if an item should be translated in the current crate
102120
// configuration based on the item's attributes
103121
fn in_cfg(cfg: ast::crate_cfg, attrs: ~[ast::attribute]) -> bool {

src/test/run-pass/conditional-compile.rs

+10
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,13 @@ mod test_foreign_items {
8787
fn vec_from_buf_shared();
8888
}
8989
}
90+
91+
mod test_use_statements {
92+
#[cfg(bogus)]
93+
use flippity_foo;
94+
95+
extern mod rustrt {
96+
#[cfg(bogus)]
97+
use flippity_foo;
98+
}
99+
}

0 commit comments

Comments
 (0)