Provided by: ocaml-nox_4.05.0-10ubuntu1_amd64 bug

NAME

       Obj - Operations on internal representations of values.

Module

       Module   Obj

Documentation

       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