github.com/decomp/exp@v0.0.0-20210624183419-6d058f5e1da6/cmd/bin2c/flag.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"go/ast"
     6  	"log"
     7  
     8  	"github.com/mewkiz/pkg/errutil"
     9  )
    10  
    11  type Flag uint8
    12  
    13  func (flag Flag) String() string {
    14  	m := map[Flag]string{
    15  		CF: "cf",
    16  		OF: "of",
    17  		SF: "sf",
    18  		ZF: "zf",
    19  	}
    20  	if s, ok := m[flag]; ok {
    21  		return s
    22  	}
    23  	return fmt.Sprintf("<unknown flag %d>", uint8(flag))
    24  }
    25  
    26  const (
    27  	CF Flag = iota + 1
    28  	OF
    29  	SF
    30  	ZF
    31  )
    32  
    33  // flags maps flag names to their corresponding Go identifiers.
    34  var flags = map[Flag]*ast.Ident{
    35  	CF: ast.NewIdent("cf"),
    36  	OF: ast.NewIdent("of"),
    37  	SF: ast.NewIdent("sf"),
    38  	ZF: ast.NewIdent("zf"),
    39  }
    40  
    41  // getFlag converts flag into a corresponding Go expression.
    42  func getFlag(flag Flag) ast.Expr {
    43  	if expr, ok := flags[flag]; ok {
    44  		return expr
    45  	}
    46  	log.Fatal(errutil.Newf("unable to lookup identifer for flag %q", flag))
    47  	panic("unreachable")
    48  }