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