[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v2-resend 08/30] libxl: ocaml: support for KeyedUnion in the bindings generator.

Rob Hoes writes ("[Xen-devel] [PATCH v2-resend 08/30] libxl: ocaml: support for 
KeyedUnion in the bindings generator."):
> A KeyedUnion consists of two fields in the containing struct. First an
> enum field ("e") used as a descriminator and second a union ("u")
> containing potentially anonymous structs associated with each enum
> value.
> foo = Enumeration("foo", [
>     (0, "BAR"),
>     (1, "BAZ"),
> ])
> s = Struct("s", [
>     ("u", KeyedUnion(none, foo, "blargle", [
>         ("bar", Struct(...xxx...)),
>         ("baz", Struct(...yyy...)),

I think you have some confusion betwwen bar,baz and foo,bar ?  At
least, I hope so, as otherwise I haven't understood at all.

> and map this to ocaml
> type foo = BAR | BAZ;
> module S = struct
>     type blargle_bar = ...xxx...;
>     type blargle_baz = ...yyy...;
>     type blargle__union = Bar of blargle_bar | Baz of blargle_baz;
>     type t =
>     {
>         blargle : blargle__union;
>     }
> end

Is this indirection (through S.t) really needed ?  It seems a bit
ugly.  But I'm no expert on ocaml syntax or style.

> These type names are OK because they are already within the namespace
> associated with the struct "s".
> If the struct associated with bar is empty then we don't bother with
> blargle_bar of "of blargle_bar".

I'm not sure I follow this observation.

I don't intend to review the actual generator and will instead take on
trust that it does what you say :-).


Xen-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.