Skip to content

Commit 89f7f5e

Browse files
committed
BOOST_FORCEINLINE on dispatch related functions
1 parent 9806cca commit 89f7f5e

File tree

1 file changed

+37
-31
lines changed

1 file changed

+37
-31
lines changed

include/yorel/yomm2/core.hpp

Lines changed: 37 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -657,8 +657,8 @@ class method<Name, Return(Parameters...), Options...>
657657
-> const std::uintptr_t*;
658658

659659
template<class Error>
660-
void check_static_offset(std::size_t actual, std::size_t expected) const
661-
noexcept(NoExcept);
660+
auto check_static_offset(std::size_t actual, std::size_t expected) const
661+
noexcept(NoExcept) -> void;
662662

663663
template<typename MethodArgList, typename ArgType, typename... MoreArgTypes>
664664
auto resolve_uni(const ArgType& arg, const MoreArgTypes&... more_args) const
@@ -841,12 +841,33 @@ method<Name, Return(Parameters...), Options...>::~method() {
841841
Policy::methods.remove(*this);
842842
}
843843

844+
template<
845+
typename Name, typename Return, typename... Parameters, class... Options>
846+
template<class Error>
847+
auto method<Name, Return(Parameters...), Options...>::check_static_offset(
848+
std::size_t actual, std::size_t expected) const noexcept(NoExcept) -> void {
849+
using namespace detail;
850+
851+
if (actual != expected) {
852+
if (Policy::template has_facet<policies::error_handler>) {
853+
Error error;
854+
error.method = Policy::template static_type<method>();
855+
error.expected = this->slots_strides[0];
856+
error.actual = actual;
857+
Policy::error(error);
858+
859+
abort();
860+
}
861+
}
862+
}
863+
844864
// -----------------------------------------------------------------------------
845865
// method dispatch
846866

847867
template<
848868
typename Name, typename Return, typename... Parameters, class... Options>
849-
auto inline method<Name, Return(Parameters...), Options...>::operator()(
869+
BOOST_FORCEINLINE auto
870+
method<Name, Return(Parameters...), Options...>::operator()(
850871
detail::remove_virtual<Parameters>... args) const noexcept(NoExcept)
851872
-> Return {
852873
using namespace detail;
@@ -858,9 +879,10 @@ auto inline method<Name, Return(Parameters...), Options...>::operator()(
858879
template<
859880
typename Name, typename Return, typename... Parameters, class... Options>
860881
template<typename... ArgType>
861-
inline typename method<Name, Return(Parameters...), Options...>::FunctionPointer
862-
method<Name, Return(Parameters...), Options...>::resolve(
863-
const ArgType&... args) const {
882+
BOOST_FORCEINLINE
883+
typename method<Name, Return(Parameters...), Options...>::FunctionPointer
884+
method<Name, Return(Parameters...), Options...>::resolve(
885+
const ArgType&... args) const {
864886
using namespace detail;
865887

866888
std::uintptr_t pf;
@@ -877,7 +899,7 @@ method<Name, Return(Parameters...), Options...>::resolve(
877899
template<
878900
typename Name, typename Return, typename... Parameters, class... Options>
879901
template<typename ArgType>
880-
inline auto
902+
BOOST_FORCEINLINE auto
881903
method<Name, Return(Parameters...), Options...>::vptr(const ArgType& arg) const
882904
noexcept(NoExcept) -> const std::uintptr_t* {
883905
if constexpr (is_virtual_ptr<ArgType>) {
@@ -889,31 +911,11 @@ method<Name, Return(Parameters...), Options...>::vptr(const ArgType& arg) const
889911
}
890912
}
891913

892-
template<
893-
typename Name, typename Return, typename... Parameters, class... Options>
894-
template<class Error>
895-
inline auto
896-
method<Name, Return(Parameters...), Options...>::check_static_offset(
897-
std::size_t actual, std::size_t expected) const noexcept(NoExcept) -> void {
898-
using namespace detail;
899-
900-
if (actual != expected) {
901-
if (Policy::template has_facet<policies::error_handler>) {
902-
Error error;
903-
error.method = Policy::template static_type<method>();
904-
error.expected = this->slots_strides[0];
905-
error.actual = actual;
906-
Policy::error(error);
907-
908-
abort();
909-
}
910-
}
911-
}
912-
913914
template<
914915
typename Name, typename Return, typename... Parameters, class... Options>
915916
template<typename MethodArgList, typename ArgType, typename... MoreArgTypes>
916-
inline auto method<Name, Return(Parameters...), Options...>::resolve_uni(
917+
BOOST_FORCEINLINE auto
918+
method<Name, Return(Parameters...), Options...>::resolve_uni(
917919
const ArgType& arg, const MoreArgTypes&... more_args) const
918920
noexcept(NoExcept) -> std::uintptr_t {
919921

@@ -949,7 +951,7 @@ template<
949951
template<
950952
std::size_t VirtualArg, typename MethodArgList, typename ArgType,
951953
typename... MoreArgTypes>
952-
inline auto
954+
BOOST_FORCEINLINE auto
953955
method<Name, Return(Parameters...), Options...>::resolve_multi_first(
954956
const ArgType& arg, const MoreArgTypes&... more_args) const
955957
noexcept(NoExcept) -> std::uintptr_t {
@@ -997,7 +999,8 @@ template<
997999
template<
9981000
std::size_t VirtualArg, typename MethodArgList, typename ArgType,
9991001
typename... MoreArgTypes>
1000-
inline auto method<Name, Return(Parameters...), Options...>::resolve_multi_next(
1002+
BOOST_FORCEINLINE auto
1003+
method<Name, Return(Parameters...), Options...>::resolve_multi_next(
10011004
const std::uintptr_t* dispatch, const ArgType& arg,
10021005
const MoreArgTypes&... more_args) const noexcept(NoExcept)
10031006
-> std::uintptr_t {
@@ -1043,6 +1046,9 @@ inline auto method<Name, Return(Parameters...), Options...>::resolve_multi_next(
10431046
}
10441047
}
10451048

1049+
// -----------------------------------------------------------------------------
1050+
// Error handling
1051+
10461052
template<
10471053
typename Name, typename Return, typename... Parameters, class... Options>
10481054
BOOST_NORETURN auto

0 commit comments

Comments
 (0)