Arkadiusz Hiler : msvcp90: Add helpers for creating base class RTTI.
Alexandre Julliard
julliard at winehq.org
Tue Oct 26 09:40:26 CDT 2021
Module: wine
Branch: stable
Commit: 95154afde7d4544288802bce7f8d2b250c770a74
URL: https://source.winehq.org/git/wine.git/?a=commit;h=95154afde7d4544288802bce7f8d2b250c770a74
Author: Arkadiusz Hiler <ahiler at codeweavers.com>
Date: Tue Apr 6 17:05:10 2021 +0300
msvcp90: Add helpers for creating base class RTTI.
Suggested by Piotr Caban.
Signed-off-by: Arkadiusz Hiler <ahiler at codeweavers.com>
Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
(cherry picked from commit f3f948a5a39ecff5d83f02e11256a0359624d54b)
Signed-off-by: Michael Stefaniuc <mstefani at winehq.org>
---
dlls/msvcp90/cxx.h | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/dlls/msvcp90/cxx.h b/dlls/msvcp90/cxx.h
index 5052f433875..0c5b83f93f6 100644
--- a/dlls/msvcp90/cxx.h
+++ b/dlls/msvcp90/cxx.h
@@ -46,7 +46,7 @@
#ifndef __x86_64__
-#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+#define DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
static type_info name ## _type_info = { \
&MSVCP_type_info_vtable, \
NULL, \
@@ -58,7 +58,10 @@ static const rtti_base_descriptor name ## _rtti_base_descriptor = { \
base_classes_no, \
{ 0, -1, 0}, \
64 \
-}; \
+};
+
+#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+ DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
\
static const rtti_base_array name ## _rtti_base_array = { \
{ \
@@ -122,7 +125,7 @@ static const cxx_exception_type type ## _cxx_type = { \
#else
-#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+#define __DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
static type_info name ## _type_info = { \
&MSVCP_type_info_vtable, \
NULL, \
@@ -134,7 +137,18 @@ static rtti_base_descriptor name ## _rtti_base_descriptor = { \
base_classes_no, \
{ 0, -1, 0}, \
64 \
-}; \
+};
+
+#define DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
+ __DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
+ \
+ static void init_ ## name ## _rtti(char *base) \
+ { \
+ name ## _rtti_base_descriptor.type_descriptor = (char*)&name ## _type_info - base; \
+ }
+
+#define DEFINE_RTTI_DATA(name, off, base_classes_no, cl1, cl2, cl3, cl4, cl5, cl6, cl7, cl8, cl9, mangled_name) \
+ __DEFINE_RTTI_BASE(name, base_classes_no, mangled_name) \
\
static rtti_base_array name ## _rtti_base_array = { \
{ \
More information about the wine-cvs
mailing list