diff options
| author | Alain Frisch <alain@frisch.fr> | 2013-12-04 09:37:37 +0000 |
|---|---|---|
| committer | Alain Frisch <alain@frisch.fr> | 2013-12-04 09:37:37 +0000 |
| commit | c2cab7f38db15feb4303f7437d72889938d626ae (patch) | |
| tree | 089f2d8d5d825fc2a5d632ca7f5e9cd8f4924922 | |
| parent | aa58e559586b17ee402372d0b02a05b9be914467 (diff) | |
| download | ocaml-c2cab7f38db15feb4303f7437d72889938d626ae.tar.gz | |
#6180: avoid redundant check in caml_make_float_vect.
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@14338 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
| -rw-r--r-- | byterun/array.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/byterun/array.c b/byterun/array.c index a8830d58ed..327f2b5647 100644 --- a/byterun/array.c +++ b/byterun/array.c @@ -137,12 +137,23 @@ CAMLprim value caml_array_unsafe_set(value array, value index, value newval) CAMLprim value caml_make_float_vect(value len) { - mlsize_t wsize = Long_val(len) * Double_wosize; - if (wsize == 0) + mlsize_t wosize = Long_val(len) * Double_wosize; + value result; + if (wosize == 0) return Atom(0); - if (wsize > Max_wosize) - caml_invalid_argument("Array.make"); - return caml_alloc(wsize, Double_array_tag); + else if (wosize <= Max_young_wosize){ +#define Setup_for_gc +#define Restore_after_gc + Alloc_small (result, wosize, Double_array_tag); +#undef Setup_for_gc +#undef Restore_after_gc + }else if (wosize > Max_wosize) + caml_invalid_argument("Array.make_float"); + else { + result = caml_alloc_shr (wosize, Double_array_tag); + result = caml_check_urgent_gc (result); + } + return result; } CAMLprim value caml_make_vect(value len, value init) |
