about summary refs log tree commit diff
path: root/src/boot/driver
diff options
context:
space:
mode:
authorPatrick Walton <pcwalton@mimiga.net>2010-09-07 16:35:00 -0700
committerPatrick Walton <pcwalton@mimiga.net>2010-09-07 16:35:21 -0700
commitffdb5fc8582c77eef7b3a30859eaa216872525a4 (patch)
treef43afee8d7fcbad87aac197bc774b11e440edfad /src/boot/driver
parentca1475382e592176884187877a80900578bcf72b (diff)
downloadrust-ffdb5fc8582c77eef7b3a30859eaa216872525a4.tar.gz
rust-ffdb5fc8582c77eef7b3a30859eaa216872525a4.zip
Initial support for a global crate metadata cache
Diffstat (limited to 'src/boot/driver')
-rw-r--r--src/boot/driver/lib.ml6
-rw-r--r--src/boot/driver/main.ml2
-rw-r--r--src/boot/driver/session.ml10
3 files changed, 17 insertions, 1 deletions
diff --git a/src/boot/driver/lib.ml b/src/boot/driver/lib.ml
index 71b310b0bc2..40d79256754 100644
--- a/src/boot/driver/lib.ml
+++ b/src/boot/driver/lib.ml
@@ -59,7 +59,7 @@ let get_sects
 let get_meta
     (sess:Session.sess)
     (filename:filename)
-    : Ast.meta option =
+    : Session.meta option =
   htab_search_or_add meta_cache filename
     begin
       fun _ ->
@@ -190,6 +190,10 @@ let get_mod
                           match get_meta sess file with
                               None -> ()
                             | Some meta ->
+                                if not (Hashtbl.mem
+                                    sess.Session.sess_crate_meta meta) then
+                                  Hashtbl.add sess.Session.sess_crate_meta
+                                    meta (Session.make_crate_id sess);
                                 Array.iter
                                   (fun (k,v) -> log sess "%s = %S" k v)
                                   meta;
diff --git a/src/boot/driver/main.ml b/src/boot/driver/main.ml
index 9049546cca7..199a372954d 100644
--- a/src/boot/driver/main.ml
+++ b/src/boot/driver/main.ml
@@ -58,8 +58,10 @@ let (sess:Session.sess) =
     Session.sess_report_timing = false;
     Session.sess_report_gc = false;
     Session.sess_report_deps = false;
+    Session.sess_next_crate_id = 0;
     Session.sess_timings = Hashtbl.create 0;
     Session.sess_lib_dirs = Queue.create ();
+    Session.sess_crate_meta = Hashtbl.create 0;
   }
 ;;
 
diff --git a/src/boot/driver/session.ml b/src/boot/driver/session.ml
index 21faed0b744..ce5a18fb9f0 100644
--- a/src/boot/driver/session.ml
+++ b/src/boot/driver/session.ml
@@ -5,6 +5,8 @@
 
 open Common;;
 
+type meta = (string * string) array;;
+
 type sess =
 {
   mutable sess_in: filename option;
@@ -41,9 +43,11 @@ type sess =
   mutable sess_report_timing: bool;
   mutable sess_report_gc: bool;
   mutable sess_report_deps: bool;
+  mutable sess_next_crate_id: int;
   sess_timings: (string, float) Hashtbl.t;
   sess_spans: (node_id,span) Hashtbl.t;
   sess_lib_dirs: filename Queue.t;
+  sess_crate_meta: (meta, crate_id) Hashtbl.t;
 }
 ;;
 
@@ -115,6 +119,12 @@ let report_err sess ido str =
             (string_of_span span) str
 ;;
 
+let make_crate_id (sess:sess) : crate_id =
+  let crate_id = Crate sess.sess_next_crate_id in
+  sess.sess_next_crate_id <- sess.sess_next_crate_id + 1;
+  crate_id
+;;
+
 (*
  * Local Variables:
  * fill-column: 78;