codes.go (1726B)
1 // Copyright 2021 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 pkgbits 6 7 // A Code is an enum value that can be encoded into bitstreams. 8 // 9 // Code types are preferable for enum types, because they allow 10 // Decoder to detect desyncs. 11 type Code interface { 12 // Marker returns the SyncMarker for the Code's dynamic type. 13 Marker() SyncMarker 14 15 // Value returns the Code's ordinal value. 16 Value() int 17 } 18 19 // A CodeVal distinguishes among go/constant.Value encodings. 20 type CodeVal int 21 22 func (c CodeVal) Marker() SyncMarker { return SyncVal } 23 func (c CodeVal) Value() int { return int(c) } 24 25 // Note: These values are public and cannot be changed without 26 // updating the go/types importers. 27 28 const ( 29 ValBool CodeVal = iota 30 ValString 31 ValInt64 32 ValBigInt 33 ValBigRat 34 ValBigFloat 35 ) 36 37 // A CodeType distinguishes among go/types.Type encodings. 38 type CodeType int 39 40 func (c CodeType) Marker() SyncMarker { return SyncType } 41 func (c CodeType) Value() int { return int(c) } 42 43 // Note: These values are public and cannot be changed without 44 // updating the go/types importers. 45 46 const ( 47 TypeBasic CodeType = iota 48 TypeNamed 49 TypePointer 50 TypeSlice 51 TypeArray 52 TypeChan 53 TypeMap 54 TypeSignature 55 TypeStruct 56 TypeInterface 57 TypeUnion 58 TypeTypeParam 59 ) 60 61 // A CodeObj distinguishes among go/types.Object encodings. 62 type CodeObj int 63 64 func (c CodeObj) Marker() SyncMarker { return SyncCodeObj } 65 func (c CodeObj) Value() int { return int(c) } 66 67 // Note: These values are public and cannot be changed without 68 // updating the go/types importers. 69 70 const ( 71 ObjAlias CodeObj = iota 72 ObjConst 73 ObjType 74 ObjFunc 75 ObjVar 76 ObjStub 77 )