mirror of
https://github.com/matrix-construct/construct
synced 2024-11-26 00:32:35 +01:00
ircd:Ⓜ️:error: Improve ctor codegen; non-template out-of-line; elide fmt.
This commit is contained in:
parent
3a3da12051
commit
6d79237301
2 changed files with 37 additions and 22 deletions
|
@ -44,8 +44,14 @@ class ircd::m::error
|
||||||
string_view errcode() const noexcept;
|
string_view errcode() const noexcept;
|
||||||
string_view errstr() const noexcept;
|
string_view errstr() const noexcept;
|
||||||
|
|
||||||
template<class... args> error(const http::code &, const string_view &errcode, const string_view &fmt, args&&...);
|
template<class... args>
|
||||||
template<class... args> error(const string_view &errcode, const string_view &fmt, args&&...);
|
[[clang::internal_linkage]]
|
||||||
|
error(const http::code &, const string_view &errcode, const string_view &fmt, args&&...);
|
||||||
|
|
||||||
|
template<class... args>
|
||||||
|
error(const string_view &errcode, const string_view &fmt, args&&...);
|
||||||
|
|
||||||
|
error(const http::code &, const string_view &errcode, const string_view &fmt);
|
||||||
error(const http::code &, const json::object &object);
|
error(const http::code &, const json::object &object);
|
||||||
error(const http::code &, const json::members &);
|
error(const http::code &, const json::members &);
|
||||||
error(const http::code &, const json::iov &);
|
error(const http::code &, const json::iov &);
|
||||||
|
@ -76,7 +82,8 @@ class ircd::m::error
|
||||||
struct _name_ \
|
struct _name_ \
|
||||||
: _parent_ \
|
: _parent_ \
|
||||||
{ \
|
{ \
|
||||||
[[gnu::noinline]] \
|
[[clang::internal_linkage]] \
|
||||||
|
[[gnu::noinline, gnu::visibility("internal")]] \
|
||||||
_name_() \
|
_name_() \
|
||||||
: _parent_ \
|
: _parent_ \
|
||||||
{ \
|
{ \
|
||||||
|
@ -84,7 +91,8 @@ struct _name_ \
|
||||||
}{} \
|
}{} \
|
||||||
\
|
\
|
||||||
template<class... args> \
|
template<class... args> \
|
||||||
[[gnu::noinline]] \
|
[[clang::internal_linkage]] \
|
||||||
|
[[gnu::noinline, gnu::visibility("internal")]] \
|
||||||
_name_(const string_view &fmt, args&&... a) \
|
_name_(const string_view &fmt, args&&... a) \
|
||||||
: _parent_ \
|
: _parent_ \
|
||||||
{ \
|
{ \
|
||||||
|
@ -92,7 +100,7 @@ struct _name_ \
|
||||||
}{} \
|
}{} \
|
||||||
\
|
\
|
||||||
template<class... args> \
|
template<class... args> \
|
||||||
[[gnu::noinline]] \
|
[[gnu::always_inline]] \
|
||||||
_name_(child_t, args&&... a) \
|
_name_(child_t, args&&... a) \
|
||||||
: _parent_ \
|
: _parent_ \
|
||||||
{ \
|
{ \
|
||||||
|
@ -119,33 +127,29 @@ namespace ircd::m
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class... args>
|
template<class... args>
|
||||||
[[using gnu: flatten]]
|
[[using clang: internal_linkage]]
|
||||||
inline
|
[[using gnu: noinline, visibility("internal")]]
|
||||||
ircd::m::error::error(const http::code &status,
|
ircd::m::error::error(const http::code &status,
|
||||||
const string_view &errcode,
|
const string_view &errcode,
|
||||||
const string_view &fmt,
|
const string_view &fmt,
|
||||||
args&&... a)
|
args&&... a)
|
||||||
:error
|
:error
|
||||||
{
|
{
|
||||||
internal, status, [&errcode, &fmt, &a...]() -> json::strung
|
status, json::members
|
||||||
{
|
{
|
||||||
const string_view str
|
{ "errcode", errcode },
|
||||||
|
{ "error", string_view
|
||||||
{
|
{
|
||||||
fmt::sprintf
|
fmt::sprintf
|
||||||
{
|
{
|
||||||
fmtbuf, fmt, std::forward<args>(a)...
|
fmtbuf, fmt, std::forward<args>(a)...
|
||||||
}
|
}
|
||||||
};
|
}}
|
||||||
|
}
|
||||||
return json::members
|
|
||||||
{
|
|
||||||
{ "errcode", errcode },
|
|
||||||
{ "error", str },
|
|
||||||
};
|
|
||||||
}()
|
|
||||||
}{}
|
}{}
|
||||||
|
|
||||||
template<class... args>
|
template<class... args>
|
||||||
|
[[using gnu: always_inline]]
|
||||||
inline
|
inline
|
||||||
ircd::m::error::error(const string_view &errcode,
|
ircd::m::error::error(const string_view &errcode,
|
||||||
const string_view &fmt,
|
const string_view &fmt,
|
||||||
|
@ -153,16 +157,14 @@ ircd::m::error::error(const string_view &errcode,
|
||||||
:error
|
:error
|
||||||
{
|
{
|
||||||
http::INTERNAL_SERVER_ERROR, errcode, fmt, std::forward<args>(a)...
|
http::INTERNAL_SERVER_ERROR, errcode, fmt, std::forward<args>(a)...
|
||||||
}
|
}{}
|
||||||
{}
|
|
||||||
|
|
||||||
template<class... args>
|
template<class... args>
|
||||||
[[using gnu: flatten, always_inline]]
|
[[using gnu: always_inline]]
|
||||||
inline
|
inline
|
||||||
ircd::m::error::error(child_t,
|
ircd::m::error::error(child_t,
|
||||||
args&&... a)
|
args&&... a)
|
||||||
:error
|
:error
|
||||||
{
|
{
|
||||||
std::forward<args>(a)...
|
std::forward<args>(a)...
|
||||||
}
|
}{}
|
||||||
{}
|
|
||||||
|
|
|
@ -70,6 +70,19 @@ ircd::m::error::error(const http::code &c,
|
||||||
}
|
}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
ircd::m::error::error(const http::code &status,
|
||||||
|
const string_view &errcode,
|
||||||
|
const string_view &fmt)
|
||||||
|
:error
|
||||||
|
{
|
||||||
|
status, json::members
|
||||||
|
{
|
||||||
|
{ "errcode", errcode },
|
||||||
|
{ "error", fmt },
|
||||||
|
},
|
||||||
|
}
|
||||||
|
{}
|
||||||
|
|
||||||
ircd::m::error::error(internal_t,
|
ircd::m::error::error(internal_t,
|
||||||
const http::code &c,
|
const http::code &c,
|
||||||
std::string object)
|
std::string object)
|
||||||
|
|
Loading…
Reference in a new issue