From c52c8595683b2e57948a779885424ace802caae5 Mon Sep 17 00:00:00 2001 From: Piotr Caban Date: Thu, 15 Dec 2011 10:16:48 +0100 Subject: [PATCH] msvcp90: Added collate class stub. --- dlls/msvcp90/locale.c | 224 +++++++++++++++++++++++++++++++++++++- dlls/msvcp90/msvcp90.spec | 56 +++++----- 2 files changed, 249 insertions(+), 31 deletions(-) diff --git a/dlls/msvcp90/locale.c b/dlls/msvcp90/locale.c index 27687ba5ddd..15276a7c9c0 100644 --- a/dlls/msvcp90/locale.c +++ b/dlls/msvcp90/locale.c @@ -34,11 +34,11 @@ void* __cdecl _Gettnames(void); typedef int category; -typedef struct _locale_id { +typedef struct { MSVCP_size_t id; } locale_id; -typedef struct _locale_facet { +typedef struct { const vtable_ptr *vtable; MSVCP_size_t refs; } locale_facet; @@ -81,6 +81,11 @@ typedef struct { unsigned page; } _Cvtvec; +typedef struct { + locale_facet facet; + _Collvec coll; +} collate; + /* ?_Id_cnt@id@locale@std@@0HA */ int locale_id__Id_cnt = 0; @@ -116,7 +121,7 @@ locale_facet* __thiscall MSVCP_locale_facet_vector_dtor(locale_facet *this, unsi return this; } -static const vtable_ptr MSVCP_locale_facet_vtable[] = { +const vtable_ptr MSVCP_locale_facet_vtable[] = { (vtable_ptr)THISCALL_NAME(MSVCP_locale_facet_vector_dtor) }; #ifdef __i386__ @@ -251,6 +256,158 @@ MSVCP_size_t __cdecl locale_facet__Getcat(const locale_facet **facet, const loca return -1; } +/* ?id@?$collate@D@std@@2V0locale@2@A */ +locale_id collate_char_id = {0}; + +/* ??_7?$collate@D@std@@6B@ */ +extern const vtable_ptr MSVCP_collate_char_vtable; + +/* ??0?$collate@D@std@@IAE@PBDI@Z */ +/* ??0?$collate@D@std@@IEAA@PEBD_K@Z */ +DEFINE_THISCALL_WRAPPER(collate_char_ctor_name, 12) +collate* __thiscall collate_char_ctor_name(collate *this, const char *name, MSVCP_size_t refs) +{ + FIXME("(%p %s %lu) stub\n", this, name, refs); + this->facet.vtable = &MSVCP_collate_char_vtable; + return NULL; +} + +/* ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z */ +/* ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z */ +DEFINE_THISCALL_WRAPPER(collate_char_ctor_locinfo, 12) +collate* __thiscall collate_char_ctor_locinfo(collate *this, _Locinfo *locinfo, MSVCP_size_t refs) +{ + FIXME("(%p %p %lu) stub\n", this, locinfo, refs); + this->facet.vtable = &MSVCP_collate_char_vtable; + return NULL; +} + +/* ??0?$collate@D@std@@QAE@I@Z */ +/* ??0?$collate@D@std@@QEAA@_K@Z */ +DEFINE_THISCALL_WRAPPER(collate_char_ctor_refs, 8) +collate* __thiscall collate_char_ctor_refs(collate *this, MSVCP_size_t refs) +{ + FIXME("(%p %lu) stub\n", this, refs); + this->facet.vtable = &MSVCP_collate_char_vtable; + return NULL; +} + +/* ??1?$collate@D@std@@MAE@XZ */ +/* ??1?$collate@D@std@@MEAA@XZ */ +DEFINE_THISCALL_WRAPPER(collate_char_dtor, 4) +void __thiscall collate_char_dtor(collate *this) +{ + FIXME("(%p) stub\n", this); +} + +DEFINE_THISCALL_WRAPPER(MSVCP_collate_char_vector_dtor, 8) +collate* __thiscall MSVCP_collate_char_vector_dtor(collate *this, unsigned int flags) +{ + TRACE("(%p %x)\n", this, flags); + if(flags & 2) { + /* we have an array, with the number of elements stored before the first object */ + int i, *ptr = (int *)this-1; + + for(i=*ptr-1; i>=0; i--) + collate_char_dtor(this+i); + MSVCRT_operator_delete(ptr); + } else { + collate_char_dtor(this); + if(flags & 1) + MSVCRT_operator_delete(this); + } + + return this; +} + +/* ??_F?$collate@D@std@@QAEXXZ */ +/* ??_F?$collate@D@std@@QEAAXXZ */ +DEFINE_THISCALL_WRAPPER(collate_char_ctor, 4) +collate* __thiscall collate_char_ctor(collate *this) +{ + FIXME("(%p) stub\n", this); + this->facet.vtable = &MSVCP_collate_char_vtable; + return NULL; +} + +/* ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z */ +/* ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z */ +MSVCP_size_t __cdecl collate_char__Getcat(const locale_facet **facet, const locale_facet *loc) +{ + FIXME("(%p %p) stub\n", facet, loc); + return 0; +} + +/* ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z */ +/* ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z */ +DEFINE_THISCALL_WRAPPER(collate_char__Init, 8) +void __thiscall collate_char__Init(collate *this, const _Locinfo *locinfo) +{ + FIXME("(%p %p) stub\n", this, locinfo); +} + +/* ?do_compare@?$collate@D@std@@MBEHPBD000@Z */ +/* ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z */ +DEFINE_THISCALL_WRAPPER(collate_char_do_compare, 20) +int __thiscall collate_char_do_compare(const collate *this, const char *first1, + const char *last1, const char *first2, const char *last2) +{ + FIXME("(%p %p %p %p %p) stub\n", this, first1, last1, first2, last2); + return 0; +} + +/* ?compare@?$collate@D@std@@QBEHPBD000@Z */ +/* ?compare@?$collate@D@std@@QEBAHPEBD000@Z */ +DEFINE_THISCALL_WRAPPER(collate_char_compare, 20) +int __thiscall collate_char_compare(const collate *this, const char *first1, + const char *last1, const char *first2, const char *last2) +{ + FIXME("(%p %p %p %p %p) stub\n", this, first1, last1, first2, last2); + return 0; +} + +/* ?do_hash@?$collate@D@std@@MBEJPBD0@Z */ +/* ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z */ +DEFINE_THISCALL_WRAPPER(collate_char_do_hash, 12) +LONG __thiscall collate_char_do_hash(const collate *this, + const char *first, const char *last) +{ + FIXME("(%p %p %p) stub\n", this, first, last); + return 0; +} + +/* ?hash@?$collate@D@std@@QBEJPBD0@Z */ +/* ?hash@?$collate@D@std@@QEBAJPEBD0@Z */ +DEFINE_THISCALL_WRAPPER(collate_char_hash, 12) +LONG __thiscall collate_char_hash(const collate *this, + const char *first, const char *last) +{ + FIXME("(%p %p %p) stub\n", this, first, last); + return 0; +} + +/* ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */ +/* ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */ +DEFINE_THISCALL_WRAPPER_RETPTR(collate_char_do_transform, 12) +basic_string_char __thiscall collate_char_do_transform(const collate *this, + const char *first, const char *last) +{ + basic_string_char ret = {0}; /* FIXME */ + FIXME("(%p %p %p) stub\n", this, first, last); + return ret; +} + +/* ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z */ +/* ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z */ +DEFINE_THISCALL_WRAPPER_RETPTR(collate_char_transform, 12) +basic_string_char __thiscall collate_char_transform(const collate *this, + const char *first, const char *last) +{ + basic_string_char ret = {0}; /* FIXME */ + FIXME("(%p %p %p) stub\n", this, first, last); + return ret; +} + /* ??0_Locimp@locale@std@@AAE@_N@Z */ /* ??0_Locimp@locale@std@@AEAA@_N@Z */ DEFINE_THISCALL_WRAPPER(locale__Locimp_ctor_transparent, 8) @@ -1023,3 +1180,64 @@ _Timevec __thiscall _Locinfo__Gettnames(const _Locinfo *this) _Timevec_ctor_timeptr(&ret, _Gettnames()); return ret; } + +static const type_info locale_facet_type_info = { + MSVCP_locale_facet_vtable, + NULL, + ".?AVfacet@locale@std@@" +}; + +static const rtti_base_descriptor locale_facet_rtti_base_descriptor = { + &locale_facet_type_info, + 0, + { 0, -1, 0}, + 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 +}; + +#ifndef __GNUC__ +void __asm_dummy_vtables(void) { +#endif + __ASM_VTABLE(collate_char, + VTABLE_ADD_FUNC(collate_char_do_compare) + VTABLE_ADD_FUNC(collate_char_do_transform) + VTABLE_ADD_FUNC(collate_char_do_hash)); +#ifndef __GNUC__ +} +#endif diff --git a/dlls/msvcp90/msvcp90.spec b/dlls/msvcp90/msvcp90.spec index 1f7ef62c23a..71bba02b18c 100644 --- a/dlls/msvcp90/msvcp90.spec +++ b/dlls/msvcp90/msvcp90.spec @@ -848,12 +848,12 @@ @ stub -arch=win64 ??0?$codecvt@_WDH@std@@QEAA@AEBV_Locinfo@1@_K@Z @ stub -arch=win32 ??0?$codecvt@_WDH@std@@QAE@I@Z @ stub -arch=win64 ??0?$codecvt@_WDH@std@@QEAA@_K@Z -@ stub -arch=win32 ??0?$collate@D@std@@IAE@PBDI@Z -@ stub -arch=win64 ??0?$collate@D@std@@IEAA@PEBD_K@Z -@ stub -arch=win32 ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z -@ stub -arch=win64 ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z -@ stub -arch=win32 ??0?$collate@D@std@@QAE@I@Z -@ stub -arch=win64 ??0?$collate@D@std@@QEAA@_K@Z +@ thiscall -arch=win32 ??0?$collate@D@std@@IAE@PBDI@Z(ptr str long) collate_char_ctor_name +@ cdecl -arch=win64 ??0?$collate@D@std@@IEAA@PEBD_K@Z(ptr str long) collate_char_ctor_name +@ thiscall -arch=win32 ??0?$collate@D@std@@QAE@ABV_Locinfo@1@I@Z(ptr ptr long) collate_char_ctor_locinfo +@ cdecl -arch=win64 ??0?$collate@D@std@@QEAA@AEBV_Locinfo@1@_K@Z(ptr ptr long) collate_char_ctor_locinfo +@ thiscall -arch=win32 ??0?$collate@D@std@@QAE@I@Z(ptr long) collate_char_ctor_refs +@ cdecl -arch=win64 ??0?$collate@D@std@@QEAA@_K@Z(ptr long) collate_char_ctor_refs @ stub -arch=win32 ??0?$collate@G@std@@IAE@PBDI@Z @ stub -arch=win64 ??0?$collate@G@std@@IEAA@PEBD_K@Z @ stub -arch=win32 ??0?$collate@G@std@@QAE@ABV_Locinfo@1@I@Z @@ -1236,8 +1236,8 @@ @ stub -arch=win64 ??1?$codecvt@GDH@std@@MEAA@XZ @ stub -arch=win32 ??1?$codecvt@_WDH@std@@MAE@XZ @ stub -arch=win64 ??1?$codecvt@_WDH@std@@MEAA@XZ -@ stub -arch=win32 ??1?$collate@D@std@@MAE@XZ -@ stub -arch=win64 ??1?$collate@D@std@@MEAA@XZ +@ thiscall -arch=win32 ??1?$collate@D@std@@MAE@XZ(ptr) collate_char_dtor +@ cdecl -arch=win64 ??1?$collate@D@std@@MEAA@XZ(ptr) collate_char_dtor @ stub -arch=win32 ??1?$collate@G@std@@MAE@XZ @ stub -arch=win64 ??1?$collate@G@std@@MEAA@XZ @ stub -arch=win32 ??1?$collate@_W@std@@MAE@XZ @@ -1821,7 +1821,7 @@ # extern ??_7?$codecvt@DDH@std@@6B@ # extern ??_7?$codecvt@GDH@std@@6B@ # extern ??_7?$codecvt@_WDH@std@@6B@ -# extern ??_7?$collate@D@std@@6B@ +@ extern ??_7?$collate@D@std@@6B@ MSVCP_collate_char_vtable # extern ??_7?$collate@G@std@@6B@ # extern ??_7?$collate@_W@std@@6B@ # extern ??_7?$ctype@D@std@@6B@ @@ -1997,8 +1997,8 @@ @ stub -arch=win64 ??_F?$codecvt@GDH@std@@QEAAXXZ @ stub -arch=win32 ??_F?$codecvt@_WDH@std@@QAEXXZ @ stub -arch=win64 ??_F?$codecvt@_WDH@std@@QEAAXXZ -@ stub -arch=win32 ??_F?$collate@D@std@@QAEXXZ -@ stub -arch=win64 ??_F?$collate@D@std@@QEAAXXZ +@ thiscall -arch=win32 ??_F?$collate@D@std@@QAEXXZ(ptr) collate_char_ctor +@ cdecl -arch=win64 ??_F?$collate@D@std@@QEAAXXZ(ptr) collate_char_ctor @ stub -arch=win32 ??_F?$collate@G@std@@QAEXXZ @ stub -arch=win64 ??_F?$collate@G@std@@QEAAXXZ @ stub -arch=win32 ??_F?$collate@_W@std@@QAEXXZ @@ -2227,8 +2227,8 @@ @ stub -arch=win64 ?_Getcat@?$codecvt@GDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z @ stub -arch=win32 ?_Getcat@?$codecvt@_WDH@std@@SAIPAPBVfacet@locale@2@PBV42@@Z @ stub -arch=win64 ?_Getcat@?$codecvt@_WDH@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z -@ stub -arch=win32 ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z -@ stub -arch=win64 ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z +@ cdecl -arch=win32 ?_Getcat@?$collate@D@std@@SAIPAPBVfacet@locale@2@PBV42@@Z(ptr ptr) collate_char__Getcat +@ cdecl -arch=win64 ?_Getcat@?$collate@D@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z(ptr ptr) collate_char__Getcat @ stub -arch=win32 ?_Getcat@?$collate@G@std@@SAIPAPBVfacet@locale@2@PBV42@@Z @ stub -arch=win64 ?_Getcat@?$collate@G@std@@SA_KPEAPEBVfacet@locale@2@PEBV42@@Z @ stub -arch=win32 ?_Getcat@?$collate@_W@std@@SAIPAPBVfacet@locale@2@PBV42@@Z @@ -2464,8 +2464,8 @@ @ stub -arch=win64 ?_Init@?$codecvt@GDH@std@@IEAAXAEBV_Locinfo@2@@Z @ stub -arch=win32 ?_Init@?$codecvt@_WDH@std@@IAEXABV_Locinfo@2@@Z @ stub -arch=win64 ?_Init@?$codecvt@_WDH@std@@IEAAXAEBV_Locinfo@2@@Z -@ stub -arch=win32 ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z -@ stub -arch=win64 ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z +@ thiscall -arch=win32 ?_Init@?$collate@D@std@@IAEXABV_Locinfo@2@@Z(ptr ptr) collate_char__Init +@ cdecl -arch=win64 ?_Init@?$collate@D@std@@IEAAXAEBV_Locinfo@2@@Z(ptr ptr) collate_char__Init @ stub -arch=win32 ?_Init@?$collate@G@std@@IAEXABV_Locinfo@2@@Z @ stub -arch=win64 ?_Init@?$collate@G@std@@IEAAXAEBV_Locinfo@2@@Z @ stub -arch=win32 ?_Init@?$collate@_W@std@@IAEXABV_Locinfo@2@@Z @@ -3156,8 +3156,8 @@ @ cdecl -arch=win64 ?compare@?$char_traits@G@std@@SAHPEBG0_K@Z(ptr ptr long) MSVCP_char_traits_short_compare @ cdecl -arch=win32 ?compare@?$char_traits@_W@std@@SAHPB_W0I@Z(ptr ptr long) MSVCP_char_traits_wchar_compare @ cdecl -arch=win64 ?compare@?$char_traits@_W@std@@SAHPEB_W0_K@Z(ptr ptr long) MSVCP_char_traits_wchar_compare -@ stub -arch=win32 ?compare@?$collate@D@std@@QBEHPBD000@Z -@ stub -arch=win64 ?compare@?$collate@D@std@@QEBAHPEBD000@Z +@ thiscall -arch=win32 ?compare@?$collate@D@std@@QBEHPBD000@Z(ptr ptr ptr ptr ptr) collate_char_compare +@ cdecl -arch=win64 ?compare@?$collate@D@std@@QEBAHPEBD000@Z(ptr ptr ptr ptr ptr) collate_char_compare @ stub -arch=win32 ?compare@?$collate@G@std@@QBEHPBG000@Z @ stub -arch=win64 ?compare@?$collate@G@std@@QEBAHPEBG000@Z @ stub -arch=win32 ?compare@?$collate@_W@std@@QBEHPB_W000@Z @@ -3296,8 +3296,8 @@ @ stub -arch=win64 ?do_close@?$messages@G@std@@MEBAXH@Z @ stub -arch=win32 ?do_close@?$messages@_W@std@@MBEXH@Z @ stub -arch=win64 ?do_close@?$messages@_W@std@@MEBAXH@Z -@ stub -arch=win32 ?do_compare@?$collate@D@std@@MBEHPBD000@Z -@ stub -arch=win64 ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z +@ thiscall -arch=win32 ?do_compare@?$collate@D@std@@MBEHPBD000@Z(ptr ptr ptr ptr ptr) collate_char_do_compare +@ cdecl -arch=win64 ?do_compare@?$collate@D@std@@MEBAHPEBD000@Z(ptr ptr ptr ptr ptr) collate_char_do_compare @ stub -arch=win32 ?do_compare@?$collate@G@std@@MBEHPBG000@Z @ stub -arch=win64 ?do_compare@?$collate@G@std@@MEBAHPEBG000@Z @ stub -arch=win32 ?do_compare@?$collate@_W@std@@MBEHPB_W000@Z @@ -3466,8 +3466,8 @@ @ stub -arch=win64 ?do_grouping@?$numpunct@G@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ @ stub -arch=win32 ?do_grouping@?$numpunct@_W@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ @ stub -arch=win64 ?do_grouping@?$numpunct@_W@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ -@ stub -arch=win32 ?do_hash@?$collate@D@std@@MBEJPBD0@Z -@ stub -arch=win64 ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z +@ thiscall -arch=win32 ?do_hash@?$collate@D@std@@MBEJPBD0@Z(ptr ptr ptr) collate_char_do_hash +@ cdecl -arch=win64 ?do_hash@?$collate@D@std@@MEBAJPEBD0@Z(ptr ptr ptr) collate_char_do_hash @ stub -arch=win32 ?do_hash@?$collate@G@std@@MBEJPBG0@Z @ stub -arch=win64 ?do_hash@?$collate@G@std@@MEBAJPEBG0@Z @ stub -arch=win32 ?do_hash@?$collate@_W@std@@MBEJPB_W0@Z @@ -3656,8 +3656,8 @@ @ stub -arch=win64 ?do_toupper@?$ctype@_W@std@@MEBAPEB_WPEA_WPEB_W@Z @ stub -arch=win32 ?do_toupper@?$ctype@_W@std@@MBE_W_W@Z @ stub -arch=win64 ?do_toupper@?$ctype@_W@std@@MEBA_W_W@Z -@ stub -arch=win32 ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z -@ stub -arch=win64 ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z +@ thiscall -arch=win32 ?do_transform@?$collate@D@std@@MBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z(ptr ptr ptr ptr) collate_char_do_transform +@ cdecl -arch=win64 ?do_transform@?$collate@D@std@@MEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z(ptr ptr ptr ptr) collate_char_do_transform @ stub -arch=win32 ?do_transform@?$collate@G@std@@MBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z @ stub -arch=win64 ?do_transform@?$collate@G@std@@MEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z @ stub -arch=win32 ?do_transform@?$collate@_W@std@@MBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z @@ -4187,8 +4187,8 @@ @ extern ?has_quiet_NaN@_Num_float_base@std@@2_NB std_Num_float_base_has_quiet_NaN @ extern ?has_signaling_NaN@_Num_base@std@@2_NB std_Num_base_has_signaling_NaN @ extern ?has_signaling_NaN@_Num_float_base@std@@2_NB std_Num_float_base_has_signaling_NaN -@ stub -arch=win32 ?hash@?$collate@D@std@@QBEJPBD0@Z -@ stub -arch=win64 ?hash@?$collate@D@std@@QEBAJPEBD0@Z +@ thiscall -arch=win32 ?hash@?$collate@D@std@@QBEJPBD0@Z(ptr ptr ptr) collate_char_hash +@ cdecl -arch=win64 ?hash@?$collate@D@std@@QEBAJPEBD0@Z(ptr ptr ptr) collate_char_hash @ stub -arch=win32 ?hash@?$collate@G@std@@QBEJPBG0@Z @ stub -arch=win64 ?hash@?$collate@G@std@@QEBAJPEBG0@Z @ stub -arch=win32 ?hash@?$collate@_W@std@@QBEJPB_W0@Z @@ -4196,7 +4196,7 @@ # extern ?id@?$codecvt@DDH@std@@2V0locale@2@A # extern ?id@?$codecvt@GDH@std@@2V0locale@2@A # extern ?id@?$codecvt@_WDH@std@@2V0locale@2@A -# extern ?id@?$collate@D@std@@2V0locale@2@A +@ extern ?id@?$collate@D@std@@2V0locale@2@A collate_char_id # extern ?id@?$collate@G@std@@2V0locale@2@A # extern ?id@?$collate@_W@std@@2V0locale@2@A # extern ?id@?$ctype@D@std@@2V0locale@2@A @@ -5614,8 +5614,8 @@ @ stub -arch=win64 ?toupper@?$ctype@_W@std@@QEBAPEB_WPEA_WPEB_W@Z @ stub -arch=win32 ?toupper@?$ctype@_W@std@@QBE_W_W@Z @ stub -arch=win64 ?toupper@?$ctype@_W@std@@QEBA_W_W@Z -@ stub -arch=win32 ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z -@ stub -arch=win64 ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z +@ thiscall -arch=win32 ?transform@?$collate@D@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PBD0@Z(ptr ptr ptr ptr) collate_char_transform +@ cdecl -arch=win64 ?transform@?$collate@D@std@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@PEBD0@Z(ptr ptr ptr ptr) collate_char_transform @ stub -arch=win32 ?transform@?$collate@G@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PBG0@Z @ stub -arch=win64 ?transform@?$collate@G@std@@QEBA?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@PEBG0@Z @ stub -arch=win32 ?transform@?$collate@_W@std@@QBE?AV?$basic_string@_WU?$char_traits@_W@std@@V?$allocator@_W@2@@2@PB_W0@Z