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
(* SPDX-License-Identifier: AGPL-3.0-or-later *)
(* Copyright © 2021-2024 OCamlPro *)
(* Written by the Owi programmers *)
type t = Symbolic_global0.t =
{ value : Symbolic_value.t
; env_id : int
; id : int
}
let value global = global.value
let replace global =
Symbolic_choice.modify_thread (Thread.replace_global global)
let set_value global value =
let global = { global with value } in
replace global
let convert_values (v : Concrete_value.t) : Symbolic_value.t =
match v with
| I32 v -> I32 (Symbolic_i32.of_concrete v)
| I64 v -> I64 (Symbolic_i64.of_concrete v)
| F32 v -> F32 (Symbolic_f32.of_concrete v)
| F64 v -> F64 (Symbolic_f64.of_concrete v)
| V128 v -> V128 (Symbolic_v128.of_concrete v)
| Ref (Func f) -> Ref (Func f)
| Ref _ -> assert false
let of_concrete ~env_id ~id (v : Concrete_global.t) : t =
let value = convert_values v.Concrete_global.value in
{ value; env_id; id }