@@ -150,23 +150,27 @@ caml_conv_heap_type(BinaryenHeapType heapType) {
150150 return alloc_BinaryenHeapType (heapType );
151151}
152152
153- CAMLprim value
154- caml_type_builder_build_and_dispose (value _builder ) {
153+ CAMLprim value caml_type_builder_build_and_dispose (value _builder ) {
155154 CAMLparam1 (_builder );
155+ CAMLlocal4 (arr , ok , error , tuple );
156156 TypeBuilderRef builder = TypeBuilderRef_val (_builder );
157157 BinaryenIndex size = TypeBuilderGetSize (builder );
158158 BinaryenHeapType heapTypes [size + 1 ];
159- heapTypes [size ] = (BinaryenHeapType ) NULL ;
160159 BinaryenIndex errorIndex ;
161160 TypeBuilderErrorReason errorReason ;
162- bool success = TypeBuilderBuildAndDispose (builder , heapTypes , & errorIndex , & errorReason );
161+ bool success =
162+ TypeBuilderBuildAndDispose (builder , heapTypes , & errorIndex , & errorReason );
163163 if (success ) {
164- value ok = caml_alloc_small (1 , 0 );
165- Field (ok , 0 ) = caml_alloc_array ((void * )caml_conv_heap_type , (char const * * )heapTypes );
164+ arr = caml_alloc (size , 0 );
165+ for (mlsize_t i = 0 ; i < (mlsize_t )size ; i ++ ) {
166+ Field (arr , i ) = alloc_BinaryenHeapType (heapTypes [i ]);
167+ }
168+ ok = caml_alloc_small (1 , 0 );
169+ Field (ok , 0 ) = arr ;
166170 CAMLreturn (ok );
167171 } else {
168- value error = caml_alloc_small (1 , 1 );
169- value tuple = caml_alloc_small (2 , 0 );
172+ error = caml_alloc_small (1 , 1 );
173+ tuple = caml_alloc_small (2 , 0 );
170174 Field (tuple , 0 ) = Val_int (errorIndex );
171175 Field (tuple , 1 ) = Val_int (errorReason );
172176 Field (error , 0 ) = tuple ;
0 commit comments