summaryrefslogtreecommitdiff
path: root/src/cmd/gc/subr.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/cmd/gc/subr.c')
-rw-r--r--src/cmd/gc/subr.c40
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) {