| // Copyright 2022 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 implements low-level coding abstractions for | |
| // Unified IR's export data format. | |
| // | |
| // At a low-level, a package is a collection of bitstream elements. | |
| // Each element has a "kind" and a dense, non-negative index. | |
| // Elements can be randomly accessed given their kind and index. | |
| // | |
| // Individual elements are sequences of variable-length values (e.g., | |
| // integers, booleans, strings, go/constant values, cross-references | |
| // to other elements). Package pkgbits provides APIs for encoding and | |
| // decoding these low-level values, but the details of mapping | |
| // higher-level Go constructs into elements is left to higher-level | |
| // abstractions. | |
| // | |
| // Elements may cross-reference each other with "relocations." For | |
| // example, an element representing a pointer type has a relocation | |
| // referring to the element type. | |
| // | |
| // Go constructs may be composed as a constellation of multiple | |
| // elements. For example, a declared function may have one element to | |
| // describe the object (e.g., its name, type, position), and a | |
| // separate element to describe its function body. This allows readers | |
| // some flexibility in efficiently seeking or re-reading data (e.g., | |
| // inlining requires re-reading the function body for each inlined | |
| // call, without needing to re-read the object-level details). | |
| // | |
| // This is a copy of internal/pkgbits in the Go implementation. | |
| package pkgbits | |
| // This package is dependency-restricted; see x/tools/go/gcexportdata.TestDeps. |