On Fri, Apr 02, 2021 at 10:39:59PM +0200, Piotr Caban wrote:
Hi Arek,
I'm attaching alternative solution for type_info_vtable definition. I think it makes sense to make the cxx.h file independent from other files. What do you think about it?
Thanks, Piotr
From ac91f5f1dd440cfdb43c9ae346e7bfd7b78629d9 Mon Sep 17 00:00:00 2001 From: Piotr Caban piotr@codeweavers.com Date: Fri, 2 Apr 2021 22:31:19 +0200 Subject: [PATCH] msvcp90: Define type_info vtable in cxx.h header if requested. To: wine-devel wine-devel@winehq.org
dlls/msvcp90/cxx.h | 33 +++++++++++++++++++++++++++++++++ dlls/msvcp90/exception.c | 31 +------------------------------ 2 files changed, 34 insertions(+), 30 deletions(-)
diff --git a/dlls/msvcp90/cxx.h b/dlls/msvcp90/cxx.h index 7af11de7fe6..43b8df61012 100644 --- a/dlls/msvcp90/cxx.h +++ b/dlls/msvcp90/cxx.h @@ -452,3 +452,36 @@ typedef struct } cxx_exception_type;
#endif
+#ifdef DEFINE_TYPE_INFO +static void MSVCP_type_info_dtor(type_info * _this) +{
- free(_this->name);
+}
+DEFINE_THISCALL_WRAPPER(MSVCP_type_info_vector_dtor,8) +void * __thiscall MSVCP_type_info_vector_dtor(type_info * _this, unsigned int flags) +{
- if (flags & 2)
- {
/* we have an array, with the number of elements stored before the first object */
INT_PTR i, *ptr = (INT_PTR *)_this - 1;
for (i = *ptr - 1; i >= 0; i--) MSVCP_type_info_dtor(_this + i);
free(ptr);
- }
- else
- {
MSVCP_type_info_dtor(_this);
if (flags & 1) free(_this);
- }
- return _this;
+}
+DEFINE_RTTI_DATA0( type_info, 0, ".?AVtype_info@@" )
+__ASM_BLOCK_BEGIN(type_info_vtables)
- __ASM_VTABLE(type_info,
VTABLE_ADD_FUNC(MSVCP_type_info_vector_dtor));
+__ASM_BLOCK_END +#endif
I was considering something similar at first, but I didn't like the idea of having RTTI/dtor definitions behind an ifdef in a header file.
I don't have a strong preference though so if this is fine with you then it's also fine with me.