Skip to content

Commit 7ab3b30

Browse files
committed
Move id counters into sess in preparation for moving desugaring to middle-end.
1 parent 5536af3 commit 7ab3b30

File tree

6 files changed

+32
-55
lines changed

6 files changed

+32
-55
lines changed

src/boot/driver/lib.ml

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,11 +109,11 @@ let get_file_mod
109109
(sess:Session.sess)
110110
(abi:Abi.abi)
111111
(filename:filename)
112-
(nref:node_id ref)
113-
(oref:opaque_id ref)
114112
: Ast.mod_items =
115113
let dies = get_dies sess filename in
116114
let items = Hashtbl.create 0 in
115+
let nref = sess.Session.sess_node_id_counter in
116+
let oref = sess.Session.sess_opaque_id_counter in
117117
Dwarf.extract_mod_items nref oref abi items dies;
118118
items
119119
;;
@@ -123,8 +123,6 @@ let get_mod
123123
(abi:Abi.abi)
124124
(meta:Ast.meta_pat)
125125
(use_id:node_id)
126-
(nref:node_id ref)
127-
(oref:opaque_id ref)
128126
(crate_item_cache:(crate_id, Ast.mod_items) Hashtbl.t)
129127
: (filename * Ast.mod_items) =
130128
let found = Queue.create () in
@@ -215,8 +213,8 @@ let get_mod
215213
| 1 ->
216214
let (filename, crate_id) = Queue.pop found in
217215
let items =
218-
htab_search_or_default crate_item_cache crate_id
219-
(fun () -> get_file_mod sess abi filename nref oref)
216+
htab_search_or_default crate_item_cache crate_id
217+
(fun () -> get_file_mod sess abi filename)
220218
in
221219
(filename, items)
222220
| _ -> Common.err (Some use_id) "multiple crates match 'use' clause"

src/boot/driver/main.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ let (sess:Session.sess) =
6565
Session.sess_timings = Hashtbl.create 0;
6666
Session.sess_lib_dirs = Queue.create ();
6767
Session.sess_crate_meta = Hashtbl.create 0;
68+
Session.sess_node_id_counter = ref (Node 0);
69+
Session.sess_opaque_id_counter = ref (Opaque 0);
70+
Session.sess_temp_id_counter = ref (Temp 0);
6871
}
6972
;;
7073

@@ -101,7 +104,7 @@ let set_default_output_filename (sess:Session.sess) : unit =
101104

102105
let dump_sig (filename:filename) : unit =
103106
let items =
104-
Lib.get_file_mod sess abi filename (ref (Node 0)) (ref (Opaque 0)) in
107+
Lib.get_file_mod sess abi filename in
105108
Printf.fprintf stdout "%s\n" (Fmt.fmt_to_str Ast.fmt_mod_items items);
106109
exit_if_failed ();
107110
exit 0

src/boot/driver/session.ml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,15 @@ type sess =
4747
mutable sess_report_deps: bool;
4848
mutable sess_next_crate_id: int;
4949
mutable sess_fuzz_item_count: int;
50+
5051
sess_timings: (string, float) Hashtbl.t;
5152
sess_spans: (node_id,span) Hashtbl.t;
5253
sess_lib_dirs: filename Queue.t;
5354
sess_crate_meta: (meta, crate_id) Hashtbl.t;
55+
56+
sess_node_id_counter: node_id ref;
57+
sess_opaque_id_counter: opaque_id ref;
58+
sess_temp_id_counter: temp_id ref;
5459
}
5560
;;
5661

src/boot/fe/cexp.ml

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -381,9 +381,6 @@ and eval_cexp (env:env) (exp:cexp) : cdir array =
381381
let ps = env.env_ps in
382382
let p =
383383
make_parser
384-
ps.pstate_temp_id
385-
ps.pstate_node_id
386-
ps.pstate_opaque_id
387384
ps.pstate_crate_cache
388385
ps.pstate_sess
389386
ps.pstate_get_mod
@@ -432,12 +429,7 @@ and eval_cexp (env:env) (exp:cexp) : cdir array =
432429
end
433430
u.use_meta
434431
in
435-
ps.pstate_get_mod
436-
meta_pat
437-
id
438-
ps.pstate_node_id
439-
ps.pstate_opaque_id
440-
ps.pstate_crate_cache
432+
ps.pstate_get_mod meta_pat id ps.pstate_crate_cache
441433
in
442434
iflog ps
443435
begin
@@ -631,9 +623,6 @@ let parse_crate_file
631623
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
632624
: Ast.crate =
633625
let fname = Session.filename_of sess.Session.sess_in in
634-
let tref = ref (Temp 0) in
635-
let nref = ref (Node 0) in
636-
let oref = ref (Opaque 0) in
637626
let required = Hashtbl.create 4 in
638627
let required_syms = Hashtbl.create 4 in
639628
let files = Hashtbl.create 0 in
@@ -670,7 +659,7 @@ let parse_crate_file
670659
| Some (PVAL_num n) -> LIT_INT n
671660
in
672661
let ps =
673-
make_parser tref nref oref crate_cache sess get_mod get_cenv_tok
662+
make_parser crate_cache sess get_mod get_cenv_tok
674663
infer_lib_name required required_syms fname
675664
in
676665
let env = { env_bindings = bindings;
@@ -737,17 +726,14 @@ let parse_src_file
737726
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
738727
: Ast.crate =
739728
let fname = Session.filename_of sess.Session.sess_in in
740-
let tref = ref (Temp 0) in
741-
let nref = ref (Node 0) in
742-
let oref = ref (Opaque 0) in
743729
let required = Hashtbl.create 0 in
744730
let required_syms = Hashtbl.create 0 in
745731
let get_cenv_tok ps ident =
746732
raise (err (Printf.sprintf "no binding for '%s' found"
747733
ident) ps)
748734
in
749735
let ps =
750-
make_parser tref nref oref crate_cache sess get_mod get_cenv_tok
736+
make_parser crate_cache sess get_mod get_cenv_tok
751737
infer_lib_name required required_syms fname
752738
in
753739
with_err_handling sess

src/boot/fe/item.ml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1202,14 +1202,7 @@ and parse_use
12021202
let apos = lexpos ps in
12031203
let bpos = lexpos ps in
12041204
let id = (span ps apos bpos ()).id in
1205-
let (path, items) =
1206-
ps.pstate_get_mod
1207-
meta
1208-
id
1209-
ps.pstate_node_id
1210-
ps.pstate_opaque_id
1211-
ps.pstate_crate_cache
1212-
in
1205+
let (path, items) = ps.pstate_get_mod meta id ps.pstate_crate_cache in
12131206
let bpos = lexpos ps in
12141207
expect ps SEMI;
12151208
let rlib =

src/boot/fe/parser.ml

Lines changed: 15 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,8 @@ open Token;;
66

77
type get_mod_fn = (Ast.meta_pat
88
-> node_id
9-
-> (node_id ref)
10-
-> (opaque_id ref)
11-
-> (crate_id, Ast.mod_items) Hashtbl.t
12-
-> (filename * Ast.mod_items))
9+
-> (crate_id, Ast.mod_items) Hashtbl.t
10+
-> (filename * Ast.mod_items))
1311
;;
1412

1513
type pstate =
@@ -20,9 +18,6 @@ type pstate =
2018
pstate_lexbuf : Lexing.lexbuf;
2119
pstate_file : filename;
2220
pstate_sess : Session.sess;
23-
pstate_temp_id : temp_id ref;
24-
pstate_node_id : node_id ref;
25-
pstate_opaque_id : opaque_id ref;
2621
pstate_crate_cache : (crate_id, Ast.mod_items) Hashtbl.t;
2722
pstate_get_mod : get_mod_fn;
2823
pstate_get_cenv_tok : pstate -> Ast.ident -> token;
@@ -43,9 +38,6 @@ let iflog ps thunk =
4338
;;
4439

4540
let make_parser
46-
(tref:temp_id ref)
47-
(nref:node_id ref)
48-
(oref:opaque_id ref)
4941
(crate_cache:(crate_id, Ast.mod_items) Hashtbl.t)
5042
(sess:Session.sess)
5143
(get_mod:get_mod_fn)
@@ -69,9 +61,6 @@ let make_parser
6961
pstate_lexbuf = lexbuf;
7062
pstate_file = fname;
7163
pstate_sess = sess;
72-
pstate_temp_id = tref;
73-
pstate_node_id = nref;
74-
pstate_opaque_id = oref;
7564
pstate_crate_cache = crate_cache;
7665
pstate_get_mod = get_mod;
7766
pstate_get_cenv_tok = get_cenv_tok;
@@ -94,14 +83,16 @@ let lexpos (ps:pstate) : pos =
9483
;;
9584

9685
let next_node_id (ps:pstate) : node_id =
97-
let id = !(ps.pstate_node_id) in
98-
ps.pstate_node_id := Node ((int_of_node id)+1);
86+
let r = ps.pstate_sess.Session.sess_node_id_counter in
87+
let id = !r in
88+
r := Node ((int_of_node id)+1);
9989
id
10090
;;
10191

10292
let next_opaque_id (ps:pstate) : opaque_id =
103-
let id = !(ps.pstate_opaque_id) in
104-
ps.pstate_opaque_id := Opaque ((int_of_opaque id)+1);
93+
let r = ps.pstate_sess.Session.sess_opaque_id_counter in
94+
let id = !r in
95+
r := Opaque ((int_of_opaque id)+1);
10596
id
10697
;;
10798

@@ -203,14 +194,15 @@ let build_tmp
203194
(apos:pos)
204195
(bpos:pos)
205196
: (temp_id * Ast.lval * Ast.stmt) =
206-
let nonce = !(ps.pstate_temp_id) in
207-
ps.pstate_temp_id := Temp ((int_of_temp nonce)+1);
197+
let r = ps.pstate_sess.Session.sess_temp_id_counter in
198+
let id = !r in
199+
r := Temp ((int_of_temp id)+1);
208200
iflog ps
209-
(fun _ -> log ps "building temporary %d" (int_of_temp nonce));
210-
let decl = Ast.DECL_slot (Ast.KEY_temp nonce, (span ps apos bpos slot)) in
201+
(fun _ -> log ps "building temporary %d" (int_of_temp id));
202+
let decl = Ast.DECL_slot (Ast.KEY_temp id, (span ps apos bpos slot)) in
211203
let declstmt = span ps apos bpos (Ast.STMT_decl decl) in
212-
let tmp = Ast.LVAL_base (span ps apos bpos (Ast.BASE_temp nonce)) in
213-
(nonce, tmp, declstmt)
204+
let tmp = Ast.LVAL_base (span ps apos bpos (Ast.BASE_temp id)) in
205+
(id, tmp, declstmt)
214206
;;
215207

216208
(* Simple helpers *)

0 commit comments

Comments
 (0)