@@ -90,31 +90,31 @@ CAMLexport value
90
90
caml_ba_alloc (int flags , int num_dims , void * data , intnat * dim )
91
91
{
92
92
uintnat num_elts , asize , size ;
93
- int i , is_managed ;
93
+ int i ;
94
94
value res ;
95
95
struct caml_ba_array * b ;
96
96
intnat dimcopy [CAML_BA_MAX_NUM_DIMS ];
97
97
98
98
CAMLassert (num_dims >= 0 && num_dims <= CAML_BA_MAX_NUM_DIMS );
99
99
CAMLassert ((flags & CAML_BA_KIND_MASK ) <= CAML_BA_CHAR );
100
100
for (i = 0 ; i < num_dims ; i ++ ) dimcopy [i ] = dim [i ];
101
- num_elts = 1 ;
102
- for (i = 0 ; i < num_dims ; i ++ ) {
103
- if (caml_umul_overflow (num_elts , dimcopy [i ], & num_elts ))
104
- caml_raise_out_of_memory ();
105
- }
106
- if (caml_umul_overflow (num_elts ,
107
- caml_ba_element_size [flags & CAML_BA_KIND_MASK ],
108
- & size ))
109
- caml_raise_out_of_memory ();
101
+ size = 0 ;
110
102
if (data == NULL ) {
103
+ num_elts = 1 ;
104
+ for (i = 0 ; i < num_dims ; i ++ ) {
105
+ if (caml_umul_overflow (num_elts , dimcopy [i ], & num_elts ))
106
+ caml_raise_out_of_memory ();
107
+ }
108
+ if (caml_umul_overflow (num_elts ,
109
+ caml_ba_element_size [flags & CAML_BA_KIND_MASK ],
110
+ & size ))
111
+ caml_raise_out_of_memory ();
111
112
data = malloc (size );
112
113
if (data == NULL && size != 0 ) caml_raise_out_of_memory ();
113
114
flags |= CAML_BA_MANAGED ;
114
115
}
115
116
asize = SIZEOF_BA_ARRAY + num_dims * sizeof (intnat );
116
- is_managed = ((flags & CAML_BA_MANAGED_MASK ) == CAML_BA_MANAGED );
117
- res = caml_alloc_custom_mem (& caml_ba_ops , asize , is_managed ? size : 0 );
117
+ res = caml_alloc_custom_mem (& caml_ba_ops , asize , size );
118
118
b = Caml_ba_array_val (res );
119
119
b -> data = data ;
120
120
b -> num_dims = num_dims ;
0 commit comments