[LLVMdev] Tag number of OCaml Variant in executionengine
Jianzhou Zhao
jianzhou at seas.upenn.edu
Sun Feb 28 08:38:11 PST 2010
Hi,
At the code below from
./bindings/ocaml/executionengine/executionengine_ocaml.c,
we create an OCaml Variant from C. It is from 2.6, the latest 2.7 has
the same code.
Line 240 Option = alloc(1, 1) assigns tag1 to the 'some' constructor.
In term of http://caml.inria.fr/pub/docs/manual-ocaml/manual032.html,
I think the 'some' should have a tag 0. We dont have a runtime error
for this, the reason might be there is only two constructors, one
is None represented as unboxed int, the other is Some represented
as a tagged block, and OCaml runtime may only distinguish them
as the structures, but not the tag number.
Zjz
233 /* string -> ExecutionEngine.t -> llvalue option */
234 CAMLprim value llvm_ee_find_function(value Name,
LLVMExecutionEngineRef EE) {
235 CAMLparam1(Name);
236 CAMLlocal1(Option);
237 LLVMValueRef Found;
238 if (LLVMFindFunction(EE, String_val(Name), &Found))
239 CAMLreturn(Val_unit);
240 Option = alloc(1, 1);
241 Field(Option, 0) = Val_op(Found);
242 CAMLreturn(Option);
243 }
More information about the llvm-dev
mailing list