]> Cypherpunks repositories - gostls13.git/commitdiff
go/ast: correct Pos/End ranges for field lists
authorRobert Griesemer <gri@golang.org>
Wed, 5 Jan 2011 18:08:39 +0000 (10:08 -0800)
committerRobert Griesemer <gri@golang.org>
Wed, 5 Jan 2011 18:08:39 +0000 (10:08 -0800)
R=rsc
CC=golang-dev
https://golang.org/cl/3797045

src/pkg/go/ast/ast.go

index e5f2190d13743f0d1eaf8690b82f2e55d9eb23c8..15fef4456536bdf0cda20a84515d559d72824910 100644 (file)
@@ -120,14 +120,36 @@ func (f *Field) End() token.Pos {
 
 // A FieldList represents a list of Fields, enclosed by parentheses or braces.
 type FieldList struct {
-       Opening token.Pos // position of opening parenthesis/brace
+       Opening token.Pos // position of opening parenthesis/brace, if any
        List    []*Field  // field list
-       Closing token.Pos // position of closing parenthesis/brace
+       Closing token.Pos // position of closing parenthesis/brace, if any
 }
 
 
-func (list *FieldList) Pos() token.Pos { return list.Opening }
-func (list *FieldList) End() token.Pos { return list.Closing + 1 }
+func (f *FieldList) Pos() token.Pos {
+       if f.Opening.IsValid() {
+               return f.Opening
+       }
+       // the list should not be empty in this case;
+       // be conservative and guard against bad ASTs
+       if len(f.List) > 0 {
+               return f.List[0].Pos()
+       }
+       return token.NoPos
+}
+
+
+func (f *FieldList) End() token.Pos {
+       if f.Closing.IsValid() {
+               return f.Closing + 1
+       }
+       // the list should not be empty in this case;
+       // be conservative and guard against bad ASTs
+       if n := len(f.List); n > 0 {
+               return f.List[n-1].End()
+       }
+       return token.NoPos
+}
 
 
 // NumFields returns the number of (named and anonymous fields) in a FieldList.