diff options
author | Damien Doligez <damien.doligez-inria.fr> | 2003-10-16 23:22:23 +0000 |
---|---|---|
committer | Damien Doligez <damien.doligez-inria.fr> | 2003-10-16 23:22:23 +0000 |
commit | e969e8ad9fdce5a8a33946587d45b3e4c22cae90 (patch) | |
tree | 7d7d2282c138d420cb03a5c2c4ba87554bcd6736 /byterun/obj.c | |
parent | 5320c8fce63acb42f92483a0462e917c32fdf2b6 (diff) |
PR#1878
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@5873 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'byterun/obj.c')
-rw-r--r-- | byterun/obj.c | 25 |
1 files changed, 22 insertions, 3 deletions
diff --git a/byterun/obj.c b/byterun/obj.c index 73572dceb..f6001fbc3 100644 --- a/byterun/obj.c +++ b/byterun/obj.c @@ -49,7 +49,13 @@ CAMLprim value obj_is_block(value arg) CAMLprim value obj_tag(value arg) { - return Val_int(Tag_val(arg)); + if (Is_long (arg)){ + return 1000; + }else if (Is_young (arg) || Is_in_heap (arg)){ + return Val_int(Tag_val(arg)); + }else{ + return 1001; + } } CAMLprim value obj_set_tag (value arg, value new_tag) @@ -140,11 +146,13 @@ CAMLprim value obj_truncate (value v, value newsize) } -/* [lazy_is_forward] and [lazy_follow_forward] are used in stdlib/lazy.ml. +/* The following functions are used in stdlib/lazy.ml. They are not written in O'Caml because they must be atomic with respect to the GC. */ +/* [lazy_is_forward] is obsolete. Stays here to make bootstrapping + easier for patched versions of 3.07. To be removed before 3.08. */ CAMLprim value lazy_is_forward (value v) { return Val_bool (Is_block (v) && Tag_val (v) == Forward_tag); @@ -152,9 +160,20 @@ CAMLprim value lazy_is_forward (value v) CAMLprim value lazy_follow_forward (value v) { - if (Is_block (v) && Tag_val (v) == Forward_tag){ + if (Is_block (v) && (Is_young (v) || Is_in_heap (v)) + && Tag_val (v) == Forward_tag){ return Forward_val (v); }else{ return v; } } + +CAMLprim value lazy_make_forward (value v) +{ + CAMLparam1 (v); + CAMLlocal1 (res); + + res = alloc_small (1, Forward_tag); + Modify (&Field (res, 0), v); + CAMLreturn (res); +} |