summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2009-02-04 11:46:39 -0800
committerRob Pike <r@golang.org>2009-02-04 11:46:39 -0800
commit20ba067e7cbefbfdb7b11cb0d3141b55721e9bd8 (patch)
tree4211da6a259825443653abe2d9a85eac64c7f3c7
parente206a8027b1fa878777662454df8b25ecf5f3aaf (diff)
downloadgolang-20ba067e7cbefbfdb7b11cb0d3141b55721e9bd8.tar.gz
clean up flags package a bit.
fix a bug in Usage message - would print current value instead of default. R=rsc DELTA=53 (7 added, 4 deleted, 42 changed) OCL=24323 CL=24323
-rw-r--r--src/lib/flag.go59
1 files changed, 31 insertions, 28 deletions
diff --git a/src/lib/flag.go b/src/lib/flag.go
index 94bbbb49e..19d3e2ebf 100644
--- a/src/lib/flag.go
+++ b/src/lib/flag.go
@@ -14,8 +14,9 @@ package flag
* If you like, you can bind the flag to a variable using the Var() functions.
* var flagvar int
* func init() {
- * flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
+ * flag.IntVar(&flagvar, "flagname", 1234, "help message for flagname")
* }
+ *
* 2) After all flags are defined, call
* flag.Parse()
* to parse the command line into the defined flags.
@@ -219,9 +220,10 @@ type _Value interface {
// -- Flag structure (internal)
type Flag struct {
- name string;
- usage string;
- value _Value;
+ name string; // name as it appears on command line
+ usage string; // help message
+ value _Value; // value as set
+ defvalue string; // default value (as text); for usage message
}
type allFlags struct {
@@ -234,7 +236,7 @@ var flags *allFlags = &allFlags{make(map[string] *Flag), make(map[string] *Flag)
func PrintDefaults() {
for k, f := range flags.formal {
- print(" -", f.name, "=", f.value.str(), ": ", f.usage, "\n");
+ print(" -", f.name, "=", f.defvalue, ": ", f.usage, "\n");
}
}
@@ -269,75 +271,76 @@ func add(name string, value _Value, usage string) {
f.name = name;
f.usage = usage;
f.value = value;
+ f.defvalue = value.str(); // Remember the default value as a string; it won't change.
dummy, alreadythere := flags.formal[name];
if alreadythere {
print("flag redefined: ", name, "\n");
- panic("flag redefinition");
+ panic("flag redefinition"); // Happens only if flags are declared with identical names
}
flags.formal[name] = f;
}
+func BoolVar(p *bool, name string, value bool, usage string) {
+ add(name, newBoolValue(value, p), usage);
+}
+
func Bool(name string, value bool, usage string) *bool {
p := new(bool);
- add(name, newBoolValue(value, p), usage);
+ BoolVar(p, name, value, usage);
return p;
}
-func BoolVar(p *bool, name string, value bool, usage string) {
- add(name, newBoolValue(value, p), usage);
+func IntVar(p *int, name string, value int, usage string) {
+ add(name, newIntValue(value, p), usage);
}
func Int(name string, value int, usage string) *int {
p := new(int);
- add(name, newIntValue(value, p), usage);
+ IntVar(p, name, value, usage);
return p;
}
-func IntVar(p *int, name string, value int, usage string) {
- add(name, newIntValue(value, p), usage);
+func Int64Var(p *int64, name string, value int64, usage string) {
+ add(name, newInt64Value(value, p), usage);
}
func Int64(name string, value int64, usage string) *int64 {
p := new(int64);
- add(name, newInt64Value(value, p), usage);
+ Int64Var(p, name, value, usage);
return p;
}
-func Int64Var(p *int64, name string, value int64, usage string) {
- add(name, newInt64Value(value, p), usage);
+func UintVar(p *uint, name string, value uint, usage string) {
+ add(name, newUintValue(value, p), usage);
}
func Uint(name string, value uint, usage string) *uint {
p := new(uint);
- add(name, newUintValue(value, p), usage);
+ UintVar(p, name, value, usage);
return p;
}
-func UintVar(p *uint, name string, value uint, usage string) {
- add(name, newUintValue(value, p), usage);
+func Uint64Var(p *uint64, name string, value uint64, usage string) {
+ add(name, newUint64Value(value, p), usage);
}
func Uint64(name string, value uint64, usage string) *uint64 {
p := new(uint64);
- add(name, newUint64Value(value, p), usage);
+ Uint64Var(p, name, value, usage);
return p;
}
-func Uint64Var(p *uint64, name string, value uint64, usage string) {
- add(name, newUint64Value(value, p), usage);
+func StringVar(p *string, name, value string, usage string) {
+ add(name, newStringValue(value, p), usage);
}
func String(name, value string, usage string) *string {
p := new(string);
- add(name, newStringValue(value, p), usage);
+ StringVar(p, name, value, usage);
return p;
}
-func StringVar(p *string, name, value string, usage string) {
- add(name, newStringValue(value, p), usage);
-}
-
-func (f *allFlags) ParseOne(index int) (ok bool, next int)
+func (f *allFlags) parseOne(index int) (ok bool, next int)
{
s := sys.Args[index];
f.first_arg = index; // until proven otherwise
@@ -434,7 +437,7 @@ func (f *allFlags) ParseOne(index int) (ok bool, next int)
func Parse() {
for i := 1; i < len(sys.Args); {
- ok, next := flags.ParseOne(i);
+ ok, next := flags.parseOne(i);
if next > 0 {
flags.first_arg = next;
i = next;