code: func (t *tree) recover(errp *error) {
  	e := recover()
  	if e == nil {
  		return
  	}
  	if _, ok := e.(runtime.Error); ok {
  		panic(e)
  	}
  	t.lex.drain()
  	t.lex = nil
  	if str, ok := e.(string); ok {
  		*errp = errors.New(str)
  	} else {
  		*errp = e.(error)
  	}
  }
docs: // recover is the handler that turns panics into returns from the top level of Parse.