spice/bin/main.ml

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)