• Robert Griesemer's avatar
    go/scanner: recognize //line and /*line directives incl. columns · 99c30211
    Robert Griesemer authored
    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/97795Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
    99c30211
scanner.go 20 KB