aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2009-11-09 22:30:07 -0800
committerRobert Griesemer <gri@golang.org>2009-11-09 22:30:07 -0800
commit3d668c1b5dbd6c693ed1db56b3d156184d9dc5d9 (patch)
tree5c20f8b0e28a41ee097cf72ca4cd168ed68c034c
parent3bb0032cd6187ca1f42b68599b94036cb6b7e054 (diff)
downloadgo-3d668c1b5dbd6c693ed1db56b3d156184d9dc5d9.tar.gz
go-3d668c1b5dbd6c693ed1db56b3d156184d9dc5d9.zip
- minor cleanups
- better debugging support - gofmt -l src misc | wc -l is 0 R=rsc http://go/go-review/1024042
-rw-r--r--src/pkg/go/printer/nodes.go25
-rw-r--r--src/pkg/go/printer/printer.go14
2 files changed, 19 insertions, 20 deletions
diff --git a/src/pkg/go/printer/nodes.go b/src/pkg/go/printer/nodes.go
index d3c1b40722..243c168a7f 100644
--- a/src/pkg/go/printer/nodes.go
+++ b/src/pkg/go/printer/nodes.go
@@ -110,7 +110,7 @@ func (p *printer) lineComment(d *ast.CommentGroup) {
// Sets multiLine to true if the identifier list spans multiple lines.
func (p *printer) identList(list []*ast.Ident, multiLine *bool) {
- // convert into an expression list
+ // convert into an expression list so we can re-use exprList formatting
xlist := make([]ast.Expr, len(list));
for i, x := range list {
xlist[i] = x
@@ -121,7 +121,7 @@ func (p *printer) identList(list []*ast.Ident, multiLine *bool) {
// Sets multiLine to true if the string list spans multiple lines.
func (p *printer) stringList(list []*ast.BasicLit, multiLine *bool) {
- // convert into an expression list
+ // convert into an expression list so we can re-use exprList formatting
xlist := make([]ast.Expr, len(list));
for i, x := range list {
xlist[i] = x
@@ -481,13 +481,6 @@ func walkBinary(e *ast.BinaryExpr) (has5, has6 bool, maxProblem int) {
func cutoff(e *ast.BinaryExpr, depth int) int {
- if depth < 1 {
- // handle gracefully unless in debug mode
- if debug {
- panicln("negative depth:", depth)
- }
- depth = 1;
- }
has5, has6, maxProblem := walkBinary(e);
if maxProblem > 0 {
return maxProblem + 1
@@ -555,10 +548,8 @@ func (p *printer) binaryExpr(x *ast.BinaryExpr, prec1, cutoff, depth int, multiL
// parenthesis needed
// Note: The parser inserts an ast.ParenExpr node; thus this case
// can only occur if the AST is created in a different way.
- // parentheses undo one level of depth
- depth--;
p.print(token.LPAREN);
- p.expr0(x, depth, multiLine);
+ p.expr0(x, depth-1, multiLine); // parentheses undo one level of depth
p.print(token.RPAREN);
return;
}
@@ -612,7 +603,11 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, ctxt exprContext, multi
p.print(x)
case *ast.BinaryExpr:
- p.binaryExpr(x, prec1, cutoff(x, depth), depth, multiLine)
+ if depth < 1 {
+ p.internalError("depth < 1:", depth);
+ depth = 1;
+ }
+ p.binaryExpr(x, prec1, cutoff(x, depth), depth, multiLine);
case *ast.KeyValueExpr:
p.expr(x.Key, multiLine);
@@ -650,10 +645,8 @@ func (p *printer) expr1(expr ast.Expr, prec1, depth int, ctxt exprContext, multi
p.funcBody(x.Body, distance(x.Type.Pos(), p.pos), true, multiLine);
case *ast.ParenExpr:
- // parentheses undo one level of depth
- depth--;
p.print(token.LPAREN);
- p.expr0(x.X, depth, multiLine);
+ p.expr0(x.X, depth-1, multiLine); // parentheses undo one level of depth
p.print(x.Rparen, token.RPAREN);
case *ast.SelectorExpr:
diff --git a/src/pkg/go/printer/printer.go b/src/pkg/go/printer/printer.go
index 6497fc81ab..a0b64c56cf 100644
--- a/src/pkg/go/printer/printer.go
+++ b/src/pkg/go/printer/printer.go
@@ -101,6 +101,15 @@ func (p *printer) init(output io.Writer, cfg *Config) {
}
+func (p *printer) internalError(msg ...) {
+ if debug {
+ fmt.Print(p.pos.String() + ": ");
+ fmt.Println(msg);
+ panic();
+ }
+}
+
+
// write0 writes raw (uninterpreted) data to p.output and handles errors.
// write0 does not indent after newlines, and does not HTML-escape or update p.pos.
//
@@ -635,10 +644,7 @@ func (p *printer) writeWhitespace(n int) {
case unindent:
p.indent--;
if p.indent < 0 {
- // handle gracefully unless in debug mode
- if debug {
- panicln("negative indentation:", p.indent)
- }
+ p.internalError("negative indentation:", p.indent);
p.indent = 0;
}
case newline, formfeed: