builtin_fn_debug.go 595 B

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