22/*
33 * FakeIt - A Simplified C++ Mocking Framework
44 * Copyright (c) Eran Pe'er 2013
5- * Generated: 2021-03-21 11:36:30.552658
5+ * Generated: 2021-04-11 20:16:43.585492
66 * Distributed under the MIT License. Please refer to the LICENSE file at:
77 * https://github.com/eranpeer/FakeIt
88 */
@@ -5285,10 +5285,16 @@ namespace fakeit {
52855285
52865286 };
52875287}
5288+ #if defined(__GNUG__) && !defined(__clang__)
5289+ #define FAKEIT_NO_DEVIRTUALIZE_ATTR [[gnu::optimize(" no-devirtualize" )]]
5290+ #else
5291+ #define FAKEIT_NO_DEVIRTUALIZE_ATTR
5292+ #endif
5293+
52885294namespace fakeit {
52895295
52905296 template <typename TARGET, typename SOURCE>
5291- [[gnu::optimize( " no-devirtualize " )]]
5297+ FAKEIT_NO_DEVIRTUALIZE_ATTR
52925298 TARGET union_cast (SOURCE source) {
52935299
52945300 union {
@@ -5310,15 +5316,23 @@ namespace fakeit {
53105316 class VTUtils {
53115317 public:
53125318
5319+ #ifdef __GNUG__
5320+ #ifndef __clang__
53135321#pragma GCC diagnostic push
53145322#pragma GCC diagnostic ignored "-Wcast-function-type"
5323+ #endif
5324+ #endif
53155325 template <typename C, typename R, typename ... arglist>
53165326 static unsigned int getOffset (R (C::*vMethod)(arglist...)) {
53175327 auto sMethod = reinterpret_cast <unsigned int (VirtualOffsetSelector::*)(int )>(vMethod);
53185328 VirtualOffsetSelector offsetSelctor;
53195329 return (offsetSelctor.*sMethod )(0 );
53205330 }
5331+ #ifdef __GNUG__
5332+ #ifndef __clang__
53215333#pragma GCC diagnostic pop
5334+ #endif
5335+ #endif
53225336
53235337 template <typename C>
53245338 static typename std::enable_if<std::has_virtual_destructor<C>::value, unsigned int >::type
@@ -5808,74 +5822,78 @@ namespace fakeit {
58085822}
58095823#include < new>
58105824
5811- namespace fakeit {
5812-
5813- #ifdef __GNUG__
5814- #ifndef __clang__
5815- #pragma GCC diagnostic push
5816- #pragma GCC diagnostic ignored "-Wpedantic"
5817- #endif
5818- #endif
5819-
5820-
5821- #ifdef _MSC_VER
5822- #pragma warning( push )
5823- #pragma warning( disable : 4200 )
5824- #endif
58255825
5826+ namespace fakeit
5827+ {
5828+ namespace details
5829+ {
5830+ template <int instanceAreaSize, typename C, typename ... BaseClasses>
5831+ class FakeObjectImpl
5832+ {
5833+ public:
5834+ void initializeDataMembersArea ()
5835+ {
5836+ for (size_t i = 0 ; i < instanceAreaSize; ++i)
5837+ {
5838+ instanceArea[i] = (char ) 0 ;
5839+ }
5840+ }
58265841
5827- template <typename C, typename ... baseclasses>
5828- class FakeObject {
5842+ protected:
5843+ VirtualTable<C, BaseClasses...> vtable;
5844+ char instanceArea[instanceAreaSize];
5845+ };
58295846
5830- VirtualTable<C, baseclasses...> vtable;
5847+ template <typename C, typename ... BaseClasses>
5848+ class FakeObjectImpl <0 , C, BaseClasses...>
5849+ {
5850+ public:
5851+ void initializeDataMembersArea ()
5852+ {}
58315853
5832- static const size_t SIZE = sizeof (C) - sizeof (VirtualTable<C, baseclasses...>);
5833- char instanceArea[SIZE ? SIZE : 0 ];
5854+ protected:
5855+ VirtualTable<C, BaseClasses...> vtable;
5856+ };
5857+ }
58345858
5835- FakeObject (FakeObject const &) = delete ;
5836- FakeObject &operator =(FakeObject const &) = delete ;
5859+ template <typename C, typename ... BaseClasses>
5860+ class FakeObject
5861+ : public details::FakeObjectImpl<sizeof (C) - sizeof (VirtualTable<C, BaseClasses...>), C, BaseClasses...>
5862+ {
5863+ FakeObject (FakeObject const &) = delete ;
5864+ FakeObject& operator =(FakeObject const &) = delete ;
58375865
58385866 public:
5839-
5840- FakeObject () : vtable() {
5841- initializeDataMembersArea ();
5842- }
5843-
5844- ~FakeObject () {
5845- vtable.dispose ();
5867+ FakeObject ()
5868+ {
5869+ this ->initializeDataMembersArea ();
58465870 }
58475871
5848- void initializeDataMembersArea () {
5849- for (size_t i = 0 ; i < SIZE; ++i) instanceArea[i] = (char ) 0 ;
5872+ ~FakeObject ()
5873+ {
5874+ this ->vtable .dispose ();
58505875 }
58515876
5852- void setMethod (unsigned int index, void *method) {
5853- vtable.setMethod (index, method);
5877+ void setMethod (unsigned int index, void * method)
5878+ {
5879+ this ->vtable .setMethod (index, method);
58545880 }
58555881
5856- VirtualTable<C, baseclasses...> &getVirtualTable () {
5857- return vtable;
5882+ VirtualTable<C, BaseClasses...>& getVirtualTable ()
5883+ {
5884+ return this ->vtable ;
58585885 }
58595886
5860- void setVirtualTable (VirtualTable<C, baseclasses...> &t) {
5861- vtable = t;
5887+ void setVirtualTable (VirtualTable<C, BaseClasses...>& t)
5888+ {
5889+ this ->vtable = t;
58625890 }
58635891
5864- void setDtor (void *dtor) {
5865- vtable.setDtor (dtor);
5892+ void setDtor (void * dtor)
5893+ {
5894+ this ->vtable .setDtor (dtor);
58665895 }
58675896 };
5868-
5869- #ifdef _MSC_VER
5870- #pragma warning( pop )
5871- #endif
5872-
5873- #ifdef __GNUG__
5874- #ifndef __clang__
5875- #pragma GCC diagnostic pop
5876- #endif
5877- #endif
5878-
58795897}
58805898namespace fakeit {
58815899
0 commit comments