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  }