github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/compiler/backend/dot/backend.go (about) 1 package dot 2 3 import ( 4 "os" 5 "path/filepath" 6 7 "github.com/nevalang/neva/internal/runtime/ir" 8 ) 9 10 type Backend struct{} 11 12 func NewBackend() Backend { 13 return Backend{} 14 } 15 16 func (b Backend) Emit(dst string, prog *ir.Program) error { 17 outFile := filepath.Join(dst, "program.dot") 18 f, err := os.OpenFile(outFile, os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0755) 19 if err != nil { 20 return err 21 } 22 defer f.Close() 23 var cb ClusterBuilder 24 for _, e := range prog.Connections { 25 for _, r := range e.ReceiverSides { 26 cb.InsertEdge(e.SenderSide, r.PortAddr) 27 } 28 } 29 return cb.Build(f) 30 }