diff options
Diffstat (limited to 'src/cmd/gc/subr.c')
-rw-r--r-- | src/cmd/gc/subr.c | 40 |
1 files changed, 14 insertions, 26 deletions
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c index d2c6a13ce..90f11af5e 100644 --- a/src/cmd/gc/subr.c +++ b/src/cmd/gc/subr.c @@ -1418,37 +1418,25 @@ signame(Type *t) Sym *s, *ss; char *e; -loop: - if(t == T) { -// print("signame: nil type\n"); + if(t == T) goto bad; - } - - switch(t->etype) { - default: - e = "sigs"; - break; - - case TPTR32: - case TPTR64: - t = t->type; - goto loop; - - case TINTER: - e = "sigi"; - break; - } s = t->sym; - if(s == S) { -// print("signame: no type name\n"); - goto bad; - } - if(s->name[0] == '_') { -// print("signame: temp type name %S\n", s); - goto bad; + if(s == S || s->name[0] == '_') { + if(isptr[t->etype]) { + t = t->type; + if(t == T) + goto bad; + } + s = t->sym; + if(s == S || s->name[0] == '_') + goto bad; } + e = "sigt"; + if(t->etype == TINTER) + e = "sigi"; + snprint(namebuf, sizeof(namebuf), "%s_%s", e, s->name); ss = pkglookup(namebuf, s->opackage); if(ss->oname == N) { |