@@ -411,17 +411,17 @@ let (e, expr_queue) = ... in
411
411
flush_queue expr_queue e
412
412
*)
413
413
414
- let const_p = 0
414
+ let const_p = 0 , Var.Set. empty
415
415
416
- let mutable_p = 1
416
+ let mutable_p = 1 , Var.Set. empty
417
417
418
- let mutator_p = 2
418
+ let mutator_p = 2 , Var.Set. empty
419
419
420
- let flush_p = 3
420
+ let flush_p = 3 , Var.Set. empty
421
421
422
- let or_p p q = max p q
422
+ let or_p ( p , s1 ) ( q , s2 ) = max p q, Var.Set. union s1 s2
423
423
424
- let is_mutable p = p > = mutable_p
424
+ let is_mutable ( p , _ ) = p > = fst mutable_p
425
425
426
426
let kind k =
427
427
match k with
@@ -523,13 +523,13 @@ let access_queue queue x =
523
523
try
524
524
let elt = List. assoc x queue in
525
525
if elt.cardinal = 1
526
- then (elt.prop, elt.ce), List. remove_assoc x queue
526
+ then (( elt.prop, elt.deps) , elt.ce), List. remove_assoc x queue
527
527
else
528
- ( (elt.prop, elt.ce)
528
+ ( (( elt.prop, elt.deps) , elt.ce)
529
529
, List. map queue ~f: (function
530
530
| x' , elt when Var. equal x x' -> x', { elt with cardinal = pred elt.cardinal }
531
531
| x -> x) )
532
- with Not_found -> (const_p, var x), queue
532
+ with Not_found -> ((fst const_p, Code.Var.Set. singleton x) , var x), queue
533
533
534
534
let access_queue' ~ctx queue x =
535
535
match x with
@@ -547,7 +547,7 @@ let access_queue_may_flush queue v x =
547
547
queue
548
548
~init: (Code.Var.Set. singleton v, [] , [] )
549
549
~f: (fun (deps , instrs , queue ) ((y , elt ) as eq ) ->
550
- if Code.Var.Set. exists ( fun p -> Code.Var.Set. mem p deps) elt.deps
550
+ if not ( Code.Var.Set. disjoint deps elt.deps)
551
551
then
552
552
( Code.Var.Set. add y deps
553
553
, (J. Variable_statement [ J. V y, Some (elt.ce, elt.loc) ], elt.loc) :: instrs
@@ -556,11 +556,11 @@ let access_queue_may_flush queue v x =
556
556
in
557
557
instrs, (tx, List. rev queue)
558
558
559
- let should_flush cond prop = cond <> const_p && cond + prop > = flush_p
559
+ let should_flush ( cond , _ ) prop = cond <> fst const_p && cond + prop > = fst flush_p
560
560
561
561
let flush_queue expr_queue prop (l : J.statement_list ) =
562
562
let instrs, expr_queue =
563
- if prop > = flush_p
563
+ if fst prop > = fst flush_p
564
564
then expr_queue, []
565
565
else List. partition ~f: (fun (_ , elt ) -> should_flush prop elt.prop) expr_queue
566
566
in
@@ -578,12 +578,12 @@ let enqueue expr_queue prop x ce loc cardinal acc =
578
578
then if is_mutable prop then flush_queue expr_queue prop [] else [] , expr_queue
579
579
else flush_queue expr_queue flush_p []
580
580
in
581
- let deps = Js_simpl. get_variable Code.Var.Set. empty ce in
581
+ let prop, deps = prop in
582
582
let deps =
583
583
List. fold_left expr_queue ~init: deps ~f: (fun deps (x' , elt ) ->
584
584
if Code.Var.Set. mem x' deps then Code.Var.Set. union elt.deps deps else deps)
585
585
in
586
- instrs @ acc, (x, { prop; ce; loc; cardinal; deps }) :: expr_queue
586
+ instrs @ acc, (x, { prop; deps; ce; loc; cardinal }) :: expr_queue
587
587
588
588
(* ***)
589
589
0 commit comments