diff --git a/src/boot/driver/lib.ml b/src/boot/driver/lib.ml index 3b3ee72d700..0d0e93be15e 100644 --- a/src/boot/driver/lib.ml +++ b/src/boot/driver/lib.ml @@ -109,11 +109,11 @@ let get_file_mod (sess:Session.sess) (abi:Abi.abi) (filename:filename) - (nref:node_id ref) - (oref:opaque_id ref) : Ast.mod_items = let dies = get_dies sess filename in let items = Hashtbl.create 0 in + let nref = sess.Session.sess_node_id_counter in + let oref = sess.Session.sess_opaque_id_counter in Dwarf.extract_mod_items nref oref abi items dies; items ;; @@ -123,8 +123,6 @@ let get_mod (abi:Abi.abi) (meta:Ast.meta_pat) (use_id:node_id) - (nref:node_id ref) - (oref:opaque_id ref) (crate_item_cache:(crate_id, Ast.mod_items) Hashtbl.t) : (filename * Ast.mod_items) = let found = Queue.create () in @@ -215,8 +213,8 @@ let get_mod | 1 -> let (filename, crate_id) = Queue.pop found in let items = - htab_search_or_default crate_item_cache crate_id - (fun () -> get_file_mod sess abi filename nref oref) + htab_search_or_default crate_item_cache crate_id + (fun () -> get_file_mod sess abi filename) in (filename, items) | _ -> Common.err (Some use_id) "multiple crates match 'use' clause" diff --git a/src/boot/driver/main.ml b/src/boot/driver/main.ml index e80e7682b7e..3bd5d737f33 100644 --- a/src/boot/driver/main.ml +++ b/src/boot/driver/main.ml @@ -65,6 +65,9 @@ let (sess:Session.sess) = Session.sess_timings = Hashtbl.create 0; Session.sess_lib_dirs = Queue.create (); Session.sess_crate_meta = Hashtbl.create 0; + Session.sess_node_id_counter = ref (Node 0); + Session.sess_opaque_id_counter = ref (Opaque 0); + Session.sess_temp_id_counter = ref (Temp 0); } ;; @@ -101,7 +104,7 @@ let set_default_output_filename (sess:Session.sess) : unit = let dump_sig (filename:filename) : unit = let items = - Lib.get_file_mod sess abi filename (ref (Node 0)) (ref (Opaque 0)) in + Lib.get_file_mod sess abi filename in Printf.fprintf stdout "%s\n" (Fmt.fmt_to_str Ast.fmt_mod_items items); exit_if_failed (); exit 0 diff --git a/src/boot/driver/session.ml b/src/boot/driver/session.ml index 2f81e4f522a..06fcacb2fda 100644 --- a/src/boot/driver/session.ml +++ b/src/boot/driver/session.ml @@ -47,10 +47,15 @@ type sess = mutable sess_report_deps: bool; mutable sess_next_crate_id: int; mutable sess_fuzz_item_count: 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; + + sess_node_id_counter: node_id ref; + sess_opaque_id_counter: opaque_id ref; + sess_temp_id_counter: temp_id ref; } ;; diff --git a/src/boot/fe/cexp.ml b/src/boot/fe/cexp.ml index d856b1310c4..ac05105ea19 100644 --- a/src/boot/fe/cexp.ml +++ b/src/boot/fe/cexp.ml @@ -381,9 +381,6 @@ and eval_cexp (env:env) (exp:cexp) : cdir array = let ps = env.env_ps in let p = make_parser - ps.pstate_temp_id - ps.pstate_node_id - ps.pstate_opaque_id ps.pstate_crate_cache ps.pstate_sess ps.pstate_get_mod @@ -432,12 +429,7 @@ and eval_cexp (env:env) (exp:cexp) : cdir array = end u.use_meta in - ps.pstate_get_mod - meta_pat - id - ps.pstate_node_id - ps.pstate_opaque_id - ps.pstate_crate_cache + ps.pstate_get_mod meta_pat id ps.pstate_crate_cache in iflog ps begin @@ -631,9 +623,6 @@ let parse_crate_file (crate_cache:(crate_id, Ast.mod_items) Hashtbl.t) : Ast.crate = let fname = Session.filename_of sess.Session.sess_in in - let tref = ref (Temp 0) in - let nref = ref (Node 0) in - let oref = ref (Opaque 0) in let required = Hashtbl.create 4 in let required_syms = Hashtbl.create 4 in let files = Hashtbl.create 0 in @@ -670,7 +659,7 @@ let parse_crate_file | Some (PVAL_num n) -> LIT_INT n in let ps = - make_parser tref nref oref crate_cache sess get_mod get_cenv_tok + make_parser crate_cache sess get_mod get_cenv_tok infer_lib_name required required_syms fname in let env = { env_bindings = bindings; @@ -737,9 +726,6 @@ let parse_src_file (crate_cache:(crate_id, Ast.mod_items) Hashtbl.t) : Ast.crate = let fname = Session.filename_of sess.Session.sess_in in - let tref = ref (Temp 0) in - let nref = ref (Node 0) in - let oref = ref (Opaque 0) in let required = Hashtbl.create 0 in let required_syms = Hashtbl.create 0 in let get_cenv_tok ps ident = @@ -747,7 +733,7 @@ let parse_src_file ident) ps) in let ps = - make_parser tref nref oref crate_cache sess get_mod get_cenv_tok + make_parser crate_cache sess get_mod get_cenv_tok infer_lib_name required required_syms fname in with_err_handling sess diff --git a/src/boot/fe/item.ml b/src/boot/fe/item.ml index 00eb8387adf..c747713b4c0 100644 --- a/src/boot/fe/item.ml +++ b/src/boot/fe/item.ml @@ -1202,14 +1202,7 @@ and parse_use let apos = lexpos ps in let bpos = lexpos ps in let id = (span ps apos bpos ()).id in - let (path, items) = - ps.pstate_get_mod - meta - id - ps.pstate_node_id - ps.pstate_opaque_id - ps.pstate_crate_cache - in + let (path, items) = ps.pstate_get_mod meta id ps.pstate_crate_cache in let bpos = lexpos ps in expect ps SEMI; let rlib = diff --git a/src/boot/fe/parser.ml b/src/boot/fe/parser.ml index 883ee01d0ae..3cf464ca7a8 100644 --- a/src/boot/fe/parser.ml +++ b/src/boot/fe/parser.ml @@ -6,10 +6,8 @@ open Token;; type get_mod_fn = (Ast.meta_pat -> node_id - -> (node_id ref) - -> (opaque_id ref) - -> (crate_id, Ast.mod_items) Hashtbl.t - -> (filename * Ast.mod_items)) + -> (crate_id, Ast.mod_items) Hashtbl.t + -> (filename * Ast.mod_items)) ;; type pstate = @@ -20,9 +18,6 @@ type pstate = pstate_lexbuf : Lexing.lexbuf; pstate_file : filename; pstate_sess : Session.sess; - pstate_temp_id : temp_id ref; - pstate_node_id : node_id ref; - pstate_opaque_id : opaque_id ref; pstate_crate_cache : (crate_id, Ast.mod_items) Hashtbl.t; pstate_get_mod : get_mod_fn; pstate_get_cenv_tok : pstate -> Ast.ident -> token; @@ -43,9 +38,6 @@ let iflog ps thunk = ;; let make_parser - (tref:temp_id ref) - (nref:node_id ref) - (oref:opaque_id ref) (crate_cache:(crate_id, Ast.mod_items) Hashtbl.t) (sess:Session.sess) (get_mod:get_mod_fn) @@ -69,9 +61,6 @@ let make_parser pstate_lexbuf = lexbuf; pstate_file = fname; pstate_sess = sess; - pstate_temp_id = tref; - pstate_node_id = nref; - pstate_opaque_id = oref; pstate_crate_cache = crate_cache; pstate_get_mod = get_mod; pstate_get_cenv_tok = get_cenv_tok; @@ -94,14 +83,16 @@ let lexpos (ps:pstate) : pos = ;; let next_node_id (ps:pstate) : node_id = - let id = !(ps.pstate_node_id) in - ps.pstate_node_id := Node ((int_of_node id)+1); + let r = ps.pstate_sess.Session.sess_node_id_counter in + let id = !r in + r := Node ((int_of_node id)+1); id ;; let next_opaque_id (ps:pstate) : opaque_id = - let id = !(ps.pstate_opaque_id) in - ps.pstate_opaque_id := Opaque ((int_of_opaque id)+1); + let r = ps.pstate_sess.Session.sess_opaque_id_counter in + let id = !r in + r := Opaque ((int_of_opaque id)+1); id ;; @@ -203,14 +194,15 @@ let build_tmp (apos:pos) (bpos:pos) : (temp_id * Ast.lval * Ast.stmt) = - let nonce = !(ps.pstate_temp_id) in - ps.pstate_temp_id := Temp ((int_of_temp nonce)+1); + let r = ps.pstate_sess.Session.sess_temp_id_counter in + let id = !r in + r := Temp ((int_of_temp id)+1); iflog ps - (fun _ -> log ps "building temporary %d" (int_of_temp nonce)); - let decl = Ast.DECL_slot (Ast.KEY_temp nonce, (span ps apos bpos slot)) in + (fun _ -> log ps "building temporary %d" (int_of_temp id)); + let decl = Ast.DECL_slot (Ast.KEY_temp id, (span ps apos bpos slot)) in let declstmt = span ps apos bpos (Ast.STMT_decl decl) in - let tmp = Ast.LVAL_base (span ps apos bpos (Ast.BASE_temp nonce)) in - (nonce, tmp, declstmt) + let tmp = Ast.LVAL_base (span ps apos bpos (Ast.BASE_temp id)) in + (id, tmp, declstmt) ;; (* Simple helpers *)