package goblint

  1. Overview
  2. Docs
Static analysis framework for C

Install

Dune Dependency

Authors

Maintainers

Sources

goblint-2.3.0.tbz
sha256=b729c94adb383a39aea32eb005c988dfd44b92af22ee6a4eedf4239542ac6c26
sha512=643b98770e5fe5644324c95c9ae3a9f698f25c8b11b298f0751d524e0b20af368b2a465fc8200b75a73d48fc9a053fd90f5e8920d4db070927f93188bb8687e0

doc/src/goblint.std/gobYojson.ml.html

Source file gobYojson.ml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
(** Call to [merge x y] returns json where [x] is updated with values in [y] *)
let rec merge x y =
  let module Object = BatMap.Make (String) in
  match x, y with
  | `Assoc m1, `Assoc m2 ->
    let merger k v1 v2 =
      match v1, v2 with
      | Some v1, Some v2 -> Some (merge v1 v2)
      | None   , Some v
      | Some v , None    -> Some v
      | None   , None    -> None
    in
    let nm = Object.bindings @@ Object.merge merger (m1 |> BatList.enum |> Object.of_enum) (m2 |> BatList.enum |> Object.of_enum) in
    `Assoc nm
  | `List l1, `List l2 ->
    let rec zipWith' x y =
      match x, y with
      | x::xs, y::ys    -> merge x y :: zipWith' xs ys
      | [], xs | xs, [] -> y
    in
    `List (zipWith' l1 l2)
  | _ -> y

let print (ch: 'a BatIO.output) json =
  let oo = object
    method output = BatIO.output_substring ch
  end
  in
  Yojson.Safe.to_output oo json

let pretty () json =
  GoblintCil.Pretty.text (Yojson.Safe.to_string json)
OCaml

Innovation. Community. Security.