github.com/gotranspile/cxgo@v0.3.8-0.20240118201721-29871598a6a2/types/kinds.go (about) 1 package types 2 3 import "strings" 4 5 type Kind int 6 7 const ( 8 Unknown = Kind(0) 9 Untyped = Kind(1 << iota) 10 unsafeKind 11 Ptr 12 Int 13 Float 14 Bool 15 Struct 16 Func 17 Array 18 Signed 19 Unsigned 20 21 UnsafePtr = unsafeKind | Ptr 22 UntypedInt = Untyped | Int 23 UntypedFloat = Untyped | Float 24 Nil = Untyped | Ptr 25 ) 26 27 func (k Kind) Is(k2 Kind) bool { 28 if k2 == Unknown { 29 return k == k2 30 } 31 return k&k2 == k2 32 } 33 34 func (k Kind) IsUntyped() bool { 35 return k.Is(Untyped) 36 } 37 38 func (k Kind) IsUntypedInt() bool { 39 return k.Is(UntypedInt) 40 } 41 42 func (k Kind) IsUntypedFloat() bool { 43 return k.Is(UntypedFloat) 44 } 45 46 func (k Kind) IsPtr() bool { 47 return k.Is(Ptr) 48 } 49 50 func (k Kind) IsUnsafePtr() bool { 51 return k.Is(UnsafePtr) 52 } 53 54 func (k Kind) IsFunc() bool { 55 return k.Is(Func) 56 } 57 58 func (k Kind) IsRef() bool { 59 return k.IsPtr() || k.IsFunc() 60 } 61 62 func (k Kind) IsInt() bool { 63 return k.Is(Int) 64 } 65 66 func (k Kind) IsSigned() bool { 67 return k.Is(Signed) 68 } 69 70 func (k Kind) IsUnsigned() bool { 71 return k.Is(Unsigned) 72 } 73 74 func (k Kind) IsFloat() bool { 75 return k.Is(Float) 76 } 77 78 func (k Kind) IsBool() bool { 79 return k.Is(Bool) 80 } 81 82 func (k Kind) Major() Kind { 83 return k & (Func | Ptr | Array | Struct | Int | Float | Bool) 84 } 85 86 var kindNames = []struct { 87 Kind Kind 88 Name string 89 }{ 90 {Nil, "Nil"}, 91 {UntypedInt, "UntypedInt"}, 92 {UnsafePtr, "UnsafePtr"}, 93 {Unsigned, "Unsigned"}, 94 {Signed, "Signed"}, 95 {Int, "Int"}, 96 {Float, "Float"}, 97 {Bool, "Bool"}, 98 {Untyped, "Untyped"}, 99 {Ptr, "Ptr"}, 100 {Array, "Array"}, 101 {Func, "Func"}, 102 {Struct, "Struct"}, 103 } 104 105 func (k Kind) String() string { 106 if k == 0 { 107 return "Unknown" 108 } 109 var kinds []string 110 for _, s := range kindNames { 111 if k&s.Kind != 0 { 112 kinds = append(kinds, s.Name) 113 k &^= s.Kind 114 } 115 } 116 return strings.Join(kinds, "|") 117 }