summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-03-09 15:09:37 -0800
committerRuss Cox <rsc@golang.org>2010-03-09 15:09:37 -0800
commit4920e345473d3a667cce4e1824981625fb323d6c (patch)
tree075342e0473c139778d1cb505c8795000fc6f50f
parent4c80ee5969a17e5a1fde0d65d71aa514fca87e26 (diff)
downloadgolang-4920e345473d3a667cce4e1824981625fb323d6c.tar.gz
gc: remove duplicate errors, give better error for I.(T)
R=ken2 CC=golang-dev http://codereview.appspot.com/370041
-rw-r--r--src/cmd/gc/subr.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/src/cmd/gc/subr.c b/src/cmd/gc/subr.c
index eaf673f74..97bb60d2e 100644
--- a/src/cmd/gc/subr.c
+++ b/src/cmd/gc/subr.c
@@ -79,7 +79,7 @@ errcmp(const void *va, const void *vb)
return a->lineno - b->lineno;
if(a->seq != b->seq)
return a->seq - b->seq;
- return 0;
+ return strcmp(a->msg, b->msg);
}
void
@@ -91,7 +91,8 @@ flusherrors(void)
return;
qsort(err, nerr, sizeof err[0], errcmp);
for(i=0; i<nerr; i++)
- print("%s", err[i].msg);
+ if(i==0 || strcmp(err[i].msg, err[i-1].msg) != 0)
+ print("%s", err[i].msg);
nerr = 0;
}
@@ -3082,11 +3083,19 @@ runifacechecks(void)
needexplicit = 1;
}
if(wrong) {
- if(samename)
- yyerror("%T is not %T\n\tmissing %S%hhT\n\tdo have %S%hhT",
- t, iface, m->sym, m->type, samename->sym, samename->type);
- else
- yyerror("%T is not %T\n\tmissing %S%hhT", t, iface, m->sym, m->type);
+ if(p->explicit) {
+ if(samename)
+ yyerror("%T cannot contain %T\n\tmissing %S%hhT\n\tdo have %S%hhT",
+ iface, t, m->sym, m->type, samename->sym, samename->type);
+ else
+ yyerror("%T cannot contain %T\n\tmissing %S%hhT", iface, t, m->sym, m->type);
+ } else {
+ if(samename)
+ yyerror("%T is not %T\n\tmissing %S%hhT\n\tdo have %S%hhT",
+ t, iface, m->sym, m->type, samename->sym, samename->type);
+ else
+ yyerror("%T is not %T\n\tmissing %S%hhT", t, iface, m->sym, m->type);
+ }
}
else if(!p->explicit && needexplicit) {
if(m) {