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/func-section.go

61 lines
1.5 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"
// FuncSection represents a type definition section.
type FuncSection struct {
sectionBase
external bool
}
// ToString returns all data stored within the function section, in string form.
func (section FuncSection) ToString (indent int) (output string) {
output += doIndent(indent, "funcSection ")
output += section.permission.ToString() + " "
output += section.where.ToString()
output += "\n"
// TODO: arguments
// TODO: root block
return
}
// analyzeFuncSection analyzes a function section.
func (analyzer *analysisOperation) analyzeFuncSection () (
section Section,
err error,
) {
outputSection := FuncSection { }
outputSection.where = analyzer.currentPosition
section = &outputSection
analyzer.addSection(section)
inputSection := analyzer.currentSection.(parser.FuncSection)
outputSection.location = analyzer.currentSection.Location()
// TODO: do not do this if it is a method
if inputSection.Permission() == types.PermissionReadWrite {
err = inputSection.NewError (
"read-write (rw) permission not understood in this " +
"context, try read-only (ro)",
infoerr.ErrorKindError)
return
}
outputSection.permission = inputSection.Permission()
// TODO: analyze inputs and outputs and reciever
if inputSection.External() {
outputSection.external = true
} else {
// TODO: analyze root block if not nil
}
return
}