]> Cypherpunks repositories - gostls13.git/commit
go/scanner: recognize //line and /*line directives incl. columns
authorRobert Griesemer <gri@golang.org>
Thu, 1 Mar 2018 22:23:46 +0000 (14:23 -0800)
committerRobert Griesemer <gri@golang.org>
Fri, 9 Mar 2018 23:11:59 +0000 (23:11 +0000)
commit99c30211b1e0b3ac4e5d32f3ae5eaf759c23195f
tree107dcc30bbfd8b803d896966dc7a8484f76eaebb
parent20046020c4f0b69e89411d9db35b78942392033e
go/scanner: recognize //line and /*line directives incl. columns

This change updates go/scanner to recognize the extended line
directives that are now also handled by cmd/compile:

//line filename:line
//line filename:line:column
/*line filename:line*/
/*line filename:line:column*/

As before, //-style line directives must start in column 1.
/*-style line directives may be placed anywhere in the code.
In both cases, the specified position applies to the character
immediately following the comment; for line comments that is
the first character on the next line (after the newline of the
comment).

The go/token API is extended by a new method

File.AddLineColumnInfo(offset int, filename string, line, column int)

which extends the existing

File.AddLineInfo(offset int, filename string, line int)

by adding a column parameter.

Adjusted token.Position computation is changed to take into account
column information if provided via a line directive: A (line-directive)
relative position will have a non-zero column iff the line directive
specified a column; if the position is on the same line as the line
directive, the column is relative to the specified column (otherwise
it is relative to the line beginning). See also #24183.

Finally, Position.String() has been adjusted to not print a column
value if the column is unknown (== 0).

Fixes #24143.

Change-Id: I5518c825ad94443365c049a95677407b46ba55a1
Reviewed-on: https://go-review.googlesource.com/97795
Reviewed-by: Matthew Dempsky <mdempsky@google.com>
src/go/scanner/scanner.go
src/go/scanner/scanner_test.go
src/go/token/position.go