From eba82f4391a8259f4e1454e5c007c05fe8171ff8 Mon Sep 17 00:00:00 2001 From: Ken Thompson Date: Thu, 18 Jun 2009 15:49:41 -0700 Subject: [PATCH] better diagnostics for eof in a string. this assumes that embedded newlines are legal in back-quote strings. R=r OCL=30502 CL=30502 --- src/cmd/gc/lex.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) 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; -- 2.48.1