blob: 01a310e621d72bcb6f8ad30e181af48678f04f6c (
plain)
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
33
34
35
36
37
|
register R1 : int
register R2 : int
register R3 : int
val cast "reg_deref" : forall ('a : Type). register('a) -> 'a effect {rreg}
val output = {
ocaml: "(fun (str, n) -> print_endline (str ^ Big_int.to_string n))",
interpreter: "print_int"
} : (string, int) -> unit
val f : register(int) -> unit effect {rreg, wreg}
function f R = {
R1 = R;
}
val g : unit -> unit effect {rreg, wreg}
function g () = {
f(ref R1);
f(ref R2);
}
val main : unit -> unit effect {rreg, wreg}
function main () = {
R1 = 4;
R2 = 5;
g ();
R3 = 10;
f(ref R3);
R2 = 20;
output("R1 = ", R1);
output("R2 = ", R2);
output("R3 = ", R3)
}
|