mirror of
https://github.com/golang/go.git
synced 2025-10-19 19:13:18 +00:00
cmd/compile/internal/noder: format grammar
This just wraps column width to 72 and indents production definitions so they are easier to distinguish from prose. Change-Id: I386b122b4f617db4b182ebb549fbee4f35a0122c Reviewed-on: https://go-review.googlesource.com/c/go/+/673536 TryBot-Bypass: Mark Freeman <mark@golang.org> Reviewed-by: Robert Griesemer <gri@google.com> Auto-Submit: Mark Freeman <mark@golang.org>
This commit is contained in:
parent
2ab210bc74
commit
195e64232d
1 changed files with 88 additions and 85 deletions
|
@ -5,22 +5,23 @@
|
|||
/*
|
||||
The Unified IR (UIR) format is implicitly defined by the package noder.
|
||||
|
||||
At the highest level, a package encoded in UIR follows the grammar below.
|
||||
At the highest level, a package encoded in UIR follows the grammar
|
||||
below.
|
||||
|
||||
File = Header Payload fingerprint .
|
||||
Header = version [ flags ] sectionEnds elementEnds .
|
||||
File = Header Payload fingerprint .
|
||||
Header = version [ flags ] sectionEnds elementEnds .
|
||||
|
||||
version = uint32 . // used for backward compatibility
|
||||
flags = uint32 . // feature flags used across versions
|
||||
sectionEnds = [10]uint32 . // defines section boundaries
|
||||
elementEnds = []uint32 . // defines element boundaries
|
||||
fingerprint = [8]byte . // sha256 fingerprint
|
||||
version = uint32 . // used for backward compatibility
|
||||
flags = uint32 . // feature flags used across versions
|
||||
sectionEnds = [10]uint32 . // defines section boundaries
|
||||
elementEnds = []uint32 . // defines element boundaries
|
||||
fingerprint = [8]byte . // sha256 fingerprint
|
||||
|
||||
The payload is a series of sections. Each section has a kind which determines
|
||||
its index in the series.
|
||||
The payload is a series of sections. Each section has a kind which
|
||||
determines its index in the series.
|
||||
|
||||
SectionKind = Uint64 .
|
||||
Payload = SectionString
|
||||
SectionKind = Uint64 .
|
||||
Payload = SectionString
|
||||
SectionMeta
|
||||
SectionPosBase
|
||||
SectionPkg // TODO(markfreeman) Define.
|
||||
|
@ -33,54 +34,55 @@ Payload = SectionString
|
|||
.
|
||||
|
||||
# Sections
|
||||
A section is a series of elements of a type determined by the section's kind.
|
||||
Go constructs are mapped onto (potentially multiple) elements. Elements are
|
||||
accessed using an index relative to the start of the section.
|
||||
A section is a series of elements of a type determined by the section's
|
||||
kind. Go constructs are mapped onto (potentially multiple) elements.
|
||||
Elements are accessed using an index relative to the start of the
|
||||
section.
|
||||
|
||||
// TODO(markfreeman): Rename to SectionIndex.
|
||||
RelIndex = Uint64 .
|
||||
// TODO(markfreeman): Rename to SectionIndex.
|
||||
RelIndex = Uint64 .
|
||||
|
||||
## String Section
|
||||
String values are stored as elements in the string section. Elements outside
|
||||
the string section access string values by reference.
|
||||
String values are stored as elements in the string section. Elements
|
||||
outside the string section access string values by reference.
|
||||
|
||||
SectionString = { String } .
|
||||
SectionString = { String } .
|
||||
|
||||
## Meta Section
|
||||
The meta section provides fundamental information for a package. It contains
|
||||
exactly two elements — a public root and a private root.
|
||||
The meta section provides fundamental information for a package. It
|
||||
contains exactly two elements — a public root and a private root.
|
||||
|
||||
SectionMeta = PublicRoot
|
||||
SectionMeta = PublicRoot
|
||||
PrivateRoot // TODO(markfreeman): Define.
|
||||
.
|
||||
|
||||
The public root element identifies the package and provides references for all
|
||||
exported objects it contains.
|
||||
The public root element identifies the package and provides references
|
||||
for all exported objects it contains.
|
||||
|
||||
PublicRoot = Relocs
|
||||
PublicRoot = Relocs
|
||||
[ SyncPublic ] // TODO(markfreeman): Define.
|
||||
PackageRef // TODO(markfreeman): Define.
|
||||
[ HasInit ]
|
||||
ObjectRefCount // TODO(markfreeman): Define.
|
||||
{ ObjectRef } // TODO(markfreeman): Define.
|
||||
.
|
||||
HasInit = Bool . // Whether the package uses any initialization
|
||||
// functions.
|
||||
HasInit = Bool . // Whether the package uses any
|
||||
// initialization functions.
|
||||
|
||||
## PosBase Section
|
||||
This section provides position information. It is a series of PosBase
|
||||
elements.
|
||||
|
||||
SectionPosBase = { PosBase } .
|
||||
SectionPosBase = { PosBase } .
|
||||
|
||||
A base is either a file base or line base (produced by a line
|
||||
directive). Every base has a position, line, and column; these are
|
||||
constant for file bases and hence not encoded.
|
||||
|
||||
PosBase = Relocs
|
||||
PosBase = Relocs
|
||||
[ SyncPosBase ] // TODO(markfreeman): Define.
|
||||
StringRef // the (absolute) file name for the base
|
||||
Bool // true if it is a file base, else a line base
|
||||
Bool // true if a file base, else a line base
|
||||
// The below is ommitted for file bases.
|
||||
[ Pos
|
||||
Uint64 // line
|
||||
|
@ -91,7 +93,7 @@ A source position Pos represents a file-absolute (line, column) pair
|
|||
and a PosBase indicating the position Pos is relative to. Positions
|
||||
without a PosBase have no line or column.
|
||||
|
||||
Pos = [ SyncPos ] // TODO(markfreeman): Define.
|
||||
Pos = [ SyncPos ] // TODO(markfreeman): Define.
|
||||
Bool // true if the position has a base
|
||||
// The below is ommitted if the position has no base.
|
||||
[ Ref[PosBase]
|
||||
|
@ -100,33 +102,34 @@ Pos = [ SyncPos ] // TODO(markfreeman): Define.
|
|||
.
|
||||
|
||||
# References
|
||||
A reference table precedes every element. Each entry in the table contains a
|
||||
section / index pair denoting the location of the referenced element.
|
||||
A reference table precedes every element. Each entry in the table
|
||||
contains a section / index pair denoting the location of the referenced
|
||||
element.
|
||||
|
||||
// TODO(markfreeman): Rename to RefTable.
|
||||
Relocs = [ SyncRelocs ] // TODO(markfreeman): Define.
|
||||
// TODO(markfreeman): Rename to RefTable.
|
||||
Relocs = [ SyncRelocs ] // TODO(markfreeman): Define.
|
||||
RelocCount
|
||||
{ Reloc }
|
||||
.
|
||||
// TODO(markfreeman): Rename to RefTableEntryCount.
|
||||
RelocCount = Uint64 .
|
||||
// TODO(markfreeman): Rename to RefTableEntry.
|
||||
Reloc = [ SyncReloc ] // TODO(markfreeman): Define.
|
||||
// TODO(markfreeman): Rename to RefTableEntryCount.
|
||||
RelocCount = Uint64 .
|
||||
// TODO(markfreeman): Rename to RefTableEntry.
|
||||
Reloc = [ SyncReloc ] // TODO(markfreeman): Define.
|
||||
SectionKind
|
||||
RelIndex
|
||||
.
|
||||
|
||||
Elements encode references to other elements as an index in the reference
|
||||
table — not the location of the referenced element directly.
|
||||
Elements encode references to other elements as an index in the
|
||||
reference table — not the location of the referenced element directly.
|
||||
|
||||
// TODO(markfreeman): Rename to RefUse.
|
||||
UseReloc = [ SyncUseReloc ] // TODO(markfreeman): Define.
|
||||
// TODO(markfreeman): Rename to RefUse.
|
||||
UseReloc = [ SyncUseReloc ] // TODO(markfreeman): Define.
|
||||
RelIndex
|
||||
.
|
||||
|
||||
# Primitives
|
||||
Primitive encoding is handled separately by the pkgbits package. Check there
|
||||
for definitions of the below productions.
|
||||
Primitive encoding is handled separately by the pkgbits package. Check
|
||||
there for definitions of the below productions.
|
||||
|
||||
* Bool
|
||||
* Int64
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue