Less gooooo!
This commit is contained in:
parent
ed4c9aa0d2
commit
bb4a5472e1
@ -157,6 +157,20 @@ func (analyzer *AnalysisOperation) fetchSectionFromIdentifier (
|
||||
return
|
||||
}
|
||||
|
||||
// addSection adds a section to the analyzer's section table. If a section with
|
||||
// that name already exists, it panics because the parser should not have given
|
||||
// that to us.
|
||||
func (analyzer *AnalysisOperation) addSection (section Section) {
|
||||
_, exists := analyzer.sectionTable[section.locator()]
|
||||
if exists {
|
||||
panic (
|
||||
"invalid state: duplicate section " +
|
||||
section.locator().ToString())
|
||||
}
|
||||
analyzer.sectionTable[section.locator()] = section
|
||||
return
|
||||
}
|
||||
|
||||
func doIndent (indent int, input ...any) (output string) {
|
||||
for index := 0; index < indent; index ++ {
|
||||
output += "\t"
|
||||
|
@ -33,6 +33,7 @@ type Section interface {
|
||||
Complete () (complete bool)
|
||||
ModulePath () (path string)
|
||||
ModuleName () (path string)
|
||||
locator () (where locator)
|
||||
|
||||
// Must be implemented by each individual section
|
||||
ToString (indent int) (output string)
|
||||
@ -67,3 +68,8 @@ func (section sectionBase) Complete () (complete bool) {
|
||||
complete = section.complete
|
||||
return
|
||||
}
|
||||
|
||||
func (section sectionBase) locator () (where locator) {
|
||||
where = section.where
|
||||
return
|
||||
}
|
||||
|
@ -50,6 +50,11 @@ func (analyzer AnalysisOperation) analyzeTypeSection () (
|
||||
section Section,
|
||||
err error,
|
||||
) {
|
||||
outputSection := TypeSection { }
|
||||
outputSection.where = analyzer.currentPosition
|
||||
section = outputSection
|
||||
analyzer.addSection(section)
|
||||
|
||||
inputSection := analyzer.currentSection.(parser.TypeSection)
|
||||
if inputSection.Permission() == types.PermissionReadWrite {
|
||||
err = inputSection.NewError (
|
||||
@ -58,9 +63,6 @@ func (analyzer AnalysisOperation) analyzeTypeSection () (
|
||||
infoerr.ErrorKindError)
|
||||
}
|
||||
|
||||
outputSection := TypeSection { }
|
||||
outputSection.where = analyzer.currentPosition
|
||||
|
||||
outputSection.what, err = analyzer.analyzeType(inputSection.Type())
|
||||
if err != nil { return }
|
||||
|
||||
|
@ -76,7 +76,7 @@ func (analyzer AnalysisOperation) analyzeType (
|
||||
err error,
|
||||
) {
|
||||
outputType.mutable = inputType.Mutable()
|
||||
if outputType.length < 1 {
|
||||
if inputType.Length() < 1 {
|
||||
err = inputType.NewError (
|
||||
"cannot specify a length of zero",
|
||||
infoerr.ErrorKindError)
|
||||
|
Reference in New Issue
Block a user