rust/src/librustc/front/core_inject.rs

60 lines
1.8 KiB
Rust
Raw Normal View History

// Copyright 2012 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.
use driver::session::Session;
2012-09-04 13:54:36 -05:00
use syntax::codemap;
use syntax::ast;
use syntax::ast_util::*;
use syntax::attr;
export maybe_inject_libcore_ref;
fn maybe_inject_libcore_ref(sess: Session,
crate: @ast::crate) -> @ast::crate {
if use_core(crate) {
inject_libcore_ref(sess, crate)
} else {
crate
}
}
fn use_core(crate: @ast::crate) -> bool {
!attr::attrs_contains_name(crate.node.attrs, ~"no_core")
}
fn inject_libcore_ref(sess: Session,
crate: @ast::crate) -> @ast::crate {
fn spanned<T: Copy>(x: T) -> @ast::spanned<T> {
2012-08-01 19:30:05 -05:00
return @{node: x,
span: dummy_sp()};
}
let n1 = sess.next_node_id();
let n2 = sess.next_node_id();
2012-07-18 18:18:02 -05:00
let vi1 = @{node: ast::view_item_use(sess.ident_of(~"core"), ~[], n1),
attrs: ~[],
vis: ast::private,
span: dummy_sp()};
2012-07-18 18:18:02 -05:00
let vp = spanned(ast::view_path_glob(
ident_to_path(dummy_sp(), sess.ident_of(~"core")),
n2));
let vi2 = @{node: ast::view_item_import(~[vp]),
attrs: ~[],
vis: ast::private,
span: dummy_sp()};
let vis = vec::append(~[vi1, vi2], crate.node.module.view_items);
2012-09-04 15:29:32 -05:00
return @{node: {module: { view_items: vis,.. crate.node.module },
.. crate.node},.. *crate }
}