blob: 402304d26e58246a33f97ff0a93827ad18c89f07 [file] [log] [blame] [edit]
open Types
open Value
type i31 = int
type t = i31
type ref_ += I31Ref of i31
let of_i32 i = Int32.to_int i land 0x7fff_ffff
let to_i32 sx i =
let i' = Int32.of_int i in
match sx with
| Pack.U -> i'
| Pack.S -> Int32.(shift_right (shift_left i' 1) 1)
let () =
let eq_ref' = !Value.eq_ref' in
Value.eq_ref' := fun r1 r2 ->
match r1, r2 with
| I31Ref i1, I31Ref i2 -> i1 = i2
| _, _ -> eq_ref' r1 r2
let () =
let type_of_ref' = !Value.type_of_ref' in
Value.type_of_ref' := function
| I31Ref f -> I31HT
| r -> type_of_ref' r
let () =
let string_of_ref' = !Value.string_of_ref' in
Value.string_of_ref' := function
| I31Ref i -> "(i31 " ^ string_of_int i ^ ")"
| r -> string_of_ref' r