33 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
	
| // 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
 |