Move id counters into sess in preparation for moving desugaring to middle-end.
This commit is contained in:
parent
5536af3d48
commit
7ab3b305e4
6 changed files with 32 additions and 55 deletions
|
@ -109,11 +109,11 @@ let get_file_mod
|
||||||
(sess:Session.sess)
|
(sess:Session.sess)
|
||||||
(abi:Abi.abi)
|
(abi:Abi.abi)
|
||||||
(filename:filename)
|
(filename:filename)
|
||||||
(nref:node_id ref)
|
|
||||||
(oref:opaque_id ref)
|
|
||||||
: Ast.mod_items =
|
: Ast.mod_items =
|
||||||
let dies = get_dies sess filename in
|
let dies = get_dies sess filename in
|
||||||
let items = Hashtbl.create 0 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;
|
Dwarf.extract_mod_items nref oref abi items dies;
|
||||||
items
|
items
|
||||||
;;
|
;;
|
||||||
|
@ -123,8 +123,6 @@ let get_mod
|
||||||
(abi:Abi.abi)
|
(abi:Abi.abi)
|
||||||
(meta:Ast.meta_pat)
|
(meta:Ast.meta_pat)
|
||||||
(use_id:node_id)
|
(use_id:node_id)
|
||||||
(nref:node_id ref)
|
|
||||||
(oref:opaque_id ref)
|
|
||||||
(crate_item_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
(crate_item_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
||||||
: (filename * Ast.mod_items) =
|
: (filename * Ast.mod_items) =
|
||||||
let found = Queue.create () in
|
let found = Queue.create () in
|
||||||
|
@ -215,8 +213,8 @@ let get_mod
|
||||||
| 1 ->
|
| 1 ->
|
||||||
let (filename, crate_id) = Queue.pop found in
|
let (filename, crate_id) = Queue.pop found in
|
||||||
let items =
|
let items =
|
||||||
htab_search_or_default crate_item_cache crate_id
|
htab_search_or_default crate_item_cache crate_id
|
||||||
(fun () -> get_file_mod sess abi filename nref oref)
|
(fun () -> get_file_mod sess abi filename)
|
||||||
in
|
in
|
||||||
(filename, items)
|
(filename, items)
|
||||||
| _ -> Common.err (Some use_id) "multiple crates match 'use' clause"
|
| _ -> Common.err (Some use_id) "multiple crates match 'use' clause"
|
||||||
|
|
|
@ -65,6 +65,9 @@ let (sess:Session.sess) =
|
||||||
Session.sess_timings = Hashtbl.create 0;
|
Session.sess_timings = Hashtbl.create 0;
|
||||||
Session.sess_lib_dirs = Queue.create ();
|
Session.sess_lib_dirs = Queue.create ();
|
||||||
Session.sess_crate_meta = Hashtbl.create 0;
|
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 dump_sig (filename:filename) : unit =
|
||||||
let items =
|
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);
|
Printf.fprintf stdout "%s\n" (Fmt.fmt_to_str Ast.fmt_mod_items items);
|
||||||
exit_if_failed ();
|
exit_if_failed ();
|
||||||
exit 0
|
exit 0
|
||||||
|
|
|
@ -47,10 +47,15 @@ type sess =
|
||||||
mutable sess_report_deps: bool;
|
mutable sess_report_deps: bool;
|
||||||
mutable sess_next_crate_id: int;
|
mutable sess_next_crate_id: int;
|
||||||
mutable sess_fuzz_item_count: int;
|
mutable sess_fuzz_item_count: int;
|
||||||
|
|
||||||
sess_timings: (string, float) Hashtbl.t;
|
sess_timings: (string, float) Hashtbl.t;
|
||||||
sess_spans: (node_id,span) Hashtbl.t;
|
sess_spans: (node_id,span) Hashtbl.t;
|
||||||
sess_lib_dirs: filename Queue.t;
|
sess_lib_dirs: filename Queue.t;
|
||||||
sess_crate_meta: (meta, crate_id) Hashtbl.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;
|
||||||
}
|
}
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
|
|
@ -381,9 +381,6 @@ and eval_cexp (env:env) (exp:cexp) : cdir array =
|
||||||
let ps = env.env_ps in
|
let ps = env.env_ps in
|
||||||
let p =
|
let p =
|
||||||
make_parser
|
make_parser
|
||||||
ps.pstate_temp_id
|
|
||||||
ps.pstate_node_id
|
|
||||||
ps.pstate_opaque_id
|
|
||||||
ps.pstate_crate_cache
|
ps.pstate_crate_cache
|
||||||
ps.pstate_sess
|
ps.pstate_sess
|
||||||
ps.pstate_get_mod
|
ps.pstate_get_mod
|
||||||
|
@ -432,12 +429,7 @@ and eval_cexp (env:env) (exp:cexp) : cdir array =
|
||||||
end
|
end
|
||||||
u.use_meta
|
u.use_meta
|
||||||
in
|
in
|
||||||
ps.pstate_get_mod
|
ps.pstate_get_mod meta_pat id ps.pstate_crate_cache
|
||||||
meta_pat
|
|
||||||
id
|
|
||||||
ps.pstate_node_id
|
|
||||||
ps.pstate_opaque_id
|
|
||||||
ps.pstate_crate_cache
|
|
||||||
in
|
in
|
||||||
iflog ps
|
iflog ps
|
||||||
begin
|
begin
|
||||||
|
@ -631,9 +623,6 @@ let parse_crate_file
|
||||||
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
||||||
: Ast.crate =
|
: Ast.crate =
|
||||||
let fname = Session.filename_of sess.Session.sess_in in
|
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 = Hashtbl.create 4 in
|
||||||
let required_syms = Hashtbl.create 4 in
|
let required_syms = Hashtbl.create 4 in
|
||||||
let files = Hashtbl.create 0 in
|
let files = Hashtbl.create 0 in
|
||||||
|
@ -670,7 +659,7 @@ let parse_crate_file
|
||||||
| Some (PVAL_num n) -> LIT_INT n
|
| Some (PVAL_num n) -> LIT_INT n
|
||||||
in
|
in
|
||||||
let ps =
|
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
|
infer_lib_name required required_syms fname
|
||||||
in
|
in
|
||||||
let env = { env_bindings = bindings;
|
let env = { env_bindings = bindings;
|
||||||
|
@ -737,9 +726,6 @@ let parse_src_file
|
||||||
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
||||||
: Ast.crate =
|
: Ast.crate =
|
||||||
let fname = Session.filename_of sess.Session.sess_in in
|
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 = Hashtbl.create 0 in
|
||||||
let required_syms = Hashtbl.create 0 in
|
let required_syms = Hashtbl.create 0 in
|
||||||
let get_cenv_tok ps ident =
|
let get_cenv_tok ps ident =
|
||||||
|
@ -747,7 +733,7 @@ let parse_src_file
|
||||||
ident) ps)
|
ident) ps)
|
||||||
in
|
in
|
||||||
let ps =
|
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
|
infer_lib_name required required_syms fname
|
||||||
in
|
in
|
||||||
with_err_handling sess
|
with_err_handling sess
|
||||||
|
|
|
@ -1202,14 +1202,7 @@ and parse_use
|
||||||
let apos = lexpos ps in
|
let apos = lexpos ps in
|
||||||
let bpos = lexpos ps in
|
let bpos = lexpos ps in
|
||||||
let id = (span ps apos bpos ()).id in
|
let id = (span ps apos bpos ()).id in
|
||||||
let (path, items) =
|
let (path, items) = ps.pstate_get_mod meta id ps.pstate_crate_cache in
|
||||||
ps.pstate_get_mod
|
|
||||||
meta
|
|
||||||
id
|
|
||||||
ps.pstate_node_id
|
|
||||||
ps.pstate_opaque_id
|
|
||||||
ps.pstate_crate_cache
|
|
||||||
in
|
|
||||||
let bpos = lexpos ps in
|
let bpos = lexpos ps in
|
||||||
expect ps SEMI;
|
expect ps SEMI;
|
||||||
let rlib =
|
let rlib =
|
||||||
|
|
|
@ -6,10 +6,8 @@ open Token;;
|
||||||
|
|
||||||
type get_mod_fn = (Ast.meta_pat
|
type get_mod_fn = (Ast.meta_pat
|
||||||
-> node_id
|
-> node_id
|
||||||
-> (node_id ref)
|
-> (crate_id, Ast.mod_items) Hashtbl.t
|
||||||
-> (opaque_id ref)
|
-> (filename * Ast.mod_items))
|
||||||
-> (crate_id, Ast.mod_items) Hashtbl.t
|
|
||||||
-> (filename * Ast.mod_items))
|
|
||||||
;;
|
;;
|
||||||
|
|
||||||
type pstate =
|
type pstate =
|
||||||
|
@ -20,9 +18,6 @@ type pstate =
|
||||||
pstate_lexbuf : Lexing.lexbuf;
|
pstate_lexbuf : Lexing.lexbuf;
|
||||||
pstate_file : filename;
|
pstate_file : filename;
|
||||||
pstate_sess : Session.sess;
|
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_crate_cache : (crate_id, Ast.mod_items) Hashtbl.t;
|
||||||
pstate_get_mod : get_mod_fn;
|
pstate_get_mod : get_mod_fn;
|
||||||
pstate_get_cenv_tok : pstate -> Ast.ident -> token;
|
pstate_get_cenv_tok : pstate -> Ast.ident -> token;
|
||||||
|
@ -43,9 +38,6 @@ let iflog ps thunk =
|
||||||
;;
|
;;
|
||||||
|
|
||||||
let make_parser
|
let make_parser
|
||||||
(tref:temp_id ref)
|
|
||||||
(nref:node_id ref)
|
|
||||||
(oref:opaque_id ref)
|
|
||||||
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
|
||||||
(sess:Session.sess)
|
(sess:Session.sess)
|
||||||
(get_mod:get_mod_fn)
|
(get_mod:get_mod_fn)
|
||||||
|
@ -69,9 +61,6 @@ let make_parser
|
||||||
pstate_lexbuf = lexbuf;
|
pstate_lexbuf = lexbuf;
|
||||||
pstate_file = fname;
|
pstate_file = fname;
|
||||||
pstate_sess = sess;
|
pstate_sess = sess;
|
||||||
pstate_temp_id = tref;
|
|
||||||
pstate_node_id = nref;
|
|
||||||
pstate_opaque_id = oref;
|
|
||||||
pstate_crate_cache = crate_cache;
|
pstate_crate_cache = crate_cache;
|
||||||
pstate_get_mod = get_mod;
|
pstate_get_mod = get_mod;
|
||||||
pstate_get_cenv_tok = get_cenv_tok;
|
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 next_node_id (ps:pstate) : node_id =
|
||||||
let id = !(ps.pstate_node_id) in
|
let r = ps.pstate_sess.Session.sess_node_id_counter in
|
||||||
ps.pstate_node_id := Node ((int_of_node id)+1);
|
let id = !r in
|
||||||
|
r := Node ((int_of_node id)+1);
|
||||||
id
|
id
|
||||||
;;
|
;;
|
||||||
|
|
||||||
let next_opaque_id (ps:pstate) : opaque_id =
|
let next_opaque_id (ps:pstate) : opaque_id =
|
||||||
let id = !(ps.pstate_opaque_id) in
|
let r = ps.pstate_sess.Session.sess_opaque_id_counter in
|
||||||
ps.pstate_opaque_id := Opaque ((int_of_opaque id)+1);
|
let id = !r in
|
||||||
|
r := Opaque ((int_of_opaque id)+1);
|
||||||
id
|
id
|
||||||
;;
|
;;
|
||||||
|
|
||||||
|
@ -203,14 +194,15 @@ let build_tmp
|
||||||
(apos:pos)
|
(apos:pos)
|
||||||
(bpos:pos)
|
(bpos:pos)
|
||||||
: (temp_id * Ast.lval * Ast.stmt) =
|
: (temp_id * Ast.lval * Ast.stmt) =
|
||||||
let nonce = !(ps.pstate_temp_id) in
|
let r = ps.pstate_sess.Session.sess_temp_id_counter in
|
||||||
ps.pstate_temp_id := Temp ((int_of_temp nonce)+1);
|
let id = !r in
|
||||||
|
r := Temp ((int_of_temp id)+1);
|
||||||
iflog ps
|
iflog ps
|
||||||
(fun _ -> log ps "building temporary %d" (int_of_temp nonce));
|
(fun _ -> log ps "building temporary %d" (int_of_temp id));
|
||||||
let decl = Ast.DECL_slot (Ast.KEY_temp nonce, (span ps apos bpos slot)) in
|
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 declstmt = span ps apos bpos (Ast.STMT_decl decl) in
|
||||||
let tmp = Ast.LVAL_base (span ps apos bpos (Ast.BASE_temp nonce)) in
|
let tmp = Ast.LVAL_base (span ps apos bpos (Ast.BASE_temp id)) in
|
||||||
(nonce, tmp, declstmt)
|
(id, tmp, declstmt)
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(* Simple helpers *)
|
(* Simple helpers *)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue