type var = string Source.phrase

type Value.ref_ += HostRef of int32
type num = Value.num Source.phrase
type ref_ = Value.ref_ Source.phrase
type literal = Value.t Source.phrase

type definition = definition' Source.phrase
and definition' =
  | Textual of Ast.module_ * Custom.section list
  | Encoded of string * string Source.phrase
  | Quoted of string * string Source.phrase

type action = action' Source.phrase
and action' =
  | Invoke of var option * Ast.name * literal list
  | Get of var option * Ast.name

type nanop = nanop' Source.phrase
and nanop' = (Lib.void, Lib.void, nan, nan) Value.op
and nan = CanonicalNan | ArithmeticNan

type num_pat =
  | NumPat of num
  | NanPat of nanop

type vec_pat =
  | VecPat of (V128.shape * num_pat list) Value.vecop

type ref_pat =
  | RefPat of ref_
  | RefTypePat of Types.heaptype
  | NullPat

type result = result' Source.phrase
and result' =
  | NumResult of num_pat
  | VecResult of vec_pat
  | RefResult of ref_pat
  | EitherResult of result list

type assertion = assertion' Source.phrase
and assertion' =
  | AssertMalformed of definition * string
  | AssertMalformedCustom of definition * string
  | AssertInvalid of definition * string
  | AssertInvalidCustom of definition * string
  | AssertUnlinkable of var option * string
  | AssertUninstantiable of var option * string
  | AssertReturn of action * result list
  | AssertException of action
  | AssertTrap of action * string
  | AssertExhaustion of action * string

type command = command' Source.phrase
and command' =
  | Module of var option * definition
  | Instance of var option * var option
  | Register of Ast.name * var option
  | Action of action
  | Assertion of assertion
  | Meta of meta

and meta = meta' Source.phrase
and meta' =
  | Input of var option * string
  | Output of var option * string option
  | Script of var option * script

and script = command list


let () =
  let type_of_ref' = !Value.type_of_ref' in
  Value.type_of_ref' := function
    | HostRef _ -> Types.AnyHT
    | r -> type_of_ref' r

let () =
  let string_of_ref' = !Value.string_of_ref' in
  Value.string_of_ref' := function
    | HostRef n -> "(host " ^ Int32.to_string n ^ ")"
    | r -> string_of_ref' r

let () =
  let eq_ref' = !Value.eq_ref' in
  Value.eq_ref' := fun r1 r2 ->
    match r1, r2 with
    | HostRef n1, HostRef n2 -> n1 = n2
    | _, _ -> eq_ref' r1 r2
