Producing more data structures

This commit is contained in:
Sasha Koshka 2022-09-08 12:59:49 -04:00
parent 7e972e2132
commit f3f744c348
3 changed files with 67 additions and 1 deletions

11
analyzer/accessors.go Normal file
View File

@ -0,0 +1,11 @@
package analyzer
func (section TypeSection) Kind () (kind SectionKind) {
kind = SectionKindType
return
}
func (section TypeSection) Name () (name string) {
name = section.name
return
}

24
analyzer/primitives.go Normal file
View File

@ -0,0 +1,24 @@
package analyzer
// This is a global, cannonical list of primitive and built-in types.
var PrimitiveInt = TypeSection { name: "Int" }
var PrimitiveUInt = TypeSection { name: "UInt" }
var PrimitiveI8 = TypeSection { name: "I8" }
var PrimitiveI16 = TypeSection { name: "I16" }
var PrimitiveI32 = TypeSection { name: "I32" }
var PrimitiveI64 = TypeSection { name: "I64" }
var PrimitiveU8 = TypeSection { name: "U8" }
var PrimitiveU16 = TypeSection { name: "U16" }
var PrimitiveU32 = TypeSection { name: "U32" }
var PrimitiveU64 = TypeSection { name: "U64" }
var PrimitiveObjt = TypeSection { name: "Objt" }
var PrimitiveFace = TypeSection { name: "Face" }
var BuiltInString = TypeSection {
inherits: Type {
actual: PrimitiveU8,
kind: TypeKindVariableArray,
},
}

View File

@ -14,7 +14,7 @@ type SectionTable map[locator] Section
type SectionKind int type SectionKind int
const ( const (
SectionKindType = iota SectionKindType SectionKind = iota
SectionKindObjt SectionKindObjt
SectionKindEnum SectionKindEnum
SectionKindFace SectionKindFace
@ -27,3 +27,34 @@ type Section interface {
Kind () (kind SectionKind) Kind () (kind SectionKind)
Name () (name string) Name () (name string)
} }
// TypeKind represents what kind of type a type is.
type TypeKind int
const (
// 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 {
name string
inherits Type
}