diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 1995-07-27 17:41:09 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 1995-07-27 17:41:09 +0000 |
commit | 863984ea8ba4be4fc317680c3c457aa8f89c2c72 (patch) | |
tree | bf5238495f6f944178e294c623a68ceafee97df5 /byterun/intern.c | |
parent | b44ab158b2735be981330ff8a0d696051a246cc6 (diff) |
Ajout du tag Double_array_tag.
Deplacement de copy_double dans floats.c.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@153 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'byterun/intern.c')
-rw-r--r-- | byterun/intern.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/byterun/intern.c b/byterun/intern.c index 4fb438b44..0c64bf7be 100644 --- a/byterun/intern.c +++ b/byterun/intern.c @@ -188,6 +188,25 @@ static void read_compact(chan, dest) really_getblock(chan, (char *) v, 8); if (code != CODE_DOUBLE_NATIVE) Reverse_double(v); break; + case CODE_DOUBLE_ARRAY_LITTLE: + case CODE_DOUBLE_ARRAY_BIG: + if (sizeof(double) != 8) { + stat_free((char *) intern_obj_table); + Hd_val(intern_block) = intern_header; /* Don't confuse the GC */ + invalid_argument("input_value: non-standard floats"); + } + len = input32u(chan); + size = len * Double_wosize; + v = Val_hp(intern_ptr); + intern_obj_table[obj_counter++] = v; + *intern_ptr = Make_header(size, Double_array_tag, intern_color); + intern_ptr += 1 + size; + really_getblock(chan, (char *) v, len * 8); + if (code != CODE_DOUBLE_NATIVE) { + mlsize_t i; + for (i = 0; i < len; i++) Reverse_double((value)((double *)v + i)); + } + break; } } } |