about summary refs log tree commit diff
path: root/src/comp/front
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2012-01-26 15:20:29 -0800
committerBrian Anderson <banderson@mozilla.com>2012-01-26 16:23:48 -0800
commit5610205363eb56b2fd7ce6daeaa3b20a659398a5 (patch)
treef23c090f818a34e744807d563b69b2b9ec5b9be7 /src/comp/front
parent335302f08dbdffd218cbc9fcbfb650cfa273889b (diff)
downloadrust-5610205363eb56b2fd7ce6daeaa3b20a659398a5.tar.gz
rust-5610205363eb56b2fd7ce6daeaa3b20a659398a5.zip
rustc: Move core injection to its own module
Diffstat (limited to 'src/comp/front')
-rw-r--r--src/comp/front/core_inject.rs35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/comp/front/core_inject.rs b/src/comp/front/core_inject.rs
new file mode 100644
index 00000000000..8e88bd50068
--- /dev/null
+++ b/src/comp/front/core_inject.rs
@@ -0,0 +1,35 @@
+import driver::session::session;
+import syntax::ast;
+import syntax::codemap;
+
+export maybe_inject_libcore_ref;
+
+fn maybe_inject_libcore_ref(sess: session,
+                            crate: @ast::crate) -> @ast::crate {
+    if sess.opts.libcore {
+        inject_libcore_ref(sess, crate)
+    } else {
+        crate
+    }
+}
+
+fn inject_libcore_ref(sess: session,
+                      crate: @ast::crate) -> @ast::crate {
+
+    fn spanned<T: copy>(x: T) -> @ast::spanned<T> {
+        ret @{node: x,
+              span: {lo: 0u, hi: 0u,
+                     expanded_from: codemap::os_none}};
+    }
+
+    let n1 = sess.next_node_id();
+    let n2 = sess.next_node_id();
+
+    let vi1 = spanned(ast::view_item_use("core", [], n1));
+    let vi2 = spanned(ast::view_item_import_glob(@["core"], n2));
+
+    let vis = [vi1, vi2] + crate.node.module.view_items;
+
+    ret @{node: {module: { view_items: vis with crate.node.module }
+                 with crate.node} with *crate }
+}