]> git.lizzy.rs Git - rust.git/commitdiff
Time type checking passes separately
authorSeo Sanghyeon <sanxiyn@gmail.com>
Thu, 21 Mar 2013 10:28:58 +0000 (19:28 +0900)
committerSeo Sanghyeon <sanxiyn@gmail.com>
Thu, 21 Mar 2013 10:28:58 +0000 (19:28 +0900)
src/librustc/driver/driver.rs
src/librustc/middle/typeck/mod.rs

index 79faf3c516ad5db263ed624fa946e4cd7c54c199..37f9bc7dd6f5400999b549caa88f3755548380b6 100644 (file)
@@ -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", ||
index ed1a3d33f4cc1185b5acedd67972b5eac8bdcfa7..1787c733ed54b804ca7128913d20e89080b0d28b 100644 (file)
@@ -53,6 +53,7 @@
 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)