]> Cypherpunks repositories - gostls13.git/commitdiff
gc: echo literal in error message
authorRuss Cox <rsc@golang.org>
Wed, 27 Jul 2011 18:36:21 +0000 (14:36 -0400)
committerRuss Cox <rsc@golang.org>
Wed, 27 Jul 2011 18:36:21 +0000 (14:36 -0400)
Fixes #1192.

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

src/cmd/gc/go.h
src/cmd/gc/lex.c
test/fixedbugs/bug349.go [new file with mode: 0644]

index f7d65976035228c7217236541551a4a5edd39fb4..dfc5887a5c59bb7a2d464e1e5c91a4cf2ef79a3f 100644 (file)
@@ -698,6 +698,7 @@ EXTERN      int     nsyntaxerrors;
 EXTERN int     safemode;
 EXTERN char    namebuf[NSYMB];
 EXTERN char    lexbuf[NSYMB];
+EXTERN char    litbuf[NSYMB];
 EXTERN char    debug[256];
 EXTERN Sym*    hash[NHASH];
 EXTERN Sym*    importmyname;   // my name for package
index 5c642375a39f6eeefcfea157167d23611a78555b..21ac779a9f9b9e190a4e8ed06864dceaa8ac035a 100644 (file)
@@ -728,6 +728,7 @@ l0:
                yylval.val.u.sval = (Strlit*)cp;
                yylval.val.ctype = CTSTR;
                DBG("lex: string literal\n");
+               strcpy(litbuf, "string literal");
                return LLITERAL;
 
        case '\'':
@@ -744,6 +745,7 @@ l0:
                mpmovecfix(yylval.val.u.xval, v);
                yylval.val.ctype = CTINT;
                DBG("lex: codepoint literal\n");
+               strcpy(litbuf, "string literal");
                return LLITERAL;
 
        case '/':
@@ -1133,6 +1135,8 @@ ncu:
        }
        yylval.val.ctype = CTINT;
        DBG("lex: integer literal\n");
+       strcpy(litbuf, "literal ");
+       strcat(litbuf, lexbuf);
        return LLITERAL;
 
 casedot:
@@ -1205,6 +1209,8 @@ casei:
        }
        yylval.val.ctype = CTCPLX;
        DBG("lex: imaginary literal\n");
+       strcpy(litbuf, "literal ");
+       strcat(litbuf, lexbuf);
        return LLITERAL;
 
 caseout:
@@ -1219,6 +1225,8 @@ caseout:
        }
        yylval.val.ctype = CTFLT;
        DBG("lex: floating literal\n");
+       strcpy(litbuf, "literal ");
+       strcat(litbuf, lexbuf);
        return LLITERAL;
 }
 
@@ -1859,6 +1867,12 @@ yytinit(void)
        for(i=0; yytname[i] != nil; i++) {
                s = yytname[i];
                
+               if(strcmp(s, "LLITERAL") == 0) {
+                       strcpy(litbuf, "literal");
+                       yytname[i] = litbuf;
+                       goto loop;
+               }
+               
                // apply yytfix if possible
                for(j=0; j<nelem(yytfix); j++) {
                        if(strcmp(s, yytfix[j].have) == 0) {
diff --git a/test/fixedbugs/bug349.go b/test/fixedbugs/bug349.go
new file mode 100644 (file)
index 0000000..0700597
--- /dev/null
@@ -0,0 +1,13 @@
+// errchk $G $D/$F.go
+
+// Copyright 2011 The Go Authors.  All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// issue 1192 - detail in error
+
+package main
+
+func foo() (a, b, c int) {
+       return 0, 1 2.01  // ERROR "unexpected literal 2.01"
+}