[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2010-02-28 (15:16) |
From: | Jianzhou Zhao <jianzhou@s...> |
Subject: | Re: [Caml-list] Re: OCaml/C variant representation |
On Wed, Feb 24, 2010 at 11:42 AM, Sylvain Le Gall <sylvain@le-gall.net> wrote: > Hello, > > On 24-02-2010, Jean Yang <jeanyang@csail.mit.edu> wrote: >> Hello, >> >> I'm having some trouble with variant representation in the OCaml/C >> interface. >> >> According to the reference I found ( >> http://caml.inria.fr/pub/docs/manual-ocaml/manual032.html), it seems like if >> we have value v = variant VConstr(val), where val is some integer value, >> should have Field(val, 0) == hash_variant("VConstr") and Int_val(Field(v, 0) >>== val. I don't seem to be understanding this correctly, since I am getting >> Int_val(Field(v, 0)) == val. >> >> I have the following datatype declaration in my OCaml: >> type newty = VConstr of int | ... >> In the C implementation of OCaml function foo : newty -> int, I have >> something like this; >> CAMLprim value foo (value v) { ... } >> In the body of this function I am looking at the fields of val. Am I doing >> something wrong here? >> > > Please have a look at: > http://caml.inria.fr/mantis/view.php?id=4803 > > This section is misleading. You should use hash_variant for `VConstr. > > In your case VConstr of int will be Block with size = 1 and tag = 0; > first non-constant constructor and first field contains Value_int(...) If I am creating an OCaml variant (string option) from C, say using 'alloc', does it matter which tag I am using for 'some'? Can it be only tag 0? I was looking at LLVM OCamling bindings, sometimes the 'some' is also of 'tag 1', which confused me. If my variant is A | B | C of int | D of int, does C have to start from tag 0? and D must be 1? Similarly, does A have to be assigned into Val_int(0), and B is from 1? Thanks. Zjz > > Regards > Sylvain Le Gall > > > _______________________________________________ > Caml-list mailing list. Subscription management: > http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list > Archives: http://caml.inria.fr > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs >