Piotr Caban : msvcrt: Add helpers for creating base class RTTI.

Alexandre Julliard julliard at winehq.org
Wed Apr 7 15:48:30 CDT 2021


Module: wine
Branch: master
Commit: 16f6a567f4c259bc9b856558f4deebd2f4aeb88c
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=16f6a567f4c259bc9b856558f4deebd2f4aeb88c

Author: Piotr Caban <piotr at codeweavers.com>
Date:   Wed Apr  7 12:08:12 2021 +0200

msvcrt: Add helpers for creating base class RTTI.

Signed-off-by: Piotr Caban <piotr at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msvcrt/cxx.h | 22 ++++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/dlls/msvcrt/cxx.h b/dlls/msvcrt/cxx.h
index f8fe239b8aa..77778730e25 100644
--- a/dlls/msvcrt/cxx.h
+++ b/dlls/msvcrt/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 = { \
         &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 = { \
     { \
@@ -92,7 +95,7 @@ const rtti_object_locator name ## _rtti = { \
 
 #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 = { \
         &type_info_vtable, \
         NULL, \
@@ -104,7 +107,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