tinygo: github.com/tinygo-org/tinygo/compiler Index | Files

package compiler

import "github.com/tinygo-org/tinygo/compiler"


Package Files

asserts.go calls.go channel.go compiler.go defer.go errors.go func-lowering.go func.go gc.go goroutine-lowering.go inlineasm.go interface-lowering.go interface.go llvm.go map.go optimizer.go reflect.go sizes.go symbol.go syscall.go volatile.go wordpack.go


const MaxFieldsPerParam = 3

The maximum number of arguments that can be expanded from a single struct. If a struct contains more fields, it is passed as a struct without expanding.

type Compiler Uses

type Compiler struct {
    // contains filtered or unexported fields

func NewCompiler Uses

func NewCompiler(pkgName string, config Config) (*Compiler, error)

func (*Compiler) ApplyFunctionSections Uses

func (c *Compiler) ApplyFunctionSections()

func (*Compiler) Compile Uses

func (c *Compiler) Compile(mainPath string) []error

Compile the given package path or .go file path. Return an error when this fails (in any stage).

func (*Compiler) EmitBitcode Uses

func (c *Compiler) EmitBitcode(path string) error

Emit LLVM bitcode file (.bc).

func (*Compiler) EmitObject Uses

func (c *Compiler) EmitObject(path string) error

Emit object file (.o).

func (*Compiler) EmitText Uses

func (c *Compiler) EmitText(path string) error

Emit LLVM IR source file (.ll).

func (*Compiler) ExternalInt64AsPtr Uses

func (c *Compiler) ExternalInt64AsPtr() error

When -wasm-abi flag set to "js" (default), replace i64 in an external function with a stack-allocated i64*, to work around the lack of 64-bit integers in JavaScript (commonly used together with WebAssembly). Once that's resolved, this pass may be avoided. See also the -wasm-abi= flag https://github.com/WebAssembly/design/issues/1172

func (*Compiler) IR Uses

func (c *Compiler) IR() string

IR returns the whole IR as a human-readable string.

func (*Compiler) LowerFuncValues Uses

func (c *Compiler) LowerFuncValues()

LowerFuncValue lowers the runtime.funcValueWithSignature type and runtime.getFuncPtr function to their final form.

func (*Compiler) LowerGoroutines Uses

func (c *Compiler) LowerGoroutines() error

LowerGoroutines is a pass called during optimization that transforms the IR into one where all blocking functions are turned into goroutines and blocking calls into await calls.

func (*Compiler) LowerInterfaces Uses

func (c *Compiler) LowerInterfaces()

Lower all interface functions. They are emitted by the compiler as higher-level intrinsics that need some lowering before LLVM can work on them. This is done so that a few cleanup passes can run before assigning the final type codes.

func (*Compiler) Module Uses

func (c *Compiler) Module() llvm.Module

Return the LLVM module. Only valid after a successful compile.

func (*Compiler) NonConstGlobals Uses

func (c *Compiler) NonConstGlobals()

Turn all global constants into global variables. This works around a limitation on Harvard architectures (e.g. AVR), where constant and non-constant pointers point to a different address space.

func (*Compiler) Optimize Uses

func (c *Compiler) Optimize(optLevel, sizeLevel int, inlinerThreshold uint) error

Run the LLVM optimizer over the module. The inliner can be disabled (if necessary) by passing 0 to the inlinerThreshold.

func (*Compiler) OptimizeAllocs Uses

func (c *Compiler) OptimizeAllocs()

Basic escape analysis: translate runtime.alloc calls into alloca instructions.

func (*Compiler) OptimizeMaps Uses

func (c *Compiler) OptimizeMaps()

Eliminate created but not used maps.

In the future, this should statically allocate created but never modified maps. This has not yet been implemented, however.

func (*Compiler) OptimizeStringToBytes Uses

func (c *Compiler) OptimizeStringToBytes()

Transform runtime.stringToBytes(...) calls into const []byte slices whenever possible. This optimizes the following pattern:


where Write does not store to the slice.

func (*Compiler) Packages Uses

func (c *Compiler) Packages() []*loader.Package

func (*Compiler) TargetData Uses

func (c *Compiler) TargetData() llvm.TargetData

Return the LLVM target data object. Only valid after a successful compile.

func (*Compiler) Verify Uses

func (c *Compiler) Verify() error

type Config Uses

type Config struct {
    Triple        string   // LLVM target triple, e.g. x86_64-unknown-linux-gnu (empty string means default)
    CPU           string   // LLVM CPU name, e.g. atmega328p (empty string means default)
    Features      []string // LLVM CPU features
    GOOS          string   //
    GOARCH        string   //
    GC            string   // garbage collection strategy
    PanicStrategy string   // panic strategy ("abort" or "trap")
    CFlags        []string // cflags to pass to cgo
    LDFlags       []string // ldflags to pass to cgo
    ClangHeaders  string   // Clang built-in header include path
    DumpSSA       bool     // dump Go SSA, for compiler debugging
    Debug         bool     // add debug symbols for gdb
    GOROOT        string   // GOROOT
    TINYGOROOT    string   // GOROOT for TinyGo
    GOPATH        string   // GOPATH, like `go env GOPATH`
    BuildTags     []string // build tags for TinyGo (empty means {Config.GOOS/Config.GOARCH})
    TestConfig    TestConfig

Configure the compiler.

type Frame Uses

type Frame struct {
    // contains filtered or unexported fields

type Phi Uses

type Phi struct {
    // contains filtered or unexported fields

type StdSizes Uses

type StdSizes struct {
    IntSize  int64
    PtrSize  int64
    MaxAlign int64

func (*StdSizes) Alignof Uses

func (s *StdSizes) Alignof(T types.Type) int64

func (*StdSizes) Offsetsof Uses

func (s *StdSizes) Offsetsof(fields []*types.Var) []int64

func (*StdSizes) Sizeof Uses

func (s *StdSizes) Sizeof(T types.Type) int64

type TestConfig Uses

type TestConfig struct {
    CompileTestBinary bool

Package compiler imports 18 packages (graph) and is imported by 3 packages. Updated 2019-07-19. Refresh now. Tools for package owners.