Skip to content

Commit 3d69407

Browse files
committed
Fix numerous non-linearities and O(sizeof(crate)) issues in typestate system's dataflow algorithm. No longer substantial in profile.
1 parent 4b97b4e commit 3d69407

File tree

2 files changed

+340
-126
lines changed

2 files changed

+340
-126
lines changed

Diff for: src/boot/me/semant.ml

+6-18
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ type ctxt =
100100
ctxt_all_stmts: (node_id,Ast.stmt) Hashtbl.t;
101101
ctxt_item_files: (node_id,filename) Hashtbl.t;
102102
ctxt_all_lvals: (node_id,Ast.lval) Hashtbl.t;
103+
ctxt_call_lval_params: (node_id,Ast.ty array) Hashtbl.t;
103104

104105
(* definition id --> definition *)
105106
ctxt_all_defns: (node_id,defn) Hashtbl.t;
@@ -110,6 +111,10 @@ type ctxt =
110111
ctxt_required_items: (node_id, (required_lib * nabi_conv)) Hashtbl.t;
111112
ctxt_required_syms: (node_id, string) Hashtbl.t;
112113

114+
(* Typestate-y stuff. *)
115+
ctxt_stmt_is_init: (node_id,unit) Hashtbl.t;
116+
ctxt_post_stmt_slot_drops: (node_id,node_id list) Hashtbl.t;
117+
113118
(* Layout-y stuff. *)
114119
ctxt_slot_aliased: (node_id,unit) Hashtbl.t;
115120
ctxt_slot_is_obj_state: (node_id,unit) Hashtbl.t;
@@ -121,17 +126,6 @@ type ctxt =
121126
ctxt_stmt_loop_depths: (node_id,int) Hashtbl.t;
122127
ctxt_slot_loop_depths: (node_id,int) Hashtbl.t;
123128

124-
(* Typestate-y stuff. *)
125-
ctxt_constrs: (constr_id,constr_key) Hashtbl.t;
126-
ctxt_constr_ids: (constr_key,constr_id) Hashtbl.t;
127-
ctxt_preconditions: (node_id,Bits.t) Hashtbl.t;
128-
ctxt_postconditions: (node_id,Bits.t) Hashtbl.t;
129-
ctxt_prestates: (node_id,Bits.t) Hashtbl.t;
130-
ctxt_poststates: (node_id,Bits.t) Hashtbl.t;
131-
ctxt_call_lval_params: (node_id,Ast.ty array) Hashtbl.t;
132-
ctxt_stmt_is_init: (node_id,unit) Hashtbl.t;
133-
ctxt_post_stmt_slot_drops: (node_id,node_id list) Hashtbl.t;
134-
135129
(* Translation-y stuff. *)
136130
ctxt_fn_fixups: (node_id,fixup) Hashtbl.t;
137131
ctxt_block_fixups: (node_id,fixup) Hashtbl.t;
@@ -192,19 +186,13 @@ let new_ctxt sess abi crate =
192186
ctxt_item_files = crate.Ast.crate_files;
193187
ctxt_all_lvals = Hashtbl.create 0;
194188
ctxt_all_defns = Hashtbl.create 0;
189+
ctxt_call_lval_params = Hashtbl.create 0;
195190
ctxt_lval_to_referent = Hashtbl.create 0;
196191
ctxt_required_items = crate.Ast.crate_required;
197192
ctxt_required_syms = crate.Ast.crate_required_syms;
198193

199-
ctxt_constrs = Hashtbl.create 0;
200-
ctxt_constr_ids = Hashtbl.create 0;
201-
ctxt_preconditions = Hashtbl.create 0;
202-
ctxt_postconditions = Hashtbl.create 0;
203-
ctxt_prestates = Hashtbl.create 0;
204-
ctxt_poststates = Hashtbl.create 0;
205194
ctxt_stmt_is_init = Hashtbl.create 0;
206195
ctxt_post_stmt_slot_drops = Hashtbl.create 0;
207-
ctxt_call_lval_params = Hashtbl.create 0;
208196

209197
ctxt_slot_aliased = Hashtbl.create 0;
210198
ctxt_slot_is_obj_state = Hashtbl.create 0;

0 commit comments

Comments
 (0)