github.com/nevalang/neva@v0.23.1-0.20240507185603-7696a9bb8dda/internal/runtime/funcs/panic.go (about)

     1  package funcs
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/nevalang/neva/internal/runtime"
     8  )
     9  
    10  type panicker struct{}
    11  
    12  func (p panicker) Create(
    13  	io runtime.FuncIO,
    14  	_ runtime.Msg,
    15  ) (func(ctx context.Context), error) {
    16  	msgIn, err := io.In.Port("msg")
    17  	if err != nil {
    18  		return nil, err
    19  	}
    20  	return func(ctx context.Context) {
    21  		select {
    22  		case <-ctx.Done():
    23  			return
    24  		case panicMsg := <-msgIn:
    25  			cancel := ctx.Value("cancel").(context.CancelFunc)
    26  			cancel()
    27  			fmt.Printf("panic: %v\n", panicMsg)
    28  		}
    29  	}, nil
    30  }