@@ -302,21 +302,41 @@ struct
302302 let invariant_type = " location_invariant"
303303 end
304304
305+ module LoopTransitionInvariant =
306+ struct
307+ include LoopInvariant
308+
309+ let invariant_type = " loop_transition_invariant"
310+ end
311+
312+ module LocationTransitionInvariant =
313+ struct
314+ include LoopTransitionInvariant
315+
316+ let invariant_type = " location_transition_invariant"
317+ end
318+
305319 (* TODO: could maybe use GADT, but adds ugly existential layer to entry type pattern matching *)
306320 module InvariantType =
307321 struct
308322 type t =
309323 | LocationInvariant of LocationInvariant .t
310324 | LoopInvariant of LoopInvariant .t
325+ | LoopTransitionInvariant of LoopTransitionInvariant .t
326+ | LocationTransitionInvariant of LocationTransitionInvariant .t
311327 [@@ deriving eq , ord , hash ]
312328
313329 let invariant_type = function
314330 | LocationInvariant _ -> LocationInvariant. invariant_type
315331 | LoopInvariant _ -> LoopInvariant. invariant_type
332+ | LoopTransitionInvariant _ -> LoopTransitionInvariant. invariant_type
333+ | LocationTransitionInvariant _ -> LocationTransitionInvariant. invariant_type
316334
317335 let to_yaml' = function
318336 | LocationInvariant x -> LocationInvariant. to_yaml' x
319337 | LoopInvariant x -> LoopInvariant. to_yaml' x
338+ | LoopTransitionInvariant x -> LoopTransitionInvariant. to_yaml' x
339+ | LocationTransitionInvariant x -> LocationTransitionInvariant. to_yaml' x
320340
321341 let of_yaml y =
322342 let open GobYaml in
@@ -327,6 +347,12 @@ struct
327347 else if invariant_type = LoopInvariant. invariant_type then
328348 let + x = y |> LoopInvariant. of_yaml in
329349 LoopInvariant x
350+ else if invariant_type = LoopTransitionInvariant. invariant_type then
351+ let + x = y |> LoopTransitionInvariant. of_yaml in
352+ LoopTransitionInvariant x
353+ else if invariant_type = LocationTransitionInvariant. invariant_type then
354+ let + x = y |> LocationTransitionInvariant. of_yaml in
355+ LocationTransitionInvariant x
330356 else
331357 Error (`Msg " type" )
332358 end
0 commit comments