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 }