From 9c65376dcf6aa7ff5996f3c9a7f67b51f08ed41d Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Mon, 19 Dec 2011 15:55:16 +0100 Subject: [PATCH] msvcp90: Use macro to define RTTI data. --- dlls/msvcp90/exception.c | 216 +------------------------------ dlls/msvcp90/ios.c | 153 ++-------------------- dlls/msvcp90/locale.c | 265 ++------------------------------------- dlls/msvcp90/msvcp90.h | 38 ++++++ 4 files changed, 59 insertions(+), 613 deletions(-) diff --git a/dlls/msvcp90/exception.c b/dlls/msvcp90/exception.c index f2ff017aa69..5eeca1d738c 100644 --- a/dlls/msvcp90/exception.c +++ b/dlls/msvcp90/exception.c @@ -209,41 +209,7 @@ const char* __thiscall MSVCP_what_exception(exception * this) return this->name ? this->name : "Unknown exception"; } -static const type_info bad_alloc_type_info = { - &MSVCP_bad_alloc_vtable, - NULL, - ".?AVbad_alloc@std@@" -}; - -static const rtti_base_descriptor bad_alloc_rtti_base_descriptor = { - &bad_alloc_type_info, - 1, - { 0, -1, 0 }, - 64 -}; - -static const rtti_base_array bad_alloc_rtti_base_array = { - { - &bad_alloc_rtti_base_descriptor, - &exception_rtti_base_descriptor, - NULL - } -}; - -static const rtti_object_hierarchy bad_alloc_type_hierarchy = { - 0, - 0, - 2, - &bad_alloc_rtti_base_array -}; - -const rtti_object_locator bad_alloc_rtti = { - 0, - 0, - 0, - &bad_alloc_type_info, - &bad_alloc_type_hierarchy -}; +DEFINE_RTTI_DATA(bad_alloc, 0, 1, &exception_rtti_base_descriptor, NULL, NULL, ".?AVbad_alloc@std@@"); static const cxx_type_info bad_alloc_cxx_type_info = { 0, @@ -334,41 +300,7 @@ const char* __thiscall MSVCP_logic_error_what(logic_error *this) return MSVCP_basic_string_char_c_str(&this->str); } -static const type_info logic_error_type_info = { - &MSVCP_logic_error_vtable, - NULL, - ".?AVlogic_error@std@@" -}; - -static const rtti_base_descriptor logic_error_rtti_base_descriptor = { - &logic_error_type_info, - 1, - { 0, -1, 0 }, - 64 -}; - -static const rtti_base_array logic_error_rtti_base_array = { - { - &logic_error_rtti_base_descriptor, - &exception_rtti_base_descriptor, - NULL - } -}; - -static const rtti_object_hierarchy logic_error_type_hierarchy = { - 0, - 0, - 2, - &logic_error_rtti_base_array -}; - -const rtti_object_locator logic_error_rtti = { - 0, - 0, - 0, - &logic_error_type_info, - &logic_error_type_hierarchy -}; +DEFINE_RTTI_DATA(logic_error, 0, 1, &exception_rtti_base_descriptor, NULL, NULL, ".?AVlogic_error@std@@"); static const cxx_type_info logic_error_cxx_type_info = { 0, @@ -425,41 +357,7 @@ void* __thiscall MSVCP_length_error_vector_dtor( return MSVCP_logic_error_vector_dtor(this, flags); } -static const type_info length_error_type_info = { - &MSVCP_length_error_vtable, - NULL, - ".?AVlength_error@std@@" -}; - -static const rtti_base_descriptor length_error_rtti_base_descriptor = { - &length_error_type_info, - 2, - { 0, -1, 0 }, - 64 -}; - -static const rtti_base_array length_error_rtti_base_array = { - { - &length_error_rtti_base_descriptor, - &logic_error_rtti_base_descriptor, - &exception_rtti_base_descriptor - } -}; - -static const rtti_object_hierarchy length_error_type_hierarchy = { - 0, - 0, - 3, - &length_error_rtti_base_array -}; - -const rtti_object_locator length_error_rtti = { - 0, - 0, - 0, - &length_error_type_info, - &length_error_type_hierarchy -}; +DEFINE_RTTI_DATA(length_error, 0, 2, &logic_error_rtti_base_descriptor, &exception_rtti_base_descriptor, NULL, ".?AVlength_error@std@@"); static const cxx_type_info length_error_cxx_type_info = { 0, @@ -516,41 +414,7 @@ void* __thiscall MSVCP_out_of_range_vector_dtor( return MSVCP_logic_error_vector_dtor(this, flags); } -static const type_info out_of_range_type_info = { - &MSVCP_out_of_range_vtable, - NULL, - ".?AVout_of_range@std@@" -}; - -static const rtti_base_descriptor out_of_range_rtti_base_descriptor = { - &out_of_range_type_info, - 2, - { 0, -1, 0 }, - 64 -}; - -static const rtti_base_array out_of_range_rtti_base_array = { - { - &out_of_range_rtti_base_descriptor, - &logic_error_rtti_base_descriptor, - &exception_rtti_base_descriptor - } -}; - -static const rtti_object_hierarchy out_of_range_type_hierarchy = { - 0, - 0, - 3, - &out_of_range_rtti_base_array -}; - -const rtti_object_locator out_of_range_rtti = { - 0, - 0, - 0, - &out_of_range_type_info, - &out_of_range_type_hierarchy -}; +DEFINE_RTTI_DATA(out_of_range, 0, 2, &logic_error_rtti_base_descriptor, &exception_rtti_base_descriptor, NULL, ".?AVout_of_range@std@@"); static const cxx_type_info out_of_range_cxx_type_info = { 0, @@ -607,41 +471,7 @@ void* __thiscall MSVCP_invalid_argument_vector_dtor( return MSVCP_logic_error_vector_dtor(this, flags); } -static const type_info invalid_argument_type_info = { - &MSVCP_invalid_argument_vtable, - NULL, - ".?AVinvalid_argument@std@@" -}; - -static const rtti_base_descriptor invalid_argument_rtti_base_descriptor = { - &invalid_argument_type_info, - 2, - { 0, -1, 0 }, - 64 -}; - -static const rtti_base_array invalid_argument_rtti_base_array = { - { - &invalid_argument_rtti_base_descriptor, - &logic_error_rtti_base_descriptor, - &exception_rtti_base_descriptor - } -}; - -static const rtti_object_hierarchy invalid_argument_type_hierarchy = { - 0, - 0, - 3, - &invalid_argument_rtti_base_array -}; - -const rtti_object_locator invalid_argument_rtti = { - 0, - 0, - 0, - &invalid_argument_type_info, - &invalid_argument_type_hierarchy -}; +DEFINE_RTTI_DATA(invalid_argument, 0, 2, &logic_error_rtti_base_descriptor, &exception_rtti_base_descriptor, NULL, ".?AVinvalid_argument@std@@"); static const cxx_type_info invalid_argument_cxx_type_info = { 0, @@ -725,41 +555,7 @@ void* __thiscall MSVCP_runtime_error_vector_dtor( return this; } -static const type_info runtime_error_type_info = { - &MSVCP_runtime_error_vtable, - NULL, - ".?AVruntime_error@std@@" -}; - -static const rtti_base_descriptor runtime_error_rtti_base_descriptor = { - &runtime_error_type_info, - 1, - { 0, -1, 0 }, - 64 -}; - -static const rtti_base_array runtime_error_rtti_base_array = { - { - &runtime_error_rtti_base_descriptor, - &exception_rtti_base_descriptor, - NULL - } -}; - -static const rtti_object_hierarchy runtime_error_type_hierarchy = { - 0, - 0, - 2, - &runtime_error_rtti_base_array -}; - -const rtti_object_locator runtime_error_rtti = { - 0, - 0, - 0, - &runtime_error_type_info, - &runtime_error_type_hierarchy -}; +DEFINE_RTTI_DATA(runtime_error, 0, 1, &exception_rtti_base_descriptor, NULL, NULL, ".?AVruntime_error@std@@"); static const cxx_type_info runtime_error_cxx_type_info = { 0, diff --git a/dlls/msvcp90/ios.c b/dlls/msvcp90/ios.c index 139caa2b269..90cac3148cc 100644 --- a/dlls/msvcp90/ios.c +++ b/dlls/msvcp90/ios.c @@ -154,25 +154,12 @@ extern const vtable_ptr MSVCP_basic_streambuf_char_vtable; /* ??_7?$basic_ostream@DU?$char_traits@D@std@@@std@@6B@ */ extern const vtable_ptr MSVCP_basic_ostream_char_vtable; -static const type_info ios_base_type_info = { - &MSVCP_ios_base_vtable, - NULL, - ".?AVios_base@std@@" -}; - -static const rtti_base_descriptor ios_base_rtti_base_descriptor = { - &ios_base_type_info, - 1, - { 0, -1, 0 }, - 64 -}; - static const type_info iosb_type_info = { &MSVCP_ios_base_vtable, NULL, ".?AV?$_Iosb@H@std@@" }; - + static const rtti_base_descriptor iosb_rtti_base_descriptor = { &iosb_type_info, 0, @@ -180,137 +167,13 @@ static const rtti_base_descriptor iosb_rtti_base_descriptor = { 64 }; -static const rtti_base_array ios_base_rtti_base_array = { - { - &ios_base_rtti_base_descriptor, - &iosb_rtti_base_descriptor, - NULL - } -}; - -static const rtti_object_hierarchy ios_base_type_hierarchy = { - 0, - 0, - 2, - &ios_base_rtti_base_array -}; - -const rtti_object_locator ios_base_rtti = { - 0, - 0, - 0, - &ios_base_type_info, - &ios_base_type_hierarchy -}; - -static const type_info basic_ios_char_type_info = { - &MSVCP_basic_ios_char_vtable, - NULL, - ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@" -}; - -static const rtti_base_descriptor basic_ios_char_rtti_base_descriptor = { - &basic_ios_char_type_info, - 2, - { 0, -1, 0 }, - 64 -}; - -static const rtti_base_array basic_ios_char_rtti_base_array = { - { - &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, - &iosb_rtti_base_descriptor - } -}; - -static const rtti_object_hierarchy basic_ios_char_hierarchy = { - 0, - 0, - 3, - &basic_ios_char_rtti_base_array -}; - -const rtti_object_locator basic_ios_char_rtti = { - 0, - 0, - 0, - &basic_ios_char_type_info, - &basic_ios_char_hierarchy -}; - -static const type_info basic_streambuf_char_type_info = { - &MSVCP_basic_streambuf_char_vtable, - NULL, - ".?AV?$basic_streambuf@DU?$char_traits@D@std@@@std@@" -}; - -static const rtti_base_descriptor basic_streambuf_char_rtti_base_descriptor = { - &basic_streambuf_char_type_info, - 0, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array basic_streambuf_char_rtti_base_array = { - { - &basic_streambuf_char_rtti_base_descriptor, - NULL, - NULL - } -}; - -static const rtti_object_hierarchy basic_streambuf_char_hierarchy = { - 0, - 0, - 1, - &basic_streambuf_char_rtti_base_array -}; - -const rtti_object_locator basic_streambuf_char_rtti = { - 0, - 0, - 0, - &basic_streambuf_char_type_info, - &basic_streambuf_char_hierarchy -}; - -static const type_info basic_ostream_char_type_info = { - &MSVCP_basic_ostream_char_vtable, - NULL, - ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@" -}; - -static const rtti_base_descriptor basic_ostream_char_rtti_base_descriptor = { - &basic_ostream_char_type_info, - 3, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array basic_ostream_char_rtti_base_array = { - { - &basic_ostream_char_rtti_base_descriptor, - &basic_ios_char_rtti_base_descriptor, - &ios_base_rtti_base_descriptor, - &iosb_rtti_base_descriptor - } -}; - -static const rtti_object_hierarchy basic_ostream_char_hierarchy = { - 0, - 0, - 4, - &basic_ostream_char_rtti_base_array -}; - -const rtti_object_locator basic_ostream_char_rtti = { - 0, - 4, - 0, - &basic_ostream_char_type_info, - &basic_ostream_char_hierarchy -}; +DEFINE_RTTI_DATA(ios_base, 0, 1, &iosb_rtti_base_descriptor, NULL, NULL, ".?AV?$_Iosb@H@std@@"); +DEFINE_RTTI_DATA(basic_ios_char, 0, 2, &ios_base_rtti_base_descriptor, &iosb_rtti_base_descriptor, + NULL, ".?AV?$basic_ios@DU?$char_traits@D@std@@@std@@"); +DEFINE_RTTI_DATA(basic_streambuf_char, 0, 0, NULL, NULL, NULL, + ".?AV?$basic_streambuf@DU?$char_traits@D@std@@@std@@"); +DEFINE_RTTI_DATA(basic_ostream_char, 4, 3, &basic_ios_char_rtti_base_descriptor, &ios_base_rtti_base_descriptor, + &iosb_rtti_base_descriptor, ".?AV?$basic_ostream@DU?$char_traits@D@std@@@std@@"); #ifndef __GNUC__ void __asm_dummy_vtables(void) { diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index 438c7c7ddd9..16eda9833f3 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -2356,264 +2356,13 @@ static const rtti_base_descriptor locale_facet_rtti_base_descriptor = { 64 }; -static const type_info collate_char_type_info = { - &MSVCP_collate_char_vtable, - NULL, - ".?AV?$collate@D@std@@" -}; - -static const rtti_base_descriptor collate_char_rtti_base_descriptor = { - &collate_char_type_info, - 1, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array collate_char_rtti_base_array = { - { - &collate_char_rtti_base_descriptor, - &locale_facet_rtti_base_descriptor, - NULL, - NULL - } -}; - -static const rtti_object_hierarchy collate_char_hierarchy = { - 0, - 0, - 2, - &collate_char_rtti_base_array -}; - -const rtti_object_locator collate_char_rtti = { - 0, - 0, - 0, - &collate_char_type_info, - &collate_char_hierarchy -}; - -static const type_info collate_wchar_type_info = { - &MSVCP_collate_wchar_vtable, - NULL, - ".?AV?$collate@_W@std@@" -}; - -static const rtti_base_descriptor collate_wchar_rtti_base_descriptor = { - &collate_wchar_type_info, - 1, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array collate_wchar_rtti_base_array = { - { - &collate_wchar_rtti_base_descriptor, - &locale_facet_rtti_base_descriptor, - NULL, - NULL - } -}; - -static const rtti_object_hierarchy collate_wchar_hierarchy = { - 0, - 0, - 2, - &collate_wchar_rtti_base_array -}; - -const rtti_object_locator collate_wchar_rtti = { - 0, - 0, - 0, - &collate_wchar_type_info, - &collate_wchar_hierarchy -}; - -static const type_info collate_short_type_info = { - &MSVCP_collate_short_vtable, - NULL, - ".?AV?$collate@G@std@@" -}; - -static const rtti_base_descriptor collate_short_rtti_base_descriptor = { - &collate_short_type_info, - 1, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array collate_short_rtti_base_array = { - { - &collate_short_rtti_base_descriptor, - &locale_facet_rtti_base_descriptor, - NULL, - NULL - } -}; - -static const rtti_object_hierarchy collate_short_hierarchy = { - 0, - 0, - 2, - &collate_short_rtti_base_array -}; - -const rtti_object_locator collate_short_rtti = { - 0, - 0, - 0, - &collate_short_type_info, - &collate_short_hierarchy -}; - -static const type_info ctype_base_type_info = { - &MSVCP_ctype_base_vtable, - NULL, - ".?AUctype_base@std@@" -}; - -static const rtti_base_descriptor ctype_base_rtti_base_descriptor = { - &ctype_base_type_info, - 1, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array ctype_base_rtti_base_array = { - { - &ctype_base_rtti_base_descriptor, - &locale_facet_rtti_base_descriptor, - NULL, - NULL - } -}; - -static const rtti_object_hierarchy ctype_base_hierarchy = { - 0, - 0, - 2, - &ctype_base_rtti_base_array -}; - -const rtti_object_locator ctype_base_rtti = { - 0, - 0, - 0, - &ctype_base_type_info, - &ctype_base_hierarchy -}; - -static const type_info ctype_char_type_info = { - &MSVCP_ctype_char_vtable, - NULL, - ".?AV?$ctype@D@std@@" -}; - -static const rtti_base_descriptor ctype_char_rtti_base_descriptor = { - &ctype_char_type_info, - 2, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array ctype_char_rtti_base_array = { - { - &ctype_char_rtti_base_descriptor, - &ctype_base_rtti_base_descriptor, - &locale_facet_rtti_base_descriptor, - NULL - } -}; - -static const rtti_object_hierarchy ctype_char_hierarchy = { - 0, - 0, - 3, - &ctype_char_rtti_base_array -}; - -const rtti_object_locator ctype_char_rtti = { - 0, - 0, - 0, - &ctype_char_type_info, - &ctype_char_hierarchy -}; - -static const type_info ctype_wchar_type_info = { - &MSVCP_ctype_wchar_vtable, - NULL, - ".?AV?$ctype@_W@std@@" -}; - -static const rtti_base_descriptor ctype_wchar_rtti_base_descriptor = { - &ctype_wchar_type_info, - 2, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array ctype_wchar_rtti_base_array = { - { - &ctype_wchar_rtti_base_descriptor, - &ctype_base_rtti_base_descriptor, - &locale_facet_rtti_base_descriptor, - NULL - } -}; - -static const rtti_object_hierarchy ctype_wchar_hierarchy = { - 0, - 0, - 3, - &ctype_wchar_rtti_base_array -}; - -const rtti_object_locator ctype_wchar_rtti = { - 0, - 0, - 0, - &ctype_wchar_type_info, - &ctype_wchar_hierarchy -}; - -static const type_info ctype_short_type_info = { - &MSVCP_ctype_short_vtable, - NULL, - ".?AV?$ctype@G@std@@" -}; - -static const rtti_base_descriptor ctype_short_rtti_base_descriptor = { - &ctype_short_type_info, - 2, - { 0, -1, 0}, - 64 -}; - -static const rtti_base_array ctype_short_rtti_base_array = { - { - &ctype_short_rtti_base_descriptor, - &ctype_base_rtti_base_descriptor, - &locale_facet_rtti_base_descriptor, - NULL - } -}; - -static const rtti_object_hierarchy ctype_short_hierarchy = { - 0, - 0, - 3, - &ctype_short_rtti_base_array -}; - -const rtti_object_locator ctype_short_rtti = { - 0, - 0, - 0, - &ctype_short_type_info, - &ctype_short_hierarchy -}; +DEFINE_RTTI_DATA(collate_char, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@D@std@@"); +DEFINE_RTTI_DATA(collate_wchar, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@_W@std@@"); +DEFINE_RTTI_DATA(collate_short, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AV?$collate@G@std@@"); +DEFINE_RTTI_DATA(ctype_base, 0, 1, &locale_facet_rtti_base_descriptor, NULL, NULL, ".?AUctype_base@std@@"); +DEFINE_RTTI_DATA(ctype_char, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@D@std@@"); +DEFINE_RTTI_DATA(ctype_wchar, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@_W@std@@"); +DEFINE_RTTI_DATA(ctype_short, 0, 2, &ctype_base_rtti_base_descriptor, &locale_facet_rtti_base_descriptor, NULL, ".?AV?$ctype@G@std@@"); #ifndef __GNUC__ void __asm_dummy_vtables(void) { diff --git a/dlls/msvcp90/msvcp90.h b/dlls/msvcp90/msvcp90.h index 5d61779a0bb..e906c6cf562 100644 --- a/dlls/msvcp90/msvcp90.h +++ b/dlls/msvcp90/msvcp90.h @@ -92,6 +92,44 @@ extern void* (__cdecl *MSVCRT_set_new_handler)(void*); #endif /* _WIN64 */ +#define DEFINE_RTTI_DATA(name, off, base_classes, cl1, cl2, cl3, mangled_name) \ +static const type_info name ## _type_info = { \ + &MSVCP_ ## name ## _vtable, \ + NULL, \ + mangled_name \ +}; \ +\ +static const rtti_base_descriptor name ## _rtti_base_descriptor = { \ + &name ##_type_info, \ + base_classes, \ + { 0, -1, 0}, \ + 64 \ +}; \ +\ +static const rtti_base_array name ## _rtti_base_array = { \ + { \ + &name ## _rtti_base_descriptor, \ + cl1, \ + cl2, \ + cl3 \ + } \ +}; \ +\ +static const rtti_object_hierarchy name ## _hierarchy = { \ + 0, \ + 0, \ + base_classes+1, \ + &name ## _rtti_base_array \ +}; \ +\ +const rtti_object_locator name ## _rtti = { \ + 0, \ + off, \ + 0, \ + &name ## _type_info, \ + &name ## _hierarchy \ +} + /* exception object */ typedef void (*vtable_ptr)(void); typedef struct __exception