Alexandre Julliard : msvcrt: Use macros to define RTTI data.

Alexandre Julliard julliard at winehq.org
Thu Apr 5 12:31:44 CDT 2012


Module: wine
Branch: master
Commit: 6bb9f2009090db86a5e52dd8a45ddbc960105965
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6bb9f2009090db86a5e52dd8a45ddbc960105965

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Apr  4 20:17:44 2012 +0200

msvcrt: Use macros to define RTTI data.

---

 dlls/msvcrt/cpp.c |  246 +++++++++--------------------------------------------
 1 files changed, 42 insertions(+), 204 deletions(-)

diff --git a/dlls/msvcrt/cpp.c b/dlls/msvcrt/cpp.c
index dc609c1..6f5f0a5 100644
--- a/dlls/msvcrt/cpp.c
+++ b/dlls/msvcrt/cpp.c
@@ -709,46 +709,48 @@ __ASM_EXCEPTION_VTABLE(__non_rtti_object)
 
 /* Static RTTI for exported objects */
 
-static const type_info exception_type_info =
-{
-  &MSVCRT_type_info_vtable,
-  NULL,
-  ".?AVexception@@"
-};
-
-static const rtti_base_descriptor exception_rtti_base_descriptor =
-{
-  &exception_type_info,
-  0,
-  { 0, -1, 0 },
-  0
-};
-
-static const rtti_base_array exception_rtti_base_array =
-{
-  {
-    &exception_rtti_base_descriptor,
-    NULL,
-    NULL
-  }
-};
-
-static const rtti_object_hierarchy exception_type_hierarchy =
-{
-  0,
-  0,
-  1,
-  &exception_rtti_base_array
-};
+#define DEFINE_RTTI_DATA(name, base_classes, cl1, cl2, mangled_name) \
+static const type_info name ## _type_info = { \
+    &MSVCRT_type_info_vtable, \
+    NULL, \
+    mangled_name \
+}; \
+\
+static const rtti_base_descriptor name ## _rtti_base_descriptor = { \
+    &name ##_type_info, \
+    base_classes, \
+    { 0, -1, 0}, \
+    0 \
+}; \
+\
+static const rtti_base_array name ## _rtti_base_array = { \
+    { \
+        &name ## _rtti_base_descriptor, \
+        cl1, \
+        cl2  \
+    } \
+}; \
+\
+static const rtti_object_hierarchy name ## _hierarchy = { \
+    0, \
+    0, \
+    base_classes+1, \
+    &name ## _rtti_base_array \
+}; \
+\
+const rtti_object_locator name ## _rtti = { \
+    0, \
+    0, \
+    0, \
+    &name ## _type_info, \
+    &name ## _hierarchy \
+}
 
-const rtti_object_locator exception_rtti =
-{
-  0,
-  0,
-  0,
-  &exception_type_info,
-  &exception_type_hierarchy
-};
+DEFINE_RTTI_DATA( type_info, 0, NULL, NULL, ".?AVtype_info@@" );
+DEFINE_RTTI_DATA( exception, 0, NULL, NULL, ".?AVexception@@" );
+DEFINE_RTTI_DATA( bad_typeid, 1, &exception_rtti_base_descriptor, NULL, ".?AVbad_typeid@@" );
+DEFINE_RTTI_DATA( bad_cast, 1, &exception_rtti_base_descriptor, NULL, ".?AVbad_cast@@" );
+DEFINE_RTTI_DATA( __non_rtti_object, 2, &bad_typeid_rtti_base_descriptor, &exception_rtti_base_descriptor, ".?AV__non_rtti_object@@" );
 
 static const cxx_type_info exception_cxx_type_info =
 {
@@ -759,47 +761,6 @@ static const cxx_type_info exception_cxx_type_info =
   (cxx_copy_ctor)THISCALL(MSVCRT_exception_copy_ctor)
 };
 
-static const type_info bad_typeid_type_info =
-{
-  &MSVCRT_type_info_vtable,
-  NULL,
-  ".?AVbad_typeid@@"
-};
-
-static const rtti_base_descriptor bad_typeid_rtti_base_descriptor =
-{
-  &bad_typeid_type_info,
-  1,
-  { 0, -1, 0 },
-  0
-};
-
-static const rtti_base_array bad_typeid_rtti_base_array =
-{
-  {
-    &bad_typeid_rtti_base_descriptor,
-    &exception_rtti_base_descriptor,
-    NULL
-  }
-};
-
-static const rtti_object_hierarchy bad_typeid_type_hierarchy =
-{
-  0,
-  0,
-  2,
-  &bad_typeid_rtti_base_array
-};
-
-const rtti_object_locator bad_typeid_rtti =
-{
-  0,
-  0,
-  0,
-  &bad_typeid_type_info,
-  &bad_typeid_type_hierarchy
-};
-
 static const cxx_type_info bad_typeid_cxx_type_info =
 {
   0,
@@ -809,47 +770,6 @@ static const cxx_type_info bad_typeid_cxx_type_info =
   (cxx_copy_ctor)THISCALL(MSVCRT_bad_typeid_copy_ctor)
 };
 
-static const type_info bad_cast_type_info =
-{
-  &MSVCRT_type_info_vtable,
-  NULL,
-  ".?AVbad_cast@@"
-};
-
-static const rtti_base_descriptor bad_cast_rtti_base_descriptor =
-{
-  &bad_cast_type_info,
-  1,
-  { 0, -1, 0 },
-  0
-};
-
-static const rtti_base_array bad_cast_rtti_base_array =
-{
-  {
-    &bad_cast_rtti_base_descriptor,
-    &exception_rtti_base_descriptor,
-    NULL
-  }
-};
-
-static const rtti_object_hierarchy bad_cast_type_hierarchy =
-{
-  0,
-  0,
-  2,
-  &bad_cast_rtti_base_array
-};
-
-const rtti_object_locator bad_cast_rtti =
-{
-  0,
-  0,
-  0,
-  &bad_cast_type_info,
-  &bad_cast_type_hierarchy
-};
-
 static const cxx_type_info bad_cast_cxx_type_info =
 {
   0,
@@ -859,47 +779,6 @@ static const cxx_type_info bad_cast_cxx_type_info =
   (cxx_copy_ctor)THISCALL(MSVCRT_bad_cast_copy_ctor)
 };
 
-static const type_info __non_rtti_object_type_info =
-{
-  &MSVCRT_type_info_vtable,
-  NULL,
-  ".?AV__non_rtti_object@@"
-};
-
-static const rtti_base_descriptor __non_rtti_object_rtti_base_descriptor =
-{
-  &__non_rtti_object_type_info,
-  2,
-  { 0, -1, 0 },
-  0
-};
-
-static const rtti_base_array __non_rtti_object_rtti_base_array =
-{
-  {
-    &__non_rtti_object_rtti_base_descriptor,
-    &bad_typeid_rtti_base_descriptor,
-    &exception_rtti_base_descriptor
-  }
-};
-
-static const rtti_object_hierarchy __non_rtti_object_type_hierarchy =
-{
-  0,
-  0,
-  3,
-  &__non_rtti_object_rtti_base_array
-};
-
-const rtti_object_locator __non_rtti_object_rtti =
-{
-  0,
-  0,
-  0,
-  &__non_rtti_object_type_info,
-  &__non_rtti_object_type_hierarchy
-};
-
 static const cxx_type_info __non_rtti_object_cxx_type_info =
 {
   0,
@@ -909,47 +788,6 @@ static const cxx_type_info __non_rtti_object_cxx_type_info =
   (cxx_copy_ctor)THISCALL(MSVCRT___non_rtti_object_copy_ctor)
 };
 
-static const type_info type_info_type_info =
-{
-  &MSVCRT_type_info_vtable,
-  NULL,
-  ".?AVtype_info@@"
-};
-
-static const rtti_base_descriptor type_info_rtti_base_descriptor =
-{
-  &type_info_type_info,
-  0,
-  { 0, -1, 0 },
-  0
-};
-
-static const rtti_base_array type_info_rtti_base_array =
-{
-  {
-    &type_info_rtti_base_descriptor,
-    NULL,
-    NULL
-  }
-};
-
-static const rtti_object_hierarchy type_info_type_hierarchy =
-{
-  0,
-  0,
-  1,
-  &type_info_rtti_base_array
-};
-
-const rtti_object_locator type_info_rtti =
-{
-  0,
-  0,
-  0,
-  &type_info_type_info,
-  &type_info_type_hierarchy
-};
-
 /*
  * Exception RTTI for cpp objects
  */




More information about the wine-cvs mailing list