package analyzer
// locator uniquely identifies a section in the section table.
type locator struct {
modulePath string
name string
}
// SectionTable stores a list of semantically analized sections from one module,
// and all sections that it requires from other modules.
type SectionTable map[locator] Section
// SectionKind differentiates Section interfaces.
type SectionKind int
const (
SectionKindType SectionKind = iota
SectionKindObjt
SectionKindEnum
SectionKindFace
SectionKindData
SectionKindFunc
)
// Section is a semantically analyzed section.
type Section interface {
Kind () (kind SectionKind)
Name () (name string)
ToString () (output string)
// TypeKind represents what kind of type a type is.
type TypeKind int
// TypeKindBasic means it's a single value, or a fixed length array.
TypeKindBasic TypeKind = iota
// TypeKindPointer means it's a pointer
TypeKindPointer
// TypeKindVariableArray means it's an array of variable length.
TypeKindVariableArray
// Type represents a description of a type. It must eventually point to a
// TypeSection.
type Type struct {
actual Section
points *Type
mutable bool
kind TypeKind
length uint64
// TypeSection represents a type definition section.
type TypeSection struct {
inherits Type