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 }