libgo: update to go1.9
[official-gcc.git] / libgo / go / cmd / internal / objabi / flag.go
blobe349b413249ec17523c1326cdcfb57d48a5d1581
1 // Copyright 2015 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
5 package objabi
7 import (
8 "flag"
9 "fmt"
10 "os"
11 "strconv"
14 func Flagfn2(string, string, func(string, string)) { panic("flag") }
16 func Flagcount(name, usage string, val *int) {
17 flag.Var((*count)(val), name, usage)
20 func Flagint32(name, usage string, val *int32) {
21 flag.Var((*int32Value)(val), name, usage)
24 func Flagint64(name, usage string, val *int64) {
25 flag.Int64Var(val, name, *val, usage)
28 func Flagstr(name, usage string, val *string) {
29 flag.StringVar(val, name, *val, usage)
32 func Flagfn0(name, usage string, f func()) {
33 flag.Var(fn0(f), name, usage)
36 func Flagfn1(name, usage string, f func(string)) {
37 flag.Var(fn1(f), name, usage)
40 func Flagprint(fd int) {
41 if fd == 1 {
42 flag.CommandLine.SetOutput(os.Stdout)
44 flag.PrintDefaults()
47 func Flagparse(usage func()) {
48 flag.Usage = usage
49 flag.Parse()
52 // count is a flag.Value that is like a flag.Bool and a flag.Int.
53 // If used as -name, it increments the count, but -name=x sets the count.
54 // Used for verbose flag -v.
55 type count int
57 func (c *count) String() string {
58 return fmt.Sprint(int(*c))
61 func (c *count) Set(s string) error {
62 switch s {
63 case "true":
64 *c++
65 case "false":
66 *c = 0
67 default:
68 n, err := strconv.Atoi(s)
69 if err != nil {
70 return fmt.Errorf("invalid count %q", s)
72 *c = count(n)
74 return nil
77 func (c *count) IsBoolFlag() bool {
78 return true
81 type int32Value int32
83 func (i *int32Value) Set(s string) error {
84 v, err := strconv.ParseInt(s, 0, 64)
85 *i = int32Value(v)
86 return err
89 func (i *int32Value) Get() interface{} { return int32(*i) }
91 func (i *int32Value) String() string { return fmt.Sprint(*i) }
93 type fn0 func()
95 func (f fn0) Set(s string) error {
96 f()
97 return nil
100 func (f fn0) Get() interface{} { return nil }
102 func (f fn0) String() string { return "" }
104 func (f fn0) IsBoolFlag() bool {
105 return true
108 type fn1 func(string)
110 func (f fn1) Set(s string) error {
111 f(s)
112 return nil
115 func (f fn1) String() string { return "" }