code: func (ev *evaluator) recover(errp *error) {
  	e := recover()
  	if e == nil {
  		return
  	}
  	if err, ok := e.(runtime.Error); ok {
  		// Print the stack trace but do not inhibit the running application.
  		buf := make([]byte, 64<<10)
  		buf = buf[:runtime.Stack(buf, false)]
  
  		level.Error(ev.logger).Log("msg", "runtime panic in parser", "err", e, "stacktrace", string(buf))
  		*errp = errors.Wrap(err, "unexpected error")
  	} else {
  		*errp = e.(error)
  	}
  }
docs: // recover is the handler that turns panics into returns from the top level of evaluation.