Special function for type checking and returning an error in one fell swop

This commit is contained in:
2022-10-11 18:03:44 -04:00
parent d74f3a40dd
commit 67c94fb0e8
4 changed files with 33 additions and 10 deletions

View File

@@ -3,7 +3,7 @@ package analyzer
import "os"
import "fmt"
import "path/filepath"
// import "git.tebibyte.media/arf/arf/types"
import "git.tebibyte.media/arf/arf/file"
import "git.tebibyte.media/arf/arf/parser"
import "git.tebibyte.media/arf/arf/infoerr"
@@ -213,6 +213,28 @@ func (analyzer *AnalysisOperation) addSection (section Section) {
return
}
// typeCheck checks to see if source can fit as an argument into a slot of type
// destination. If it can, it retunrs nil. If it can't, it returns an error
// explaining why.
func (analyzer *AnalysisOperation) typeCheck (
location file.Location,
source Argument,
destination Type,
) (
err error,
) {
if !source.canBePassedAs(destination) {
err = infoerr.NewError (
location,
typeMismatchErrorMessage (
source.What(),
destination),
infoerr.ErrorKindError)
}
return
}
func doIndent (indent int, input ...any) (output string) {
for index := 0; index < indent; index ++ {
output += "\t"