From 49b70d01c07be39ede5f4431d0f36415d01f676d Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 27 Jul 2011 14:36:21 -0400 Subject: [PATCH] gc: echo literal in error message Fixes #1192. R=ken2 CC=golang-dev https://golang.org/cl/4794062 --- src/cmd/gc/go.h | 1 + src/cmd/gc/lex.c | 14 ++++++++++++++ test/fixedbugs/bug349.go | 13 +++++++++++++ 3 files changed, 28 insertions(+) create mode 100644 test/fixedbugs/bug349.go diff --git a/src/cmd/gc/go.h b/src/cmd/gc/go.h index f7d6597603..dfc5887a5c 100644 --- a/src/cmd/gc/go.h +++ b/src/cmd/gc/go.h @@ -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 diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 5c642375a3..21ac779a9f 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -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