Uri Guttman <[EMAIL PROTECTED]> wrote:

>       printf( "%d event.type\n", (char *)&kbevent.type ) - (char *)&kbevent ;

  offsetof(struct, item)

is used inside parrot/jit/*

> want me to hack up this little script and c generation stuff? the hard
> part is parsing the struct so i would have to assume some simple format
> and not full c for the moment. the only thing needed by the parser is
> all the member names.

Very much appreciated.


I thought of that too. A Perl script that takes a C struct and emits an
*ManagedStruct initializer. WRT align: as such struct initializers are
in library code and used by different machines, I'd rather have the
alignment calculation inside the unmanagedstruct.pmc.

But as a last resort this script could regenerate the offsets for a
particular machine.

## &gen_struct()
#  struct event_t {
#     char x;      /* optional comment */
#     char y;
#     int  flags;
#  };
## &end_gen

## autogenerated from above template
## don't modifiy - rerun gen_struct $file
   .local pmc event_t_struct_init
   .include "datatypes.pasm"
   event_t_struct_init = new .OrderedHash
   event_t_struct_init["x"] = .DATATYPE_CHAR  # optional comment
   event_t_struct_init[1] = 0    # no array of items
   event_t_struct_init[2] = 0    # automatic offset
   event_t_struct_init["y"] = .DATATYPE_CHAR
   event_t_struct_init[4] = 0    # no array of items
   event_t_struct_init[5] = 0    # automatic offset
   event_t_struct_init["flags"] = .DATATYPE_INT
   event_t_struct_init[7] = 0    # no array of items
   event_t_struct_init[8] = 0    # automatic offset _or_ 4/8
## end autogen

  gen_struct --force-align file.imc

could fill in the correct offset in the last line.
Running gen_struct the first time should produce the autogenerated part.

For PASM only, it could look like:

## &gen_struct(P23)
...
   new P23, .OrderedHash
   set P23["x"],  ...

You might have a look at F<runtime/parrot/include/datatypes.pasm> which
is autogenerated too. *Struct.pmc doesn't yet handle all types, but this
will be fixed.

> uri

leo

Reply via email to