cmd/compile: rationalize (lex)?lineno handling
Previously, many error messages inconsistantly used either lexlineno and lineno. In general this works out okay because they're almost always the same. The only exceptional case is after lexing a multi-line raw string literal, where lineno will be the line number of the opening quote and lexlineno is the line number of the closing quote. This CL makes the compiler's error message more consistent: - Lexer error messages related to invalid byte sequences (i.e., NUL bytes, bad UTF-8 sequences, and non-initial BOMs) are emitted at lexlineno (i.e., the source line that contains the invalid byte sequence). - All other error messages (notably the parser's "syntax errors") now use lineno. The minor change from this is that bogus input like: package ` bogus` will emit "syntax error: unexpected string literal, expecting name" error at line 1, instead of line 2. - Instead of maintaining prevlineno all the time, just record it when/where actually needed and not already available elsewhere (which turns out to be just one function). - Lastly, we remove the legacy "syntax error near ..." fallback in Yerror, now that the parser always emits more detailed syntax error messages. Change-Id: Iaf5f784223d0385fa3a5b09ef2b2ad447feab02f Reviewed-on: https://go-review.googlesource.com/19925Reviewed-by: Robert Griesemer <gri@golang.org>
Showing
Please register or sign in to comment