summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/cmd/godoc/godoc.go8
-rw-r--r--src/pkg/go/token/token.go16
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>";
}