]> Cypherpunks repositories - gostls13.git/commitdiff
gc: fix use of typekind array in error messages
authorRuss Cox <rsc@golang.org>
Thu, 14 Apr 2011 13:33:53 +0000 (09:33 -0400)
committerRuss Cox <rsc@golang.org>
Thu, 14 Apr 2011 13:33:53 +0000 (09:33 -0400)
Fixes #1697.

R=ken2
CC=golang-dev
https://golang.org/cl/4395045

src/cmd/gc/typecheck.c

index 1cc5abd5c3c678bb1cc556c4143d873c41a2cc22..42e177e211c9e6d0ea708a12d19d850c09365021 100644 (file)
@@ -56,7 +56,7 @@ typechecklist(NodeList *l, int top)
                typecheck(&l->n, top);
 }
 
-static char* typekind[] = {
+static char* _typekind[] = {
        [TINT]          = "int",
        [TUINT]         = "uint",
        [TINT8]         = "int8",
@@ -82,8 +82,22 @@ static char* typekind[] = {
        [TMAP]          = "map",
        [TARRAY]        = "array",
        [TFUNC]         = "func",
+       [TNIL]          = "nil",
+       [TIDEAL]        = "ideal number",
 };
 
+static char*
+typekind(int et)
+{
+       static char buf[50];
+       char *s;
+       
+       if(0 <= et && et < nelem(_typekind) && (s=_typekind[et]) != nil)
+               return s;
+       snprint(buf, sizeof buf, "etype=%d", et);
+       return buf;
+}
+
 /*
  * type check node *np.
  * replaces *np with a new pointer in some cases.
@@ -406,7 +420,7 @@ reswitch:
                }
                if(!okfor[op][et]) {
                notokfor:
-                       yyerror("invalid operation: %#N (operator %#O not defined on %s)", n, op, typekind[et]);
+                       yyerror("invalid operation: %#N (operator %#O not defined on %s)", n, op, typekind(et));
                        goto error;
                }
                // okfor allows any array == array;