Hello golang-dev@googlegroups.com, I'd like you to review this change to https://code.google.com/p/go/
Ignore this for now please. I am still thinking. On Friday, May 24, 2013, wrote: > Reviewers: golang-dev1, > > Message: > Hello golang-dev@googlegroups.com, > > I'd like you to review this change to > https://code.google.com/p/go/ > > > Description: > fmt: fix documentation glitch in index expressions in Printf > Also clean up the code a bit. > > Please review this at https://codereview.appspot.**com/9761043/<https://codereview.appspot.com/9761... > > Affected files: > M src/pkg/fmt/doc.go > M src/pkg/fmt/fmt_test.go > M src/pkg/fmt/print.go > > > Index: src/pkg/fmt/doc.go > ==============================**==============================**======= > --- a/src/pkg/fmt/doc.go > +++ b/src/pkg/fmt/doc.go > @@ -124,9 +124,9 @@ > formatting verb to format successive arguments passed in the call. > However, the notation [n] immediately before the verb indicates > that the > nth one-indexed argument is to be formatted instead. The same > notation > - before a '*' for a width or precision selects the argument index > holding > - the value. After processing a bracketed expression [n], arguments > n+1, > - n+2, etc. will be processed unless otherwise directed. > + before a '*' for a width or a '.*' for precision selects the > argument > + index holding the value. After processing a bracketed expression > [n], > + arguments n+1, n+2, etc. will be processed unless otherwise > directed. > > For example, > fmt.Sprintf("%[2]d %[1]d\n", 11, 22) > Index: src/pkg/fmt/fmt_test.go > ==============================**==============================**======= > --- a/src/pkg/fmt/fmt_test.go > +++ b/src/pkg/fmt/fmt_test.go > @@ -553,6 +553,7 @@ > {"%6.2f", SE{12.0}, " 12.00"}, > {"%[3]*[2].*[1]f", SE{12.0, 2, 6}, " 12.00"}, > {"%[1]*[2].*[3]f", SE{6, 2, 12.0}, " 12.00"}, > + {"%[2].*[3]f", SE{6, 3, 12.0}, "12.000"}, > // An actual use! Print the same arguments twice. > {"%d %d %d %#[1]o %#o %#o", SE{11, 12, 13}, "11 12 13 013 014 > 015"}, > > Index: src/pkg/fmt/print.go > ==============================**==============================**======= > --- a/src/pkg/fmt/print.go > +++ b/src/pkg/fmt/print.go > @@ -1021,11 +1021,11 @@ > } > > // intFromArg gets the argNumth element of a. On return, isInt reports > whether the argument has type int. > -func intFromArg(a []interface{}, end, i, argNum int) (num int, isInt > bool, newi, newArgNum int) { > - newi, newArgNum = end, argNum > - if i < end && argNum < len(a) { > +func intFromArg(a []interface{}, argNum int) (num int, isInt bool, > newArgNum int) { > + newArgNum = argNum > + if argNum < len(a) { > num, isInt = a[argNum].(int) > - newi, newArgNum = i+1, argNum+1 > + newArgNum = argNum + 1 > } > return > } > @@ -1112,7 +1112,8 @@ > > // Do we have width? > if i < end && format[i] == '*' { > - p.fmt.wid, p.fmt.widPresent, i, argNum = > intFromArg(a, end, i, argNum) > + i++ > + p.fmt.wid, p.fmt.widPresent, argNum = > intFromArg(a, argNum) > if !p.fmt.widPresent { > p.buf.Write(badWidthBytes) > } > @@ -1123,14 +1124,16 @@ > > // Do we have precision? > if i+1 < end && format[i] == '.' { > - if format[i+1] == '*' { > - p.fmt.prec, p.fmt.precPresent, i, argNum = > intFromArg(a, end, i+1, argNum) > + i++ > + if format[i] == '*' { > + i++ > + p.fmt.prec, p.fmt.precPresent, argNum = > intFromArg(a, argNum) > if !p.fmt.precPresent { > p.buf.Write(badPrecBytes) > } > argNum, i = p.argNumber(argNum, format, i, > len(a)) // We consumed []; another can follow here. > } else { > - p.fmt.prec, p.fmt.precPresent, i = > parsenum(format, i+1, end) > + p.fmt.prec, p.fmt.precPresent, i = > parsenum(format, i, end) > if !p.fmt.precPresent { > p.fmt.prec = 0 > p.fmt.precPresent = true > > >
*** Abandoned ***