Commit a30b172c authored by Robert Griesemer's avatar Robert Griesemer

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

R=golang-dev, rsc
CC=golang-dev
https://golang.org/cl/5535048
parent b1bad553
......@@ -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
......
......@@ -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)
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment