Skip to content

Commit 5e88f6c

Browse files
atomically_mutable_data
1 parent adb6c4a commit 5e88f6c

File tree

2 files changed

+31
-0
lines changed

2 files changed

+31
-0
lines changed

typing/jkind.ml

+25
Original file line numberDiff line numberDiff line change
@@ -1291,6 +1291,22 @@ module Const = struct
12911291
name = "immutable_data"
12921292
}
12931293

1294+
let atomically_mutable_data =
1295+
{ jkind =
1296+
{ layout = Base Value;
1297+
mod_bounds =
1298+
Mod_bounds.create ~locality:Locality.Const.max
1299+
~linearity:Linearity.Const.min
1300+
~portability:Portability.Const.min ~yielding:Yielding.Const.min
1301+
~uniqueness:Uniqueness.Const_op.max
1302+
~contention:Contention.Const_op.min
1303+
~statefulness:Statefulness.Const.min ~access:Access.Const_op.max
1304+
~externality:Externality.max ~nullability:Nullability.Non_null;
1305+
with_bounds = No_with_bounds
1306+
};
1307+
name = "atomically_mutable_data"
1308+
}
1309+
12941310
let mutable_data =
12951311
{ jkind =
12961312
{ layout = Base Value;
@@ -1408,6 +1424,7 @@ module Const = struct
14081424
value_or_null;
14091425
value;
14101426
immutable_data;
1427+
atomically_mutable_data;
14111428
mutable_data;
14121429
void;
14131430
immediate;
@@ -1682,6 +1699,7 @@ module Const = struct
16821699
| "bits64" -> Builtin.bits64.jkind
16831700
| "vec128" -> Builtin.vec128.jkind
16841701
| "immutable_data" -> Builtin.immutable_data.jkind
1702+
| "atomically_mutable_data" -> Builtin.atomically_mutable_data.jkind
16851703
| "mutable_data" -> Builtin.mutable_data.jkind
16861704
| _ -> raise ~loc:jkind.pjkind_loc (Unknown_jkind jkind))
16871705
|> allow_left |> allow_right
@@ -1883,6 +1901,8 @@ module Jkind_desc = struct
18831901

18841902
let immutable_data = of_const Const.Builtin.immutable_data.jkind
18851903

1904+
let atomically_mutable_data = of_const Const.Builtin.atomically_mutable_data.jkind
1905+
18861906
let mutable_data = of_const Const.Builtin.mutable_data.jkind
18871907

18881908
let void = of_const Const.Builtin.void.jkind
@@ -1977,6 +1997,11 @@ module Builtin = struct
19771997
~annotation:(mk_annot "immutable_data")
19781998
~why:(Value_creation why)
19791999

2000+
let atomically_mutable_data ~(why : History.value_creation_reason) =
2001+
fresh_jkind Jkind_desc.Builtin.atomically_mutable_data
2002+
~annotation:(mk_annot "atomically_mutable_data")
2003+
~why:(Value_creation why)
2004+
19802005
let mutable_data ~(why : History.value_creation_reason) =
19812006
fresh_jkind Jkind_desc.Builtin.mutable_data
19822007
~annotation:(mk_annot "mutable_data") ~why:(Value_creation why)

typing/jkind.mli

+6
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,9 @@ module Const : sig
276276
(** Immutable values that don't contain functions. *)
277277
val immutable_data : t
278278

279+
(** Atomically mutable values that don't contain functions. *)
280+
val atomically_mutable_data : t
281+
279282
(** Mutable values that don't contain functions. *)
280283
val mutable_data : t
281284

@@ -336,6 +339,9 @@ module Builtin : sig
336339
(** This is suitable for records or variants without mutable fields. *)
337340
val immutable_data : why:History.value_creation_reason -> 'd Types.jkind
338341

342+
(** This is suitable for records or variants with atomically mutable fields. *)
343+
val atomically_mutable_data : why:History.value_creation_reason -> 'd Types.jkind
344+
339345
(** This is suitable for records or variants with mutable fields. *)
340346
val mutable_data : why:History.value_creation_reason -> 'd Types.jkind
341347

0 commit comments

Comments
 (0)