loadmode_string.go (1238B)
1 // Copyright 2019 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. 4 5 package packages 6 7 import ( 8 "fmt" 9 "strings" 10 ) 11 12 var modes = [...]struct { 13 mode LoadMode 14 name string 15 }{ 16 {NeedName, "NeedName"}, 17 {NeedFiles, "NeedFiles"}, 18 {NeedCompiledGoFiles, "NeedCompiledGoFiles"}, 19 {NeedImports, "NeedImports"}, 20 {NeedDeps, "NeedDeps"}, 21 {NeedExportFile, "NeedExportFile"}, 22 {NeedTypes, "NeedTypes"}, 23 {NeedSyntax, "NeedSyntax"}, 24 {NeedTypesInfo, "NeedTypesInfo"}, 25 {NeedTypesSizes, "NeedTypesSizes"}, 26 {NeedForTest, "NeedForTest"}, 27 {NeedModule, "NeedModule"}, 28 {NeedEmbedFiles, "NeedEmbedFiles"}, 29 {NeedEmbedPatterns, "NeedEmbedPatterns"}, 30 {NeedTarget, "NeedTarget"}, 31 } 32 33 func (mode LoadMode) String() string { 34 if mode == 0 { 35 return "LoadMode(0)" 36 } 37 var out []string 38 // named bits 39 for _, item := range modes { 40 if (mode & item.mode) != 0 { 41 mode ^= item.mode 42 out = append(out, item.name) 43 } 44 } 45 // unnamed residue 46 if mode != 0 { 47 if out == nil { 48 return fmt.Sprintf("LoadMode(%#x)", int(mode)) 49 } 50 out = append(out, fmt.Sprintf("%#x", int(mode))) 51 } 52 if len(out) == 1 { 53 return out[0] 54 } 55 return "(" + strings.Join(out, "|") + ")" 56 }