src.elv.sh@v0.21.0-dev.0.20240515223629-06979efb9a2a/pkg/eval/builtin_fn_debug.go (about)

     1  package eval
     2  
     3  import (
     4  	"runtime"
     5  
     6  	"src.elv.sh/pkg/logutil"
     7  	"src.elv.sh/pkg/parse"
     8  )
     9  
    10  func init() {
    11  	addBuiltinFns(map[string]any{
    12  		"src":    src,
    13  		"-gc":    _gc,
    14  		"-stack": _stack,
    15  		"-log":   _log,
    16  	})
    17  }
    18  
    19  func src(fm *Frame) parse.Source {
    20  	return fm.srcMeta
    21  }
    22  
    23  func _gc() {
    24  	runtime.GC()
    25  }
    26  
    27  func _stack(fm *Frame) error {
    28  	// TODO(xiaq): Dup with main.go.
    29  	buf := make([]byte, 1024)
    30  	for runtime.Stack(buf, true) == cap(buf) {
    31  		buf = make([]byte, cap(buf)*2)
    32  	}
    33  	_, err := fm.ByteOutput().Write(buf)
    34  	return err
    35  }
    36  
    37  func _log(fname string) error {
    38  	return logutil.SetOutputFile(fname)
    39  }