- end
- else (* todo != [] *)
- begin fun empty_slot sl1 sl2 tree node ->
- let sl =
- if sl2 == empty_slot then
- if sl1 == empty_slot then
- Array.copy empty_slot
- else sl1
- else sl2
- in
- U.exec sl sl1 sl2 node code;
- List.fold_left
- (fun ares (p, q, code) ->
- if !p tree node then begin
- if code != ResJIT.Nil then U.exec sl sl1 sl2 node code;
- StateSet.add q ares
- end
- else ares) res todo_code, sl
-
- end
+ end
+ end else (* todo_code *) begin fun empty_slot sl1 sl2 tree node ->
+ let sl = choose_slot empty_slot sl1 sl2 in
+ LOG( __ "bottom-up" 3 "Has todo code\n");
+ U.exec sl sl1 sl2 node code;
+ List.fold_left
+ (fun ares (p, q, code) ->
+ if !p tree node then begin
+ if code != ResJIT.Nil then U.exec sl sl1 sl2 node code;
+ StateSet.add q ares
+ end
+ else ares) res todo_code, sl
+ end