cli
cmd
pkg
scripts
tests
vendor
coopcloud.tech
dario.cat
git.coopcloud.tech
github.com
go.opentelemetry.io
golang.org
x
crypto
exp
mod
net
sync
sys
term
text
time
tools
go
internal
aliases
event
gcimporter
gocommand
packagesinternal
pkgbits
codes.go
decoder.go
doc.go
encoder.go
flags.go
reloc.go
support.go
sync.go
syncmarker_string.go
version.go
stdlib
typeparams
typesinternal
versions
LICENSE
PATENTS
google.golang.org
gopkg.in
gotest.tools
modules.txt
.dockerignore
.drone.yml
.envrc.sample
.gitignore
.goreleaser.yml
AUTHORS.md
Dockerfile
LICENSE
Makefile
README.md
go.mod
go.sum
renovate.json
86 lines
2.4 KiB
Go
86 lines
2.4 KiB
Go
// 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)
|
|
}
|