(* This module provides an interpreter for [ERTL] programs. *)

val interpret: ERTL.program -> unit

(* The following functionality is exported for use by interpreters
   of the forthcoming intermediate languages. *)

type ('procedure, 'label) address =
  | AddrCode of 'procedure * 'label
  | AddrInit

type 'value henv =
    'value ref MIPS.RegisterMap.t

val hread: 'address InterpretUPP.value henv -> MIPS.register -> 'address InterpretUPP.value
val hwrite: 'value henv -> MIPS.register -> 'value -> unit
val interpret_primitive: 'address InterpretUPP.value henv -> Primitive.primitive -> unit
val destruct: 'a list -> 'a * 'a list