src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

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 }