Compare commits

...

2 Commits

Author SHA1 Message Date
Sasha Koshka 5641220986 Some stuff on the func sections babey 2022-10-23 01:16:40 -04:00
Sasha Koshka a9a1c6ae9b Data sections can now have rw perms 2022-10-23 00:07:14 -04:00
4 changed files with 50 additions and 13 deletions

View File

@ -131,6 +131,8 @@ func (analyzer *analysisOperation) fetchSection (
section, err = analyzer.analyzeDataSection()
if err != nil { return}
case parser.FuncSection:
section, err = analyzer.analyzeFuncSection()
if err != nil { return}
}
return

View File

@ -1,6 +1,5 @@
package analyzer
import "git.tebibyte.media/arf/arf/types"
import "git.tebibyte.media/arf/arf/parser"
import "git.tebibyte.media/arf/arf/infoerr"
@ -37,16 +36,7 @@ func (analyzer analysisOperation) analyzeDataSection () (
analyzer.addSection(section)
inputSection := analyzer.currentSection.(parser.DataSection)
outputSection.location = analyzer.currentSection.Location()
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.location = analyzer.currentSection.Location()
outputSection.permission = inputSection.Permission()
// get inherited type

View File

@ -1,14 +1,60 @@
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
}

View File

@ -4,8 +4,7 @@ import "testing"
func TestFuncSection (test *testing.T) {
checkTree ("../tests/analyzer/funcSection", false,
`
typeSection ro ../tests/analyzer/funcSection.aCString
`typeSection ro ../tests/analyzer/funcSection.aCString
type 1 pointer {
type 1 basic U8
}