This repository has been archived on 2024-02-27. You can view files and clone it, but cannot push or open issues or pull requests.
arf/analyzer/type-section.go

48 lines
1.2 KiB
Go

package analyzer
import "git.tebibyte.media/arf/arf/types"
import "git.tebibyte.media/arf/arf/parser"
import "git.tebibyte.media/arf/arf/infoerr"
// TypeSection represents a type definition section.
type TypeSection struct {
sectionBase
what Type
complete bool
}
// Kind returns SectionKindType.
func (section TypeSection) Kind () (kind SectionKind) {
kind = SectionKindType
return
}
// ToString returns all data stored within the type section, in string form.
func (section TypeSection) ToString (indent int) (output string) {
output += doIndent(indent, "typeSection ", section.where.ToString(), "\n")
output += section.what.ToString(indent + 1)
return
}
// analyzeTypeSection analyzes a type section.
func (analyzer AnalysisOperation) analyzeTypeSection () (
section Section,
err error,
) {
inputSection := analyzer.currentSection.(parser.TypeSection)
if inputSection.Permission() == types.PermissionReadWrite {
err = inputSection.NewError (
"rw permission not understood in this context, try ro",
infoerr.ErrorKindError)
}
outputSection := TypeSection { }
outputSection.where = analyzer.currentPosition
outputSection.what, err = analyzer.analyzeType(inputSection.Type())
if err != nil { return }
outputSection.complete = true
return
}