diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/cmd/acidtypes/sym.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/cmd/acidtypes/sym.c b/src/cmd/acidtypes/sym.c new file mode 100644 index 00000000..7250ed44 --- /dev/null +++ b/src/cmd/acidtypes/sym.c @@ -0,0 +1,50 @@ +#include <u.h> +#include <errno.h> +#include <libc.h> +#include <bio.h> +#include <mach.h> +#include <stabs.h> +#include <ctype.h> +#include "dat.h" + +Sym *symbols; +Sym **lsym; + +void +addsymx(char *fn, char *name, Type *type) +{ + Sym *s; + + s = emalloc(sizeof *s); + s->fn = fn; + s->name = name; + s->type = type; + if(lsym == nil) + lsym = &symbols; + *lsym = s; + lsym = &s->next; +} + +void +dumpsyms(Biobuf *b) +{ + Sym *s; + Type *t; + + for(s=symbols; s; s=s->next){ + t = s->type; + t = defer(t); + if(t->ty == Pointer){ + t = t->sub; + if(t && t->equiv) + t = t->equiv; + } + if(t == nil || t->ty != Aggr) + continue; + Bprint(b, "complex %s %s%s%s;\n", nameof(t, 1), + s->fn ? fixname(s->fn) : "", s->fn ? ":" : "", fixname(s->name)); + } + + symbols = nil; + lsym = &symbols; +} |