36 lines
776 B
Go
36 lines
776 B
Go
package core
|
|
|
|
import (
|
|
"git.akyoto.dev/cli/q/src/fs"
|
|
"git.akyoto.dev/cli/q/src/register"
|
|
"git.akyoto.dev/cli/q/src/scope"
|
|
"git.akyoto.dev/cli/q/src/token"
|
|
"git.akyoto.dev/cli/q/src/types"
|
|
)
|
|
|
|
// Function represents the smallest unit of code.
|
|
type Function struct {
|
|
register.Machine
|
|
Package string
|
|
Name string
|
|
UniqueName string
|
|
File *fs.File
|
|
Body token.List
|
|
Parameters []*scope.Variable
|
|
ReturnTypes []*types.Type
|
|
Functions map[string]*Function
|
|
Err error
|
|
deferred []func()
|
|
count counter
|
|
}
|
|
|
|
// counter stores how often a certain statement appeared so we can generate a unique label from it.
|
|
type counter struct {
|
|
assert int
|
|
branch int
|
|
multiBranch int
|
|
data int
|
|
loop int
|
|
subBranch int
|
|
}
|