#autoload

local _name _ret

[[ "$1" != (|-) ]] && _name="$1"

shift

if (( $+functions[$1] )); then
  "$@"
  _ret="$?"

  [[ -n "$_name" ]] && eval "${_name}=${_ret}"

  compstate[restore]=''

  return 0
fi

return 1
