internal/gen: doc exported symbols (#9)
This commit is contained in:
@@ -19,6 +19,10 @@ type asmtest struct {
|
|||||||
prnt.Generator
|
prnt.Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewAsmTest prints one massive assembly function containing a line for every
|
||||||
|
// instruction form in the database. The intention is to pass this to the Go
|
||||||
|
// assembler and confirm there are no errors, thus helping to ensure our
|
||||||
|
// database is compatible.
|
||||||
func NewAsmTest(cfg printer.Config) Interface {
|
func NewAsmTest(cfg printer.Config) Interface {
|
||||||
return &asmtest{cfg: cfg}
|
return &asmtest{cfg: cfg}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,10 @@ type build struct {
|
|||||||
prnt.Generator
|
prnt.Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewBuild builds a printer that will generate instruction functions in the
|
||||||
|
// build package. Each instruction will have one method on the build.Context
|
||||||
|
// type, and a corresponding wrapper operating on the global Context. These
|
||||||
|
// functions are thin wrappers around constructors generated by NewCtors.
|
||||||
func NewBuild(cfg printer.Config) Interface {
|
func NewBuild(cfg printer.Config) Interface {
|
||||||
return GoFmt(&build{cfg: cfg})
|
return GoFmt(&build{cfg: cfg})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,9 @@ type ctors struct {
|
|||||||
prnt.Generator
|
prnt.Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewCtors will build instruction constructors. Each constructor will check
|
||||||
|
// that the provided operands match one of the allowed instruction forms. If so
|
||||||
|
// it will return an Instruction object that can be added to an avo Function.
|
||||||
func NewCtors(cfg printer.Config) Interface {
|
func NewCtors(cfg printer.Config) Interface {
|
||||||
return GoFmt(&ctors{cfg: cfg})
|
return GoFmt(&ctors{cfg: cfg})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ type ctorstest struct {
|
|||||||
prnt.Generator
|
prnt.Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewCtorsTest autogenerates tests for the constructors build by NewCtors.
|
||||||
func NewCtorsTest(cfg printer.Config) Interface {
|
func NewCtorsTest(cfg printer.Config) Interface {
|
||||||
return GoFmt(&ctorstest{cfg: cfg})
|
return GoFmt(&ctorstest{cfg: cfg})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,16 +7,20 @@ import (
|
|||||||
"github.com/mmcloughlin/avo/printer"
|
"github.com/mmcloughlin/avo/printer"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// Interface of an instruction code generator.
|
||||||
type Interface interface {
|
type Interface interface {
|
||||||
Generate([]inst.Instruction) ([]byte, error)
|
Generate([]inst.Instruction) ([]byte, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Func adapts a function to Interface.
|
||||||
type Func func([]inst.Instruction) ([]byte, error)
|
type Func func([]inst.Instruction) ([]byte, error)
|
||||||
|
|
||||||
|
// Generate calls f.
|
||||||
func (f Func) Generate(is []inst.Instruction) ([]byte, error) {
|
func (f Func) Generate(is []inst.Instruction) ([]byte, error) {
|
||||||
return f(is)
|
return f(is)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Builder constructs a code generator.
|
||||||
type Builder func(printer.Config) Interface
|
type Builder func(printer.Config) Interface
|
||||||
|
|
||||||
// GoFmt formats Go code produced from the given generator.
|
// GoFmt formats Go code produced from the given generator.
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ type godata struct {
|
|||||||
prnt.Generator
|
prnt.Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewGoData writes a Go variable containing the instructions database. This is
|
||||||
|
// intended to provide a more friendly version of the instruction database,
|
||||||
|
// rather than having to use the raw data sources all the time.
|
||||||
func NewGoData(cfg printer.Config) Interface {
|
func NewGoData(cfg printer.Config) Interface {
|
||||||
return GoFmt(&godata{cfg: cfg})
|
return GoFmt(&godata{cfg: cfg})
|
||||||
}
|
}
|
||||||
@@ -71,6 +74,12 @@ type godatatest struct {
|
|||||||
prnt.Generator
|
prnt.Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewGoDataTest writes a test case to confirm that NewGoData faithfully
|
||||||
|
// represented the list. The reason for this is that NewGoData uses custom code
|
||||||
|
// to "pretty print" the database so it is somewhat human-readable. In the
|
||||||
|
// process we could easily mistakenly print the database incorrectly. This test
|
||||||
|
// prints the same slice of instructions with the ugly but correct "%#v" format
|
||||||
|
// specifier, and confirms that the two arrays agree.
|
||||||
func NewGoDataTest(cfg printer.Config) Interface {
|
func NewGoDataTest(cfg printer.Config) Interface {
|
||||||
return GoFmt(&godatatest{cfg: cfg})
|
return GoFmt(&godatatest{cfg: cfg})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,6 +16,8 @@ type mov struct {
|
|||||||
prnt.Generator
|
prnt.Generator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NewMOV generates a function that will auto-select the correct MOV instruction
|
||||||
|
// based on operand types and and sizes.
|
||||||
func NewMOV(cfg printer.Config) Interface {
|
func NewMOV(cfg printer.Config) Interface {
|
||||||
return GoFmt(&mov{cfg: cfg})
|
return GoFmt(&mov{cfg: cfg})
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user