This commit is contained in:
Michael McLoughlin
2018-11-06 21:10:54 -05:00
parent 099f29d941
commit 5fb985ad23
2 changed files with 138 additions and 0 deletions

53
ast.go Normal file
View File

@@ -0,0 +1,53 @@
package avo
// GoType represents a Golang type.
type GoType interface{}
// Parameter represents a parameter to an assembly function.
type Parameter struct {
Name string
Type GoType
}
// Instruction is a single instruction in a function.
type Instruction struct {
Mnemonic string
Operands []string
}
// File represents an assembly file.
type File struct {
functions []*Function
}
// Function represents an assembly function.
type Function struct {
name string
params []Parameter
inst []Instruction
}
func NewFunction(name string) *Function {
return &Function{
name: name,
}
}
func (f *Function) AddInstruction(i Instruction) {
f.inst = append(f.inst, i)
}
// Name returns the function name.
func (f *Function) Name() string { return f.name }
// FrameBytes returns the size of the stack frame in bytes.
func (f *Function) FrameBytes() int {
// TODO(mbm): implement
return 0
}
// ArgumentBytes returns the size of the arguments in bytes.
func (f *Function) ArgumentBytes() int {
// TODO(mbm): implement
return 0
}