// 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 )