43 lines
1.0 KiB
OCaml
43 lines
1.0 KiB
OCaml
open Spice
|
|
|
|
let[@warning "-26"] () =
|
|
Logs.set_reporter (Logs.format_reporter ());
|
|
Logs.set_level (Some Logs.Debug);
|
|
|
|
try
|
|
let int n = Code.Cst_int (Int64.of_int n) in
|
|
let reg n = Code.Reg n in
|
|
|
|
let vtable = Value.make_vtable [ "x"; "y" ] in
|
|
let ep =
|
|
Code.make_basic_block
|
|
[
|
|
(* obj o {...} *)
|
|
CON (0, vtable);
|
|
(* o.x = 999 *)
|
|
MOV (2, int 999);
|
|
MOV (1, int 0);
|
|
SET (0, 1);
|
|
(* o.y = 11 *)
|
|
MOV (2, int 11);
|
|
MOV (1, int 1);
|
|
SET (0, 1);
|
|
(* _1 = o.x *)
|
|
MOV (1, int 0);
|
|
GET (0, 1);
|
|
(* _2 = o.y *)
|
|
MOV (2, int 1);
|
|
GET (0, 2);
|
|
(* _3 = _1 * _2 *)
|
|
MUL (2, reg 1);
|
|
(* o.x = _3 *)
|
|
MOV (1, int 0);
|
|
SET (0, 1);
|
|
]
|
|
in
|
|
|
|
let prog = Code.make_program ep in
|
|
let ret = run prog in
|
|
Fmt.pr "{\"program\":%a,\"output\":%a}" Code.pp_program prog Value.pp ret
|
|
with Error msg -> Logs.err (fun m -> m "%s" msg)
|