|  | // Copyright 2021 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package pkgbits | 
|  |  | 
|  | // A Code is an enum value that can be encoded into bitstreams. | 
|  | // | 
|  | // Code types are preferable for enum types, because they allow | 
|  | // Decoder to detect desyncs. | 
|  | type Code interface { | 
|  | // Marker returns the SyncMarker for the Code's dynamic type. | 
|  | Marker() SyncMarker | 
|  |  | 
|  | // Value returns the Code's ordinal value. | 
|  | Value() int | 
|  | } | 
|  |  | 
|  | // A CodeVal distinguishes among go/constant.Value encodings. | 
|  | type CodeVal int | 
|  |  | 
|  | func (c CodeVal) Marker() SyncMarker { return SyncVal } | 
|  | func (c CodeVal) Value() int         { return int(c) } | 
|  |  | 
|  | // Note: These values are public and cannot be changed without | 
|  | // updating the go/types importers. | 
|  |  | 
|  | const ( | 
|  | ValBool CodeVal = iota | 
|  | ValString | 
|  | ValInt64 | 
|  | ValBigInt | 
|  | ValBigRat | 
|  | ValBigFloat | 
|  | ) | 
|  |  | 
|  | // A CodeType distinguishes among go/types.Type encodings. | 
|  | type CodeType int | 
|  |  | 
|  | func (c CodeType) Marker() SyncMarker { return SyncType } | 
|  | func (c CodeType) Value() int         { return int(c) } | 
|  |  | 
|  | // Note: These values are public and cannot be changed without | 
|  | // updating the go/types importers. | 
|  |  | 
|  | const ( | 
|  | TypeBasic CodeType = iota | 
|  | TypeNamed | 
|  | TypePointer | 
|  | TypeSlice | 
|  | TypeArray | 
|  | TypeChan | 
|  | TypeMap | 
|  | TypeSignature | 
|  | TypeStruct | 
|  | TypeInterface | 
|  | TypeUnion | 
|  | TypeTypeParam | 
|  | ) | 
|  |  | 
|  | // A CodeObj distinguishes among go/types.Object encodings. | 
|  | type CodeObj int | 
|  |  | 
|  | func (c CodeObj) Marker() SyncMarker { return SyncCodeObj } | 
|  | func (c CodeObj) Value() int         { return int(c) } | 
|  |  | 
|  | // Note: These values are public and cannot be changed without | 
|  | // updating the go/types importers. | 
|  |  | 
|  | const ( | 
|  | ObjAlias CodeObj = iota | 
|  | ObjConst | 
|  | ObjType | 
|  | ObjFunc | 
|  | ObjVar | 
|  | ObjStub | 
|  | ) |