From bd8495f9736a69d4eda07c6ddb012a5b7e7f0b10 Mon Sep 17 00:00:00 2001 From: Robert Griesemer Date: Thu, 4 Jun 2009 14:31:11 -0700 Subject: [PATCH] - report an error if format is nil instead of crashing - treat '\f' like '\n' ('\f' has special meaning in the tabwriter now) R=rsc DELTA=7 (4 added, 0 deleted, 3 changed) OCL=29790 CL=29893 --- src/lib/datafmt/datafmt.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/lib/datafmt/datafmt.go b/src/lib/datafmt/datafmt.go index 7e02424799..dbd8ec6863 100644 --- a/src/lib/datafmt/datafmt.go +++ b/src/lib/datafmt/datafmt.go @@ -64,7 +64,7 @@ Literals evaluate to themselves, with two substitutions. First, %-formats expand in the manner of fmt.Printf, with the current value passed as the parameter. Second, the current indentation (see below) - is inserted after every newline character. + is inserted after every newline or form feed character. Literal = string . @@ -359,13 +359,13 @@ func (s *State) Pos() token.Position { // Write writes data to the output buffer, inserting the indentation -// string after each newline. It cannot return an error. +// string after each newline or form feed character. It cannot return an error. // func (s *State) Write(data []byte) (int, os.Error) { n := 0; i0 := 0; for i, ch := range data { - if ch == '\n' { + if ch == '\n' || ch == '\f' { // write text segment and indentation n1, _ := s.output.Write(data[i0 : i+1]); n2, _ := s.output.Write(s.indent.Data()); @@ -725,6 +725,10 @@ func (s *State) eval(fexpr expr, value reflect.Value, index int) bool { // the state parameter. // func (f Format) Eval(env Environment, args ...) ([]byte, os.Error) { + if f == nil { + return nil, os.NewError("format is nil"); + } + errors := make(chan os.Error); s := newState(f, env, errors); -- 2.48.1