about summary refs log tree commit diff
path: root/src/comp
diff options
context:
space:
mode:
authorBrian Anderson <banderson@mozilla.com>2011-12-08 20:33:31 -0800
committerBrian Anderson <banderson@mozilla.com>2011-12-08 20:33:31 -0800
commit6156295a4c0ed42f1f383aff3aa6cc65fe1e1f30 (patch)
treeac8f43074f19edf452103837aa57d811d4c0f477 /src/comp
parentfd81fb6a2418d3cbef5244662573e2b61d5f66a7 (diff)
downloadrust-6156295a4c0ed42f1f383aff3aa6cc65fe1e1f30.tar.gz
rust-6156295a4c0ed42f1f383aff3aa6cc65fe1e1f30.zip
rustc: Move linking into compile_input
Diffstat (limited to 'src/comp')
-rw-r--r--src/comp/driver/rustc.rs36
1 files changed, 20 insertions, 16 deletions
diff --git a/src/comp/driver/rustc.rs b/src/comp/driver/rustc.rs
index e00c16425f2..a32e9537187 100644
--- a/src/comp/driver/rustc.rs
+++ b/src/comp/driver/rustc.rs
@@ -131,11 +131,13 @@ fn inject_libcore_reference(sess: session::session,
 
 
 fn compile_input(sess: session::session, cfg: ast::crate_cfg, input: str,
-                 output: str) {
+                 output: option::t<str>) {
+
     let time_passes = sess.get_opts().time_passes;
     let crate =
         time(time_passes, "parsing", bind parse_input(sess, cfg, input));
     if sess.get_opts().parse_only { ret; }
+
     crate =
         time(time_passes, "configuration",
              bind front::config::strip_unconfigured_items(crate));
@@ -186,12 +188,26 @@ fn compile_input(sess: session::session, cfg: ast::crate_cfg, input: str,
     time(time_passes, "kind checking",
          bind kind::check_crate(ty_cx, last_uses, crate));
     if sess.get_opts().no_trans { ret; }
+
+    let outputs = build_output_filenames(input, output, sess);
+
     let llmod =
         time(time_passes, "translation",
-             bind trans::trans_crate(sess, crate, ty_cx, output, ast_map,
+             bind trans::trans_crate(sess, crate, ty_cx,
+                                     outputs.obj_filename, ast_map,
                                      mut_map, copy_map, last_uses));
     time(time_passes, "LLVM passes",
-         bind link::write::run_passes(sess, llmod, output));
+         bind link::write::run_passes(sess, llmod, outputs.obj_filename));
+
+    let stop_after_codegen =
+        sess.get_opts().output_type != link::output_type_exe ||
+            sess.get_opts().static && sess.building_library();
+
+    if stop_after_codegen { ret; }
+
+    time(time_passes, "Linking",
+         bind link::link_binary(sess, outputs.obj_filename,
+                                outputs.out_filename));
 }
 
 fn pretty_print_input(sess: session::session, cfg: ast::crate_cfg, input: str,
@@ -604,19 +620,7 @@ fn main(args: [str]) {
         ret;
     }
 
-    let outputs = build_output_filenames(ifile, ofile, sess);
-
-    let stop_after_codegen =
-        sopts.output_type != link::output_type_exe ||
-            sopts.static && sess.building_library();
-
-    let temp_filename = outputs.obj_filename;
-
-    compile_input(sess, cfg, ifile, temp_filename);
-
-    if stop_after_codegen { ret; }
-
-    link::link_binary(sess, temp_filename, outputs.out_filename);
+    compile_input(sess, cfg, ifile, ofile);
 }
 
 #[cfg(test)]