1
/***********************************************************************/
5
/* Benjamin Gregoire, projets Logical and Cristal */
6
/* INRIA Rocquencourt */
9
/***********************************************************************/
13
#include <caml/mlvalues.h>
14
#include <caml/alloc.h>
16
typedef void (*scanning_action) (value, value *);
19
CAMLextern char *young_ptr;
20
CAMLextern char *young_limit;
21
CAMLextern void (*scan_roots_hook) (scanning_action);
22
CAMLextern void minor_collection (void);
24
#define Caml_white (0 << 8)
25
#define Caml_black (3 << 8)
27
#define Make_header(wosize, tag, color) \
28
(((header_t) (((header_t) (wosize) << 10) \
34
#define Alloc_small(result, wosize, tag) do{ \
35
young_ptr -= Bhsize_wosize (wosize); \
36
if (young_ptr < young_limit){ \
37
young_ptr += Bhsize_wosize (wosize); \
39
minor_collection (); \
41
young_ptr -= Bhsize_wosize (wosize); \
43
Hd_hp (young_ptr) = Make_header ((wosize), (tag), Caml_black); \
44
(result) = Val_hp (young_ptr); \
48
#endif /*_COQ_CAML_GC_ */