Am Donnerstag, 5. Februar 2004 09:45 schrieb Leopold Toetsch: > 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. I'am currently writing a simple C-parser in imc. My plan is to extract all structs, enums, unions and typedefs in order to create ManagedStructs automatically. If one goes even a step further, it should even be possible to create pasm/imc wrapper for C functions automatically. The tokeniser is already working, but the token processing is of course not very simple, but I think I will have a first working alpha version within the next few days.
> 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 jens