Module St_interp

type oop = St_memory.oop
type host = {
  1. transcript : string -> unit;
  2. milliseconds : unit -> int;
  3. inspect : oop -> unit;
  4. mouse : unit -> int * int * int;
}
type process_state =
  1. | Runnable
  2. | Suspended of string
  3. | Finished of oop
  4. | Terminated
type process = {
  1. id : int;
  2. mutable top : oop;
  3. mutable state : process_state;
}
type vm
type primitive = vm -> int -> bool
val create : St_memory.t -> host -> vm
val memory : vm -> St_memory.t
val host : vm -> host
val set_host : vm -> host -> unit
val primitives : vm -> primitive option array
val set_extra_roots : vm -> (unit -> oop list) -> unit
val spawn : vm -> oop -> string -> oop list -> process
val spawn_method : vm -> oop -> oop -> process
val run : ?stop_when:(vm -> bool) -> vm -> process -> budget:int -> unit
val resume : process -> unit
val suspend : process -> string -> unit
val terminate : vm -> process -> unit
val call : vm -> ?budget:int -> oop -> string -> oop list -> (oop, string) Stdlib.result
val print_string : vm -> oop -> string
val evaluate : vm -> ?budget:int -> ?receiver:oop -> string -> (oop, string) Stdlib.result
val stack : vm -> int -> oop
val pop : vm -> int -> unit
val push : vm -> oop -> unit
val bool : vm -> bool -> oop
val send : vm -> oop -> int -> unit
val active_context : vm -> oop
val ip : vm -> int
val home_context : vm -> oop
val activate_context : vm -> oop -> unit
val request_suspend : vm -> string -> unit
val collect : vm -> unit
val flush_cache : vm -> unit
val cache_stats : vm -> int * int
val bytecodes_run : vm -> int
val c_sender : int
val c_ip : int
val c_sp : int
val c_method : int
val c_receiver : int
val c_home : int
val c_temps : int
val is_block_context : vm -> oop -> bool
val context_method : vm -> oop -> oop
val context_home : vm -> oop -> oop