1
0
mirror of https://github.com/golang/go synced 2024-11-20 06:04:52 -07:00

godefs: better handling of enums

Fixes #432.

R=r, r2
CC=golang-dev
https://golang.org/cl/3869043
This commit is contained in:
Russ Cox 2011-01-11 11:12:15 -05:00
parent 9f178edf51
commit 5b8bcf2324
2 changed files with 13 additions and 2 deletions

View File

@ -373,6 +373,8 @@ Continue:
prefix = prefixlen(t);
for(j=0; j<t->nf; j++) {
f = &t->f[j];
if(f->type->kind == 0)
continue;
// padding
if(t->kind == Struct || lang == &go) {
if(f->offset%8 != 0 || f->size%8 != 0) {

View File

@ -363,13 +363,22 @@ parsedef(char **pp, char *name)
return nil;
}
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;
// into
// uint8 x;
// hooray for bitfields.
while(f->type->kind == Typedef)
f->type = f->type->type;
while(Int16 <= f->type->kind && f->type->kind <= Uint64 && kindsize[f->type->kind] > f->size) {
tt = emalloc(sizeof *tt);
*tt = *f->type;