How to handle nested structs when converting C headers?

In the following snippet i'm currently converting, how would you convert the nested typed union and structures? Would you declare them separately then use their types in the Tcl_Obj struct? or is there a nice way in D to nest them like C?

typedef struct Tcl_Obj {
    int refCount;               /* When 0 the object will be freed. */
    char *bytes;                /* This points to the first byte of the
                                 * object's string representation. The array
                                 * must be followed by a null byte (i.e., at
                                 * offset length) but may also contain
                                 * embedded null characters. The array's
                                 * storage is allocated by ckalloc. NULL means
                                 * the string rep is invalid and must be
                                 * regenerated from the internal rep.  Clients
                                 * should use Tcl_GetStringFromObj or
                                 * Tcl_GetString to get a pointer to the byte
                                 * array as a readonly value. */
    int length;                 /* The number of bytes at *bytes, not
                                 * including the terminating null. */
    Tcl_ObjType *typePtr;       /* Denotes the object's type. Always
                                 * corresponds to the type of the object's
                                 * internal rep. NULL indicates the object has
                                 * no internal rep (has no type). */
    union {                     /* The internal representation: */
        long longValue;         /*   - an long integer value. */
        double doubleValue;     /*   - a double-precision floating value. */
        VOID *otherValuePtr;    /*   - another, type-specific value. */
        Tcl_WideInt wideValue;  /*   - a long long value. */
        struct {                /*   - internal rep as two pointers. */
            VOID *ptr1;
            VOID *ptr2;
        } twoPtrValue;
        struct {                /*   - internal rep as a wide int, tightly
                                 *     packed fields. */
            VOID *ptr;          /* Pointer to digits. */
            unsigned long value;/* Alloc, used, and signum packed into a
                                 * single word. */
        } ptrAndLongRep;
    } internalRep;
} Tcl_Obj;

Reply via email to