mirror of
https://github.com/golang/go.git
synced 2024-09-22 10:58:58 +00:00
- 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
This commit is contained in:
parent
c670dc450b
commit
9299ae461d
@ -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);
|
||||
|
@ -353,15 +353,17 @@ func (pos *Position) IsValid() bool {
|
||||
|
||||
|
||||
func (pos *Position) String() string {
|
||||
s := pos.Filename;
|
||||
if pos.IsValid() {
|
||||
if s != "" {
|
||||
s += ":";
|
||||
if pos != nil {
|
||||
s := pos.Filename;
|
||||
if pos.IsValid() {
|
||||
if s != "" {
|
||||
s += ":";
|
||||
}
|
||||
s += fmt.Sprintf("%d:%d", pos.Line, pos.Column);
|
||||
}
|
||||
if s != "" {
|
||||
return s;
|
||||
}
|
||||
s += fmt.Sprintf("%d:%d", pos.Line, pos.Column);
|
||||
}
|
||||
if s != "" {
|
||||
return s;
|
||||
}
|
||||
return "<unknown position>";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user