diff options
-rw-r--r-- | src/cmd/godoc/godoc.go | 8 | ||||
-rw-r--r-- | src/pkg/go/token/token.go | 16 |
2 files changed, 14 insertions, 10 deletions
diff --git a/src/cmd/godoc/godoc.go b/src/cmd/godoc/godoc.go index 4fe628fb5..688806c42 100644 --- a/src/cmd/godoc/godoc.go +++ b/src/cmd/godoc/godoc.go @@ -213,19 +213,21 @@ func nodeText(node interface{}) []byte { // Convert x, whatever it is, to text form. func toText(x interface{}) []byte { - type String interface { String() string } + type Stringer interface { String() string } switch v := x.(type) { case []byte: return v; case string: return strings.Bytes(v); - case String: - return strings.Bytes(v.String()); case ast.Decl: return nodeText(v); case ast.Expr: return nodeText(v); + case Stringer: + // last resort (AST nodes get a String method + // from token.Position - don't call that one) + return strings.Bytes(v.String()); } var buf bytes.Buffer; fmt.Fprint(&buf, x); diff --git a/src/pkg/go/token/token.go b/src/pkg/go/token/token.go index 61a0c622c..32958b53f 100644 --- a/src/pkg/go/token/token.go +++ b/src/pkg/go/token/token.go @@ -353,15 +353,17 @@ func (pos *Position) IsValid() bool { func (pos *Position) String() string { - s := pos.Filename; - if pos.IsValid() { + if pos != nil { + s := pos.Filename; + if pos.IsValid() { + if s != "" { + s += ":"; + } + s += fmt.Sprintf("%d:%d", pos.Line, pos.Column); + } if s != "" { - s += ":"; + return s; } - s += fmt.Sprintf("%d:%d", pos.Line, pos.Column); - } - if s != "" { - return s; } return "<unknown position>"; } |