github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/compiler/contract.go (about)

     1  package compiler
     2  
     3  import (
     4  	"context"
     5  
     6  	src "github.com/nevalang/neva/internal/compiler/sourcecode"
     7  	"github.com/nevalang/neva/internal/runtime/ir"
     8  )
     9  
    10  const (
    11  	ExternDirective    src.Directive = "extern"
    12  	BindDirective      src.Directive = "bind"
    13  	AutoportsDirective src.Directive = "autoports"
    14  )
    15  
    16  type (
    17  	Builder interface {
    18  		Build(ctx context.Context, wd string) (RawBuild, string, *Error)
    19  	}
    20  
    21  	RawBuild struct {
    22  		EntryModRef src.ModuleRef
    23  		Modules     map[src.ModuleRef]RawModule
    24  	}
    25  
    26  	Parser interface {
    27  		ParseModules(rawMods map[src.ModuleRef]RawModule) (map[src.ModuleRef]src.Module, *Error)
    28  	}
    29  
    30  	RawModule struct {
    31  		Manifest src.ModuleManifest    // Manifest must be parsed by builder before passing into compiler
    32  		Packages map[string]RawPackage // Packages themselves on the other hand can be parsed by compiler
    33  	}
    34  
    35  	RawPackage map[string][]byte
    36  
    37  	Analyzer interface {
    38  		AnalyzeExecutableBuild(mod src.Build, mainPkgName string) (src.Build, *Error)
    39  	}
    40  
    41  	Desugarer interface {
    42  		Desugar(build src.Build) (src.Build, *Error)
    43  	}
    44  
    45  	IRGenerator interface {
    46  		Generate(build src.Build, mainPkgName string) (*ir.Program, *Error)
    47  	}
    48  
    49  	Backend interface {
    50  		Emit(dst string, prog *ir.Program) error
    51  	}
    52  )