]> Cypherpunks.ru repositories - gostls13.git/commitdiff
go/token: add (*File).Lines method
authorAlan Donovan <adonovan@google.com>
Wed, 1 Feb 2023 19:15:41 +0000 (14:15 -0500)
committerAlan Donovan <adonovan@google.com>
Thu, 2 Feb 2023 16:40:29 +0000 (16:40 +0000)
This method returns the array updated by SetLines, for
use in exporter packages.

Fixes #57708

Change-Id: I12ed5e7e1bae7517f40cb25e76e51997c25d84f4
Reviewed-on: https://go-review.googlesource.com/c/go/+/464515
Reviewed-by: Robert Griesemer <gri@google.com>
Reviewed-by: Robert Findley <rfindley@google.com>
Run-TryBot: Alan Donovan <adonovan@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Auto-Submit: Alan Donovan <adonovan@google.com>

api/next/57708.txt [new file with mode: 0644]
src/go/token/position.go
src/go/token/position_test.go

diff --git a/api/next/57708.txt b/api/next/57708.txt
new file mode 100644 (file)
index 0000000..c7389ad
--- /dev/null
@@ -0,0 +1 @@
+pkg go/token, method (*File) Lines() []int #57708
index cbc2ddb5ebde2dd64babcffc92bebafcfa4b3817..4d129d938f52c113b16890c09f0062978370a7d6 100644 (file)
@@ -159,6 +159,15 @@ func (f *File) MergeLine(line int) {
        f.lines = f.lines[:len(f.lines)-1]
 }
 
+// Lines returns the effective line offset table of the form described by SetLines.
+// Callers must not mutate the result.
+func (f *File) Lines() []int {
+       f.mutex.Lock()
+       lines := f.lines
+       f.mutex.Unlock()
+       return lines
+}
+
 // SetLines sets the line offsets for a file and reports whether it succeeded.
 // The line offsets are the offsets of the first character of each line;
 // for instance for the content "ab\nc\n" the line offsets are {0, 3}.
index 65cb24280897fcb47474b9d0c567f0ddba6ee530..19774a97ba2c003da42cdc0f3c56716a5b31279e 100644 (file)
@@ -130,6 +130,9 @@ func TestPositions(t *testing.T) {
                if f.LineCount() != len(test.lines) {
                        t.Errorf("%s, SetLines: got line count %d; want %d", f.Name(), f.LineCount(), len(test.lines))
                }
+               if !reflect.DeepEqual(f.Lines(), test.lines) {
+                       t.Errorf("%s, Lines after SetLines(v): got %v; want %v", f.Name(), f.Lines(), test.lines)
+               }
                verifyPositions(t, fset, f, test.lines)
 
                // add lines with SetLinesForContent and verify all positions