diff options
author | 2021-10-05 03:34:45 +1100 | |
---|---|---|
committer | 2021-10-05 03:34:45 +1100 | |
commit | aeb9eae87469e67bc6a91caf3840c34c11d959fc (patch) | |
tree | 45bffedf374dbce47caca633ad7bda547592e6c9 /src/lib/util/delegate.h | |
parent | 33723892a3f06e678d817b36aef84364c32848ec (diff) |
util: Further API cleanups: (#8661)
* Turned `core_file` into an implementation of `random_read_write`.
* Turned PNG errors into a standard error category.
* Added a helper for generating what look like derived classes on-the-fly.
Diffstat (limited to 'src/lib/util/delegate.h')
-rw-r--r-- | src/lib/util/delegate.h | 26 |
1 files changed, 7 insertions, 19 deletions
diff --git a/src/lib/util/delegate.h b/src/lib/util/delegate.h index 609b6667bfc..df1d6ebcba3 100644 --- a/src/lib/util/delegate.h +++ b/src/lib/util/delegate.h @@ -114,6 +114,8 @@ #pragma once +#include "abi.h" + #include <any> #include <cassert> #include <cstddef> @@ -143,35 +145,21 @@ #if defined(__MINGW32__) && !defined(__x86_64__) && defined(__i386__) #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE //#define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_ITANIUM - //#define MAME_DELEGATE_MEMBER_ABI __thiscall //#define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 1 #elif defined(__clang__) && defined(__i386__) && defined(_WIN32) #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE #else #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_ITANIUM - #define MAME_DELEGATE_MEMBER_ABI #define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 0 #endif #elif defined(_MSC_VER) && (defined(_M_X64) || defined(_M_ARM64)) - #define MAME_DELEGATE_MEMBER_ABI #define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 0 #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_MSVC #else #define MAME_DELEGATE_USE_TYPE MAME_DELEGATE_TYPE_COMPATIBLE #endif -#if defined(__arm__) || defined(__ARMEL__) || defined(__aarch64__) - #define MAME_DELEGATE_ITANIUM_ARM 1 -#elif defined(__MIPSEL__) || defined(__mips_isa_rev) || defined(__mips64) - #define MAME_DELEGATE_ITANIUM_ARM 1 -#elif defined(__EMSCRIPTEN__) - #define MAME_DELEGATE_ITANIUM_ARM 1 -#else - #define MAME_DELEGATE_ITANIUM_ARM 0 -#endif - #if MAME_DELEGATE_USE_TYPE == MAME_DELEGATE_TYPE_COMPATIBLE - #define MAME_DELEGATE_MEMBER_ABI #define MAME_DELEGATE_DIFFERENT_MEMBER_ABI 0 #endif @@ -359,7 +347,7 @@ ReturnType delegate_mfp_compatible::method_stub(delegate_generic_class *object, /// /// Supports the two most popular pointer to member function /// implementations described in the Itanium C++ ABI. Both of these -/// consist of a pointer followed by a pointer followed by a ptrdiff_t. +/// consist of a pointer followed by a ptrdiff_t. /// /// The first variant is used when member the least significant bit of a /// member function pointer need never be set and vtable entry offsets @@ -367,8 +355,8 @@ ReturnType delegate_mfp_compatible::method_stub(delegate_generic_class *object, /// it is a conventional function pointer to the member function. If /// the pointer is odd, it is a byte offset into the vtable plus one. /// The ptrdiff_t is a byte offset to add to the this pointer. A null -/// member function pointer is represented by setting the pointer to -/// a null pointer. +/// member function pointer is represented by setting the pointer to a +/// null pointer. /// /// The second variant is used when the least significant bit of a /// pointer to a member function may need to be set or it may not be @@ -408,7 +396,7 @@ public: bool isnull() const { - if (MAME_DELEGATE_ITANIUM_ARM) + if (MAME_ABI_CXX_ITANIUM_MFP_TYPE == MAME_ABI_CXX_ITANIUM_MFP_ARM) return !reinterpret_cast<void (*)()>(m_function) && !(m_this_delta & 1); else return !reinterpret_cast<void (*)()>(m_function); @@ -690,7 +678,7 @@ public: // define our traits template <class FunctionClass> using traits = delegate_traits<FunctionClass, ReturnType, Params...>; using generic_static_func = typename traits<delegate_generic_class>::static_func_type; - typedef MAME_DELEGATE_MEMBER_ABI generic_static_func generic_member_func; + typedef MAME_ABI_CXX_MEMBER_CALL generic_static_func generic_member_func; // generic constructor delegate_base() = default; |