Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201028153306-37f0764111ff / go / ssa / mode.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/go/ssa/mode.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201028153306-37f0764111ff/go/ssa/mode.go
new file mode 100644 (file)
index 0000000..d2a2698
--- /dev/null
@@ -0,0 +1,100 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package ssa
+
+// This file defines the BuilderMode type and its command-line flag.
+
+import (
+       "bytes"
+       "fmt"
+)
+
+// BuilderMode is a bitmask of options for diagnostics and checking.
+//
+// *BuilderMode satisfies the flag.Value interface.  Example:
+//
+//     var mode = ssa.BuilderMode(0)
+//     func init() { flag.Var(&mode, "build", ssa.BuilderModeDoc) }
+//
+type BuilderMode uint
+
+const (
+       PrintPackages        BuilderMode = 1 << iota // Print package inventory to stdout
+       PrintFunctions                               // Print function SSA code to stdout
+       LogSource                                    // Log source locations as SSA builder progresses
+       SanityCheckFunctions                         // Perform sanity checking of function bodies
+       NaiveForm                                    // Build naïve SSA form: don't replace local loads/stores with registers
+       BuildSerially                                // Build packages serially, not in parallel.
+       GlobalDebug                                  // Enable debug info for all packages
+       BareInits                                    // Build init functions without guards or calls to dependent inits
+)
+
+const BuilderModeDoc = `Options controlling the SSA builder.
+The value is a sequence of zero or more of these letters:
+C      perform sanity [C]hecking of the SSA form.
+D      include [D]ebug info for every function.
+P      print [P]ackage inventory.
+F      print [F]unction SSA code.
+S      log [S]ource locations as SSA builder progresses.
+L      build distinct packages seria[L]ly instead of in parallel.
+N      build [N]aive SSA form: don't replace local loads/stores with registers.
+I      build bare [I]nit functions: no init guards or calls to dependent inits.
+`
+
+func (m BuilderMode) String() string {
+       var buf bytes.Buffer
+       if m&GlobalDebug != 0 {
+               buf.WriteByte('D')
+       }
+       if m&PrintPackages != 0 {
+               buf.WriteByte('P')
+       }
+       if m&PrintFunctions != 0 {
+               buf.WriteByte('F')
+       }
+       if m&LogSource != 0 {
+               buf.WriteByte('S')
+       }
+       if m&SanityCheckFunctions != 0 {
+               buf.WriteByte('C')
+       }
+       if m&NaiveForm != 0 {
+               buf.WriteByte('N')
+       }
+       if m&BuildSerially != 0 {
+               buf.WriteByte('L')
+       }
+       return buf.String()
+}
+
+// Set parses the flag characters in s and updates *m.
+func (m *BuilderMode) Set(s string) error {
+       var mode BuilderMode
+       for _, c := range s {
+               switch c {
+               case 'D':
+                       mode |= GlobalDebug
+               case 'P':
+                       mode |= PrintPackages
+               case 'F':
+                       mode |= PrintFunctions
+               case 'S':
+                       mode |= LogSource | BuildSerially
+               case 'C':
+                       mode |= SanityCheckFunctions
+               case 'N':
+                       mode |= NaiveForm
+               case 'L':
+                       mode |= BuildSerially
+               default:
+                       return fmt.Errorf("unknown BuilderMode option: %q", c)
+               }
+       }
+       *m = mode
+       return nil
+}
+
+// Get returns m.
+func (m BuilderMode) Get() interface{} { return m }