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 )