Skip to content

Commit 9f85306

Browse files
committed
fix: Correct value usage in type_builder_build_and_dispose c binding
1 parent ecb46d1 commit 9f85306

1 file changed

Lines changed: 12 additions & 8 deletions

File tree

src/type_builder.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)