Obj (3)
NAME
Obj - Operations on internal representations of values.Module
Module ObjDocumentation
Module
Obj
:
sig end
Operations on internal representations of values.
Not for the casual user.
type t
val repr
:
'a -> t
val obj
:
t -> 'a
val magic
:
'a -> 'b
val is_block
:
t -> bool
val is_int
:
t -> bool
val tag
:
t -> int
val size
:
t -> int
val reachable_words
:
t -> int
Computes the total size (in words, including the headers) of all heap blocks accessible from the argument. Statically allocated blocks are excluded.
@Since 4.04
val field
:
t -> int -> t
val set_field
:
t -> int -> t -> unit
When using flambda:
set_field
MUST NOT be called on immutable blocks. (Blocks allocated
in C stubs, or with
new_block
below, are always considered mutable.)
The same goes for set_double_field and set_tag . However, for set_tag , in the case of immutable blocks where the middle-end optimizers never see code that discriminates on their tag (for example records), the operation should be safe. Such uses are nonetheless discouraged.
For experts only:
set_field
et al can be made safe by first wrapping the block in
Sys.opaque_identity
, so any information about its contents will not
be propagated.
val set_tag
:
t -> int -> unit
val double_field
:
t -> int -> float
val set_double_field
:
t -> int -> float -> unit
val new_block
:
int -> int -> t
val dup
:
t -> t
val truncate
:
t -> int -> unit
val add_offset
:
t -> Int32.t -> t
val first_non_constant_constructor_tag
:
int
val last_non_constant_constructor_tag
:
int
val lazy_tag
:
int
val closure_tag
:
int
val object_tag
:
int
val infix_tag
:
int
val forward_tag
:
int
val no_scan_tag
:
int
val abstract_tag
:
int
val string_tag
:
int
val double_tag
:
int
val double_array_tag
:
int
val custom_tag
:
int
val final_tag
:
int
val int_tag
:
int
val out_of_heap_tag
:
int
val unaligned_tag
:
int
val extension_constructor
:
'a -> extension_constructor
val extension_name
:
extension_constructor -> string
val extension_id
:
extension_constructor -> int
=== The following two functions are deprecated. Use module Marshal
instead. ===
val marshal
:
t -> bytes
val unmarshal
:
bytes -> int -> t * int
module Ephemeron :
sig end