diff --git a/src/libraries/stdlib/transitioning.ml b/src/libraries/stdlib/transitioning.ml index ba4203fb98deeb9b1d4b1fe8753fd8564e52cc6b..eaab4f83716a602c1422965b389f73ba6f4935f6 100644 --- a/src/libraries/stdlib/transitioning.ml +++ b/src/libraries/stdlib/transitioning.ml @@ -62,17 +62,10 @@ module Seq = struct | Nil -> ys () | Cons (x, xt) -> Cons (x, append xt ys) - let take n xs = - if n < 0 then invalid_arg "Seq.take"; - let rec aux n xs = - if n = 0 - then empty - else fun () -> - match xs () with - | Nil -> Nil - | Cons (x, xs) -> Cons (x, aux (n-1) xs) - in - aux n xs + let is_empty xs = + match xs () with + | Nil -> true + | Cons _ -> false let drop n xs = if n < 0 diff --git a/src/libraries/stdlib/transitioning.mli b/src/libraries/stdlib/transitioning.mli index eff4a5548f621e20e40a606d6cfaaacf557a619f..d33ebe8091fff51daf6012c20c3251f5855eb5ef 100644 --- a/src/libraries/stdlib/transitioning.mli +++ b/src/libraries/stdlib/transitioning.mli @@ -46,6 +46,9 @@ end module Seq: sig open Stdlib.Seq + (** since 4.14.0 *) + val is_empty: 'a t -> bool + (** since 4.14.0 *) val mapi: (int -> 'a -> 'b) -> 'a t -> 'b t @@ -55,9 +58,6 @@ module Seq: sig (** since 4.11.0 *) val append : 'a t -> 'a t -> 'a t - (** since 4.14.0 *) - val take : int -> 'a t -> 'a t - (** since 4.14.0 *) val drop : int -> 'a t -> 'a t end diff --git a/src/plugins/dive/build.ml b/src/plugins/dive/build.ml index 993c989e2d446545caec4aa8b57676cb655abb22..2bb9dbb53a750d62a6e21d03490c8044ca57f18f 100644 --- a/src/plugins/dive/build.ml +++ b/src/plugins/dive/build.ml @@ -183,10 +183,9 @@ let build_node_kind ~is_folded_base lval kinstr = (* Build a scalar node even if kinstr is dead *) Scalar (vi, Cil.typeOfLval lval, offset) | Mem _, _ -> - match - enumerate_cells ~is_folded_base lval kinstr |> Seq.take 2 |> List.of_seq - with - | [node_kind] -> node_kind + let cells_seq = enumerate_cells ~is_folded_base lval kinstr in + match cells_seq () with + | Seq.Cons (node_kind, seq) when Seq.is_empty seq -> node_kind | _ -> Scattered (lval, kinstr) let default_node_locality callstack =