Version française
Home     About     Download     Resources     Contact us    
Browse thread
OCaml/C variant representation
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
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
>