extern int ncon;
extern Type **typ;
extern int ntyp;
+extern int kindsize[];
// Language output
typedef struct Lang Lang;
char **av, *q, *r, *tofree, *name;
char nambuf[100];
Biobuf *bin, *bout;
- Type *t;
+ Type *t, *tt;
Field *f;
int orig_output_fd;
prefix = prefixlen(t);
for(j=0; j<t->nf; j++) {
f = &t->f[j];
- if(f->type->kind == 0)
- continue;
+ if(f->type->kind == 0 && f->size <= 64 && (f->size&(f->size-1)) == 0) {
+ // unknown type but <= 64 bits and bit size is a power of two.
+ // could be enum - make Uint64 and then let it reduce
+ tt = emalloc(sizeof *tt);
+ *tt = *f->type;
+ f->type = tt;
+ tt->kind = Uint64;
+ while(tt->kind > Uint8 && kindsize[tt->kind] > f->size)
+ tt->kind -= 2;
+ }
// padding
if(t->kind == Struct || lang == &go) {
if(f->offset%8 != 0 || f->size%8 != 0) {
16, 0, Void,
};
-static int kindsize[] = {
+int kindsize[] = {
0,
0,
8,
while(f->type->kind == Typedef)
f->type = f->type->type;
- if(f->type->kind == 0 && f->size <= 64 && (f->size&(f->size-1)) == 0) {
- // unknown type but <= 64 bits and bit size is a power of two.
- // could be enum - make Uint64 and then let it reduce
- tt = emalloc(sizeof *tt);
- *tt = *f->type;
- f->type = tt;
- tt->kind = Uint64;
- }
// rewrite
// uint32 x : 8;
// MACHINE GENERATED - DO NOT EDIT.
-// Manual corrections: TODO: need to fix godefs (issue 1466)
-// change Msghdr field to Iov *Iovec (was uint32/64)
-// change BpfProgram field to Insns *BpfInsn (was uint32/64)
-
package syscall
// Constants
// MACHINE GENERATED - DO NOT EDIT.
-// Manual corrections: TODO: need to fix godefs (issue 1466)
-// change Msghdr field to Iov *Iovec (was uint32/64)
-// change BpfProgram field to Insns *BpfInsn (was uint32/64)
-
package syscall
// Constants