1
0
mirror of https://github.com/golang/go synced 2024-11-19 14:54:43 -07:00

godefs: do not assume forward type references are enums

Fixes #1466.

R=mikioh.mikioh, rsc
CC=golang-dev
https://golang.org/cl/4564043
This commit is contained in:
Robert Hencke 2011-06-07 14:28:10 -04:00 committed by Russ Cox
parent c5030e5f4b
commit 8cd7aac223
5 changed files with 13 additions and 20 deletions

View File

@ -75,6 +75,7 @@ extern Const *con;
extern int ncon;
extern Type **typ;
extern int ntyp;
extern int kindsize[];
// Language output
typedef struct Lang Lang;

View File

@ -181,7 +181,7 @@ main(int argc, char **argv)
char **av, *q, *r, *tofree, *name;
char nambuf[100];
Biobuf *bin, *bout;
Type *t;
Type *t, *tt;
Field *f;
int orig_output_fd;
@ -373,8 +373,16 @@ Continue:
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) {

View File

@ -149,7 +149,7 @@ Intrange intranges[] = {
16, 0, Void,
};
static int kindsize[] = {
int kindsize[] = {
0,
0,
8,
@ -381,14 +381,6 @@ parsedef(char **pp, char *name)
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;

View File

@ -2,10 +2,6 @@
// 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

View File

@ -2,10 +2,6 @@
// 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