1
0
mirror of https://github.com/golang/go synced 2024-11-21 22:04:39 -07:00

go/printer: don't crash if AST contains BadXXX nodes

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5535048
This commit is contained in:
Robert Griesemer 2012-01-11 08:32:03 -08:00
parent b1bad5530a
commit a30b172ca0
2 changed files with 21 additions and 1 deletions

View File

@ -773,8 +773,13 @@ func (p *printer) print(args ...interface{}) {
next = p.fset.Position(x) // accurate position of next item
}
tok = p.lastTok
case string:
// incorrect AST - print error message
data = x
isLit = true
tok = token.STRING
default:
fmt.Fprintf(os.Stderr, "print: unsupported argument type %T\n", f)
fmt.Fprintf(os.Stderr, "print: unsupported argument %v (%T)\n", f, f)
panic("go/printer type")
}
p.lastTok = tok

View File

@ -204,3 +204,18 @@ func init() {
panic("got " + s + ", want " + name)
}
}
// Verify that the printer doesn't crash if the AST contains BadXXX nodes.
func TestBadNodes(t *testing.T) {
const src = "package p\n("
const res = "package p\nBadDecl\n"
f, err := parser.ParseFile(fset, "", src, parser.ParseComments)
if err == nil {
t.Errorf("expected illegal program")
}
var buf bytes.Buffer
Fprint(&buf, fset, f)
if buf.String() != res {
t.Errorf("got %q, expected %q", buf.String(), res)
}
}