diff options
author | Robert Griesemer <gri@golang.org> | 2009-07-30 19:39:47 -0700 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2009-07-30 19:39:47 -0700 |
commit | dabb97986841f70cd9d71444060b677d98e6f302 (patch) | |
tree | 4e83dc1ac1294f6917378602d5112ac67af1978d | |
parent | c56ea4eaffb284100a5fda37d4322c328af0e419 (diff) | |
download | golang-dabb97986841f70cd9d71444060b677d98e6f302.tar.gz |
- don't call String method of AST nodes when converting them to text
- make token.Position.String more robust
TBR=rsc
DELTA=20 (10 added, 6 deleted, 4 changed)
OCL=32564
CL=32564
-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>"; } |