about summary refs log tree commit diff
diff options
context:
space:
mode:
authorSeo Sanghyeon <sanxiyn@gmail.com>2013-03-21 19:28:58 +0900
committerSeo Sanghyeon <sanxiyn@gmail.com>2013-03-21 19:28:58 +0900
commitdad5c3029dd6a3e2d40f5b983c5ceab9a79c4287 (patch)
treea6f20509f461682faabf13e826ca2cc2902e5dbb
parent64d923f7ddf467e5dfa1999329362c42c892bf3d (diff)
downloadrust-dad5c3029dd6a3e2d40f5b983c5ceab9a79c4287.tar.gz
rust-dad5c3029dd6a3e2d40f5b983c5ceab9a79c4287.zip
Time type checking passes separately
-rw-r--r--src/librustc/driver/driver.rs8
-rw-r--r--src/librustc/middle/typeck/mod.rs14
2 files changed, 14 insertions, 8 deletions
diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs
index 79faf3c516a..37f9bc7dd6f 100644
--- a/src/librustc/driver/driver.rs
+++ b/src/librustc/driver/driver.rs
@@ -244,11 +244,9 @@ pub fn compile_rest(sess: Session, cfg: ast::crate_cfg,
         let ty_cx = ty::mk_ctxt(sess, def_map, ast_map, freevars,
                                 region_map, rp_set, lang_items, crate);
 
-        let (method_map, vtable_map) =
-            time(time_passes, ~"typechecking", ||
-                 typeck::check_crate(ty_cx,
-                                     trait_map,
-                                     crate));
+        // passes are timed inside typeck
+        let (method_map, vtable_map) = typeck::check_crate(
+            ty_cx, trait_map, crate);
 
         // These next two const passes can probably be merged
         time(time_passes, ~"const marking", ||
diff --git a/src/librustc/middle/typeck/mod.rs b/src/librustc/middle/typeck/mod.rs
index ed1a3d33f4c..1787c733ed5 100644
--- a/src/librustc/middle/typeck/mod.rs
+++ b/src/librustc/middle/typeck/mod.rs
@@ -53,6 +53,7 @@ use core::prelude::*;
 use middle::resolve;
 use middle::ty::{ty_param_substs_and_ty, vstore_uniq};
 use middle::ty;
+use util::common::time;
 use util::ppaux;
 
 use core::result;
@@ -329,6 +330,7 @@ pub fn check_crate(tcx: ty::ctxt,
                    trait_map: resolve::TraitMap,
                    crate: @ast::crate)
                 -> (method_map, vtable_map) {
+    let time_passes = tcx.sess.time_passes();
     let ccx = @mut CrateCtxt {
         trait_map: trait_map,
         method_map: oldmap::HashMap(),
@@ -336,10 +338,16 @@ pub fn check_crate(tcx: ty::ctxt,
         coherence_info: @coherence::CoherenceInfo(),
         tcx: tcx
     };
-    collect::collect_item_types(ccx, crate);
-    coherence::check_coherence(ccx, crate);
 
-    check::check_item_types(ccx, crate);
+    time(time_passes, ~"type collecting", ||
+        collect::collect_item_types(ccx, crate));
+
+    time(time_passes, ~"method resolution", ||
+        coherence::check_coherence(ccx, crate));
+
+    time(time_passes, ~"type checking", ||
+        check::check_item_types(ccx, crate));
+
     check_for_main_fn(ccx);
     tcx.sess.abort_if_errors();
     (ccx.method_map, ccx.vtable_map)