diff options
author | No author <no_author@ocaml.org> | 1995-06-15 08:17:30 +0000 |
---|---|---|
committer | No author <no_author@ocaml.org> | 1995-06-15 08:17:30 +0000 |
commit | f0a0321f07084edd6d4b4761b855d74e0521a86a (patch) | |
tree | 1a49ecaa36e8d05f8171b3395e46f69e24e94462 /byterun/memory.h | |
parent | 3ceaa85c72b2094bb090a1819b65a2792cf2d3c1 (diff) | |
download | ocaml-unlabeled-1.1.2.tar.gz |
This commit was manufactured by cvs2svn to create branchunlabeled-1.1.2
'unlabeled-1.1.2'.
git-svn-id: http://caml.inria.fr/svn/ocaml/branches/unlabeled-1.1.2@35 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'byterun/memory.h')
-rw-r--r-- | byterun/memory.h | 88 |
1 files changed, 0 insertions, 88 deletions
diff --git a/byterun/memory.h b/byterun/memory.h deleted file mode 100644 index 5df199e02e..0000000000 --- a/byterun/memory.h +++ /dev/null @@ -1,88 +0,0 @@ -/* Allocation macros and functions */ - -#ifndef _memory_ -#define _memory_ - - -#include "config.h" -#include "gc.h" -#include "major_gc.h" -#include "minor_gc.h" -#include "misc.h" -#include "mlvalues.h" - -value alloc_shr P((mlsize_t, tag_t)); -void adjust_gc_speed P((mlsize_t, mlsize_t)); -void modify P((value *, value)); -void initialize P((value *, value)); -char * stat_alloc P((asize_t)); /* Size in bytes. */ -void stat_free P((char *)); -char * stat_resize P((char *, asize_t)); /* Size in bytes. */ - - -#define Alloc_small(result, wosize, tag) { \ - char *_res_ = young_ptr; \ - young_ptr += Bhsize_wosize (wosize); \ - if (young_ptr > young_end){ \ - Setup_for_gc; \ - minor_collection (); \ - Restore_after_gc; \ - _res_ = young_ptr; \ - young_ptr += Bhsize_wosize (wosize); \ - } \ - Hd_hp (_res_) = Make_header ((wosize), (tag), Black); \ - (result) = Val_hp (_res_); \ -} - -/* You must use [Modify] to change a field of an existing shared block, - unless you are sure the value being overwritten is not a shared block and - the value being written is not a young block. */ -/* [Modify] never calls the GC. */ - -#define Modify(fp, val) { \ - value _old_ = *(fp); \ - *(fp) = (val); \ - if (Is_in_heap (fp)){ \ - if (gc_phase == Phase_mark) darken (_old_); \ - if (Is_block (val) && Is_young (val) \ - && ! (Is_block (_old_) && Is_young (_old_))){ \ - *ref_table_ptr++ = (fp); \ - if (ref_table_ptr >= ref_table_limit){ \ - Assert (ref_table_ptr == ref_table_limit); \ - realloc_ref_table (); \ - } \ - } \ - } \ -} \ - -/* [Push_roots] and [Pop_roots] are used for C variables that are GC roots. - * It must contain all values in C local variables at the time the minor GC is - * called. - * Usage: - * At the end of the declarations of your C local variables, add - * [ Push_roots (variable_name, size); ] - * The size is the number of declared roots. They are accessed as - * [ variable_name [0] ... variable_name [size - 1] ]. - * The [variable_name] and the [size] must not be [ _ ]. - * Just before the function return, add a call to [Pop_roots]. - */ - -extern value *local_roots; - -#define Push_roots(name, size) \ - value name [(size) + 2]; \ - { long _; for (_ = 0; _ < (size); name [_++] = Val_long (0)); } \ - name [(size)] = (value) (size); \ - name [(size) + 1] = (value) local_roots; \ - local_roots = &(name [(size)]); - -#define Pop_roots() {local_roots = (value *) local_roots [1]; } - -/* [register_global_root] registers a global C variable as a memory root - for the duration of the program. */ - -void register_global_root P((value *)); - - -#endif /* _memory_ */ - |