diff options
Diffstat (limited to 'libgo/go/flag/flag.go')
-rw-r--r-- | libgo/go/flag/flag.go | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/libgo/go/flag/flag.go b/libgo/go/flag/flag.go index fa0f05e9683..bbbc55a2799 100644 --- a/libgo/go/flag/flag.go +++ b/libgo/go/flag/flag.go @@ -94,7 +94,7 @@ func (b *boolValue) Set(s string) error { func (b *boolValue) Get() interface{} { return bool(*b) } -func (b *boolValue) String() string { return fmt.Sprintf("%v", *b) } +func (b *boolValue) String() string { return strconv.FormatBool(bool(*b)) } func (b *boolValue) IsBoolFlag() bool { return true } @@ -121,7 +121,7 @@ func (i *intValue) Set(s string) error { func (i *intValue) Get() interface{} { return int(*i) } -func (i *intValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *intValue) String() string { return strconv.Itoa(int(*i)) } // -- int64 Value type int64Value int64 @@ -139,7 +139,7 @@ func (i *int64Value) Set(s string) error { func (i *int64Value) Get() interface{} { return int64(*i) } -func (i *int64Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *int64Value) String() string { return strconv.FormatInt(int64(*i), 10) } // -- uint Value type uintValue uint @@ -157,7 +157,7 @@ func (i *uintValue) Set(s string) error { func (i *uintValue) Get() interface{} { return uint(*i) } -func (i *uintValue) String() string { return fmt.Sprintf("%v", *i) } +func (i *uintValue) String() string { return strconv.FormatUint(uint64(*i), 10) } // -- uint64 Value type uint64Value uint64 @@ -175,7 +175,7 @@ func (i *uint64Value) Set(s string) error { func (i *uint64Value) Get() interface{} { return uint64(*i) } -func (i *uint64Value) String() string { return fmt.Sprintf("%v", *i) } +func (i *uint64Value) String() string { return strconv.FormatUint(uint64(*i), 10) } // -- string Value type stringValue string @@ -192,7 +192,7 @@ func (s *stringValue) Set(val string) error { func (s *stringValue) Get() interface{} { return string(*s) } -func (s *stringValue) String() string { return fmt.Sprintf("%s", *s) } +func (s *stringValue) String() string { return string(*s) } // -- float64 Value type float64Value float64 @@ -210,7 +210,7 @@ func (f *float64Value) Set(s string) error { func (f *float64Value) Get() interface{} { return float64(*f) } -func (f *float64Value) String() string { return fmt.Sprintf("%v", *f) } +func (f *float64Value) String() string { return strconv.FormatFloat(float64(*f), 'g', -1, 64) } // -- time.Duration Value type durationValue time.Duration @@ -238,6 +238,8 @@ func (d *durationValue) String() string { return (*time.Duration)(d).String() } // rather than using the next command-line argument. // // Set is called once, in command line order, for each flag present. +// The flag package may call the String method with a zero-valued receiver, +// such as a nil pointer. type Value interface { String() string Set(string) error @@ -500,7 +502,7 @@ func PrintDefaults() { } // defaultUsage is the default function to print a usage message. -func defaultUsage(f *FlagSet) { +func (f *FlagSet) defaultUsage() { if f.name == "" { fmt.Fprintf(f.out(), "Usage:\n") } else { @@ -819,11 +821,7 @@ func (f *FlagSet) failf(format string, a ...interface{}) error { // or the appropriate default usage function otherwise. func (f *FlagSet) usage() { if f.Usage == nil { - if f == CommandLine { - Usage() - } else { - defaultUsage(f) - } + f.defaultUsage() } else { f.Usage() } @@ -953,6 +951,18 @@ func Parsed() bool { // methods of CommandLine. var CommandLine = NewFlagSet(os.Args[0], ExitOnError) +func init() { + // Override generic FlagSet default Usage with call to global Usage. + // Note: This is not CommandLine.Usage = Usage, + // because we want any eventual call to use any updated value of Usage, + // not the value it has when this line is run. + CommandLine.Usage = commandLineUsage +} + +func commandLineUsage() { + Usage() +} + // NewFlagSet returns a new, empty flag set with the specified name and // error handling property. func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet { @@ -960,6 +970,7 @@ func NewFlagSet(name string, errorHandling ErrorHandling) *FlagSet { name: name, errorHandling: errorHandling, } + f.Usage = f.defaultUsage return f } |