| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- // Copyright 2024 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
- // Version indicates a version of a unified IR bitstream.
- // Each Version indicates the addition, removal, or change of
- // new data in the bitstream.
- //
- // These are serialized to disk and the interpretation remains fixed.
- type Version uint32
- const (
- // V0: initial prototype.
- //
- // All data that is not assigned a Field is in version V0
- // and has not been deprecated.
- V0 Version = iota
- // V1: adds the Flags uint32 word
- V1
- // V2: removes unused legacy fields and supports type parameters for aliases.
- // - remove the legacy "has init" bool from the public root
- // - remove obj's "derived func instance" bool
- // - add a TypeParamNames field to ObjAlias
- // - remove derived info "needed" bool
- V2
- numVersions = iota
- )
- // Field denotes a unit of data in the serialized unified IR bitstream.
- // It is conceptually a like field in a structure.
- //
- // We only really need Fields when the data may or may not be present
- // in a stream based on the Version of the bitstream.
- //
- // Unlike much of pkgbits, Fields are not serialized and
- // can change values as needed.
- type Field int
- const (
- // Flags in a uint32 in the header of a bitstream
- // that is used to indicate whether optional features are enabled.
- Flags Field = iota
- // Deprecated: HasInit was a bool indicating whether a package
- // has any init functions.
- HasInit
- // Deprecated: DerivedFuncInstance was a bool indicating
- // whether an object was a function instance.
- DerivedFuncInstance
- // ObjAlias has a list of TypeParamNames.
- AliasTypeParamNames
- // Deprecated: DerivedInfoNeeded was a bool indicating
- // whether a type was a derived type.
- DerivedInfoNeeded
- numFields = iota
- )
- // introduced is the version a field was added.
- var introduced = [numFields]Version{
- Flags: V1,
- AliasTypeParamNames: V2,
- }
- // removed is the version a field was removed in or 0 for fields
- // that have not yet been deprecated.
- // (So removed[f]-1 is the last version it is included in.)
- var removed = [numFields]Version{
- HasInit: V2,
- DerivedFuncInstance: V2,
- DerivedInfoNeeded: V2,
- }
- // Has reports whether field f is present in a bitstream at version v.
- func (v Version) Has(f Field) bool {
- return introduced[f] <= v && (v < removed[f] || removed[f] == V0)
- }
|