From: Robert Griesemer Date: Wed, 5 Jan 2011 18:08:39 +0000 (-0800) Subject: go/ast: correct Pos/End ranges for field lists X-Git-Tag: weekly.2011-01-06~17 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=4a7d1f2061e9211532c443713872db0859cd70d4;p=gostls13.git go/ast: correct Pos/End ranges for field lists R=rsc CC=golang-dev https://golang.org/cl/3797045 --- diff --git a/src/pkg/go/ast/ast.go b/src/pkg/go/ast/ast.go index e5f2190d13..15fef44565 100644 --- a/src/pkg/go/ast/ast.go +++ b/src/pkg/go/ast/ast.go @@ -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.