From: Ken Thompson Date: Thu, 18 Jun 2009 22:49:41 +0000 (-0700) Subject: better diagnostics for eof in a string. X-Git-Tag: weekly.2009-11-06~1374 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=eba82f4391a8259f4e1454e5c007c05fe8171ff8;p=gostls13.git better diagnostics for eof in a string. this assumes that embedded newlines are legal in back-quote strings. R=r OCL=30502 CL=30502 --- diff --git a/src/cmd/gc/lex.c b/src/cmd/gc/lex.c index 0efa665ee9..2cad4310eb 100644 --- a/src/cmd/gc/lex.c +++ b/src/cmd/gc/lex.c @@ -371,11 +371,11 @@ isfrog(int c) static int32 _yylex(void) { - int c, c1, clen; + int c, c1, clen, escflag; vlong v; char *cp; Rune rune; - int escflag; + int32 lno; Sym *s; prevlineno = lineno; @@ -459,9 +459,14 @@ l0: clen = sizeof(int32); casebq: + lno = lineno; for(;;) { c = getc(); - if(c == EOF || c == '`') + if(c == EOF) { + yyerror("eof in string starting at line %L", lno); + break; + } + if(c == '`') break; cp = remal(cp, clen, 1); cp[clen++] = c; @@ -1082,11 +1087,16 @@ escchar(int e, int *escflg, vlong *val) loop: c = getr(); - if(c == '\n') { + switch(c) { + case EOF: + yyerror("eof in string"); + return 1; + case '\n': yyerror("newline in string"); return 1; - } - if(c != '\\') { + case '\\': + break; + default: if(c == e) return 1; *val = c;