61 lines
1.5 KiB
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
|
|
}
|