codes.mx raw

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