ReactOS 0.4.15-dev-6054-gbddd8b0
cpp.c File Reference
#include "wine/test.h"
#include "winbase.h"
#include "winnt.h"
Include dependency graph for cpp.c:

Go to the source code of this file.

Classes

struct  __exception
 
struct  __type_info
 
struct  _demangle
 

Macros

#define __thiscall   __cdecl
 
#define init_thiscall_thunk()   do { } while(0)
 
#define call_func1(func, _this)   func(_this)
 
#define call_func2(func, _this, a)   func(_this,a)
 
#define SETNOFAIL(x, y)   x = (void*)GetProcAddress(hMsvcrt,y)
 
#define SET(x, y)   do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0)
 
#define DEFINE_RTTI_REF(type, name)   type *name
 
#define RTTI_REF(instance, name)   &instance.name
 
#define RTTI_REF_SIG0(instance, name, base)   RTTI_REF(instance, name)
 

Typedefs

typedef void(* vtable_ptr) (void)
 
typedef struct __exception exception
 
typedef struct __type_info type_info
 

Functions

static void *__cdeclpoperator_new (unsigned int)
 
static void (__cdecl *poperator_delete)(void *)
 
static void *__cdeclpmalloc (unsigned int)
 
static void (__thiscall *pexception_ctor)(exception *
 
static exception *__thiscallpexception_opequals (exception *, exception *)
 
static char *__thiscallpexception_what (exception *)
 
static exception *__thiscallpbad_typeid_opequals (exception *, exception *)
 
static char *__thiscallpbad_typeid_what (exception *)
 
static exception *__thiscallpbad_cast_opequals (exception *, exception *)
 
static char *__thiscallpbad_cast_what (exception *)
 
static exception *__thiscallp__non_rtti_object_opequals (exception *, exception *)
 
static char *__thiscallp__non_rtti_object_what (exception *)
 
static char *__thiscallptype_info_raw_name (type_info *)
 
static char *__thiscallptype_info_name (type_info *)
 
static int (__thiscall *ptype_info_before)(type_info *
 
static type_info *static type_info *static type_info *static type_info *__cdeclp__RTtypeid (void *)
 
static void *__cdeclp__RTCastToVoid (void *)
 
static void *__cdeclp__RTDynamicCast (void *, int, void *, void *, int)
 
static char *__cdeclp__unDName (char *, const char *, int, void *, void *, unsigned short int)
 
static BOOL InitFunctionPtrs (void)
 
static void test_exception (void)
 
static void test_bad_typeid (void)
 
static void test_bad_cast (void)
 
static void test___non_rtti_object (void)
 
static void test_type_info (void)
 
static vtable_ptrget_vtable (void *obj)
 
static voidget_obj_locator (void *cppobj)
 
static void test_rtti (void)
 
static void test_demangle_datatype (void)
 
static int strcmp_space (const char *s1, const char *s2)
 
static void test_demangle (void)
 
 START_TEST (cpp)
 

Variables

static HMODULE hMsvcrt
 
static vtable_ptrpexception_vtable
 
static unsigned int
 
static LPCSTR
 
static vtable_ptrpbad_typeid_vtable
 
static vtable_ptrpbad_cast_vtable
 
static vtable_ptrp__non_rtti_object_vtable
 
static voidbAncientVersion
 

Macro Definition Documentation

◆ __thiscall

#define __thiscall   __cdecl

Definition at line 43 of file cpp.c.

◆ call_func1

#define call_func1 (   func,
  _this 
)    func(_this)

Definition at line 154 of file cpp.c.

◆ call_func2

#define call_func2 (   func,
  _this,
  a 
)    func(_this,a)

Definition at line 155 of file cpp.c.

◆ DEFINE_RTTI_REF

#define DEFINE_RTTI_REF (   type,
  name 
)    type *name

Definition at line 892 of file cpp.c.

◆ init_thiscall_thunk

#define init_thiscall_thunk ( )    do { } while(0)

Definition at line 153 of file cpp.c.

◆ RTTI_REF

#define RTTI_REF (   instance,
  name 
)    &instance.name

Definition at line 893 of file cpp.c.

◆ RTTI_REF_SIG0

#define RTTI_REF_SIG0 (   instance,
  name,
  base 
)    RTTI_REF(instance, name)

Definition at line 894 of file cpp.c.

◆ SET

#define SET (   x,
  y 
)    do { SETNOFAIL(x,y); ok(x != NULL, "Export '%s' not found\n", y); } while(0)

Definition at line 161 of file cpp.c.

◆ SETNOFAIL

#define SETNOFAIL (   x,
  y 
)    x = (void*)GetProcAddress(hMsvcrt,y)

Definition at line 160 of file cpp.c.

Typedef Documentation

◆ exception

◆ type_info

◆ vtable_ptr

typedef void(* vtable_ptr) (void)

Definition at line 23 of file cpp.c.

Function Documentation

◆ get_obj_locator()

static void * get_obj_locator ( void cppobj)
inlinestatic

Definition at line 885 of file cpp.c.

886{
887 const vtable_ptr *vtable = get_vtable( cppobj );
888 return (void *)vtable[-1];
889}
void(* vtable_ptr)(void)
Definition: cpp.c:23
static vtable_ptr * get_vtable(void *obj)
Definition: cpp.c:880
static void * vtable[]
Definition: typelib.c:1231

Referenced by MSVCRT___RTCastToVoid(), MSVCRT___RTDynamicCast(), MSVCRT___RTtypeid(), and test_rtti().

◆ get_vtable()

static vtable_ptr * get_vtable ( void obj)
inlinestatic

Definition at line 880 of file cpp.c.

881{
882 return *(vtable_ptr **)obj;
883}

Referenced by get_obj_locator().

◆ InitFunctionPtrs()

static BOOL InitFunctionPtrs ( void  )
static

Definition at line 163 of file cpp.c.

164{
165 hMsvcrt = GetModuleHandleA("msvcrt.dll");
166 if (!hMsvcrt)
167 hMsvcrt = GetModuleHandleA("msvcrtd.dll");
168 ok(hMsvcrt != 0, "GetModuleHandleA failed\n");
169 if (!hMsvcrt)
170 {
171 win_skip("Could not load msvcrt.dll\n");
172 return FALSE;
173 }
174
175 SET(pmalloc, "malloc");
176 SET(pfree, "free");
177
178 SET(pexception_vtable, "??_7exception@@6B@");
179 SET(pbad_typeid_vtable, "??_7bad_typeid@@6B@");
180 SET(pbad_cast_vtable, "??_7bad_cast@@6B@");
181 SET(p__non_rtti_object_vtable, "??_7__non_rtti_object@@6B@");
182
183 SET(p__RTtypeid, "__RTtypeid");
184 SET(p__RTCastToVoid, "__RTCastToVoid");
185 SET(p__RTDynamicCast, "__RTDynamicCast");
186
187 SET(p__unDName,"__unDName");
188
189 /* Extremely early versions export logic_error, and crash in RTTI */
190 SETNOFAIL(bAncientVersion, "??0logic_error@@QAE@ABQBD@Z");
191 if (sizeof(void *) > sizeof(int)) /* 64-bit initialization */
192 {
193 SETNOFAIL(poperator_new, "??_U@YAPEAX_K@Z");
194 SETNOFAIL(poperator_delete, "??_V@YAXPEAX@Z");
195
196 SET(pexception_ctor, "??0exception@@QEAA@AEBQEBD@Z");
197 SET(pexception_copy_ctor, "??0exception@@QEAA@AEBV0@@Z");
198 SET(pexception_default_ctor, "??0exception@@QEAA@XZ");
199 SET(pexception_dtor, "??1exception@@UEAA@XZ");
200 SET(pexception_opequals, "??4exception@@QEAAAEAV0@AEBV0@@Z");
201 SET(pexception_what, "?what@exception@@UEBAPEBDXZ");
202 pexception_vector_dtor = (void*)pexception_vtable[0];
203 pexception_scalar_dtor = (void*)pexception_vtable[0];
204
205 SET(pbad_typeid_ctor, "??0bad_typeid@@QEAA@PEBD@Z");
206 SETNOFAIL(pbad_typeid_ctor_closure, "??_Fbad_typeid@@QEAAXXZ");
207 SET(pbad_typeid_copy_ctor, "??0bad_typeid@@QEAA@AEBV0@@Z");
208 SET(pbad_typeid_dtor, "??1bad_typeid@@UEAA@XZ");
209 SET(pbad_typeid_opequals, "??4bad_typeid@@QEAAAEAV0@AEBV0@@Z");
210 SET(pbad_typeid_what, "?what@exception@@UEBAPEBDXZ");
211 pbad_typeid_vector_dtor = (void*)pbad_typeid_vtable[0];
212 pbad_typeid_scalar_dtor = (void*)pbad_typeid_vtable[0];
213
214 SET(pbad_cast_ctor, "??0bad_cast@@QEAA@AEBQEBD@Z");
215 SET(pbad_cast_ctor2, "??0bad_cast@@QEAA@PEBD@Z");
216 SET(pbad_cast_ctor_closure, "??_Fbad_cast@@QEAAXXZ");
217 SET(pbad_cast_copy_ctor, "??0bad_cast@@QEAA@AEBV0@@Z");
218 SET(pbad_cast_dtor, "??1bad_cast@@UEAA@XZ");
219 SET(pbad_cast_opequals, "??4bad_cast@@QEAAAEAV0@AEBV0@@Z");
220 SET(pbad_cast_what, "?what@exception@@UEBAPEBDXZ");
221 pbad_cast_vector_dtor = (void*)pbad_cast_vtable[0];
222 pbad_cast_scalar_dtor = (void*)pbad_cast_vtable[0];
223
224 SET(p__non_rtti_object_ctor, "??0__non_rtti_object@@QEAA@PEBD@Z");
225 SET(p__non_rtti_object_copy_ctor, "??0__non_rtti_object@@QEAA@AEBV0@@Z");
226 SET(p__non_rtti_object_dtor, "??1__non_rtti_object@@UEAA@XZ");
227 SET(p__non_rtti_object_opequals, "??4__non_rtti_object@@QEAAAEAV0@AEBV0@@Z");
228 SET(p__non_rtti_object_what, "?what@exception@@UEBAPEBDXZ");
229 p__non_rtti_object_vector_dtor = (void*)p__non_rtti_object_vtable[0];
230 p__non_rtti_object_scalar_dtor = (void*)p__non_rtti_object_vtable[0];
231
232 SET(ptype_info_dtor, "??1type_info@@UEAA@XZ");
233 SET(ptype_info_raw_name, "?raw_name@type_info@@QEBAPEBDXZ");
234 SET(ptype_info_name, "?name@type_info@@QEBAPEBDXZ");
235 SET(ptype_info_before, "?before@type_info@@QEBAHAEBV1@@Z");
236 SET(ptype_info_opequals_equals, "??8type_info@@QEBAHAEBV0@@Z");
237 SET(ptype_info_opnot_equals, "??9type_info@@QEBAHAEBV0@@Z");
238 }
239 else
240 {
241#ifdef __arm__
242 SETNOFAIL(poperator_new, "??_U@YAPAXI@Z");
243 SETNOFAIL(poperator_delete, "??_V@YAXPAX@Z");
244
245 SET(pexception_ctor, "??0exception@std@@QAA@ABQBD@Z");
246 SET(pexception_copy_ctor, "??0exception@std@@QAA@ABV01@@Z");
247 SET(pexception_default_ctor, "??0exception@std@@QAA@XZ");
248 SET(pexception_dtor, "??1exception@std@@UAA@XZ");
249 SET(pexception_opequals, "??4exception@std@@QAAAAV01@ABV01@@Z");
250 SET(pexception_what, "?what@exception@std@@UBAPBDXZ");
251 SET(pexception_vector_dtor, "??_Eexception@@UAEPAXI@Z");
252 SET(pexception_scalar_dtor, "??_Gexception@@UAEPAXI@Z");
253
254 SET(pbad_typeid_ctor, "??0bad_typeid@std@@QAA@PBD@Z");
255 SETNOFAIL(pbad_typeid_ctor_closure, "??_Fbad_typeid@std@@QAAXXZ");
256 SET(pbad_typeid_copy_ctor, "??0bad_typeid@std@@QAA@ABV01@@Z");
257 SET(pbad_typeid_dtor, "??1bad_typeid@std@@UAA@XZ");
258 SET(pbad_typeid_opequals, "??4bad_typeid@std@@QAAAAV01@ABV01@@Z");
259 SET(pbad_typeid_what, "?what@exception@std@@UBAPBDXZ");
260 SET(pbad_typeid_vector_dtor, "??_Ebad_cast@@UAEPAXI@Z");
261 SET(pbad_typeid_scalar_dtor, "??_Gbad_cast@@UAEPAXI@Z");
262
263 SETNOFAIL(pbad_cast_ctor, "??0bad_cast@@QAE@ABQBD@Z");
264 if (!pbad_cast_ctor)
265 SET(pbad_cast_ctor, "??0bad_cast@std@@AAA@PBQBD@Z");
266 SETNOFAIL(pbad_cast_ctor2, "??0bad_cast@std@@QAA@PBD@Z");
267 SETNOFAIL(pbad_cast_ctor_closure, "??_Fbad_cast@std@@QAAXXZ");
268 /* FIXME: No ARM equivalent for "??0bad_cast@@QAE@ABV0@@Z" */
269 SET(pbad_cast_dtor, "??1bad_cast@std@@UAA@XZ");
270 SET(pbad_cast_opequals, "??4bad_cast@std@@QAAAAV01@ABV01@@Z");
271 SET(pbad_cast_what, "?what@exception@std@@UBAPBDXZ");
272 SET(pbad_cast_vector_dtor, "??_Ebad_cast@@UAEPAXI@Z");
273 SET(pbad_cast_scalar_dtor, "??_Gbad_cast@@UAEPAXI@Z");
274
275 SET(p__non_rtti_object_ctor, "??0__non_rtti_object@std@@QAA@PBD@Z");
276 SET(p__non_rtti_object_copy_ctor, "??0__non_rtti_object@std@@QAA@ABV01@@Z");
277 SET(p__non_rtti_object_dtor, "??1__non_rtti_object@std@@UAA@XZ");
278 SET(p__non_rtti_object_opequals, "??4__non_rtti_object@std@@QAAAAV01@ABV01@@Z");
279 SET(p__non_rtti_object_what, "?what@exception@std@@UBAPBDXZ");
280 SET(p__non_rtti_object_vector_dtor, "??_E__non_rtti_object@@UAEPAXI@Z");
281 SET(p__non_rtti_object_scalar_dtor, "??_G__non_rtti_object@@UAEPAXI@Z");
282
283 SET(ptype_info_dtor, "??1type_info@@UAA@XZ");
284 SET(ptype_info_raw_name, "?raw_name@type_info@@QBAPBDXZ");
285 SET(ptype_info_name, "?name@type_info@@QBEPBDXZ");
286 SET(ptype_info_before, "?before@type_info@@QBA_NABV1@@Z");
287 SET(ptype_info_opequals_equals, "??8type_info@@QBA_NABV0@@Z");
288 SET(ptype_info_opnot_equals, "??9type_info@@QBA_NABV0@@Z");
289#else
290 SETNOFAIL(poperator_new, "??_U@YAPAXI@Z");
291 SETNOFAIL(poperator_delete, "??_V@YAXPAX@Z");
292
293 SET(pexception_ctor, "??0exception@@QAE@ABQBD@Z");
294 SET(pexception_copy_ctor, "??0exception@@QAE@ABV0@@Z");
295 SET(pexception_default_ctor, "??0exception@@QAE@XZ");
296 SET(pexception_dtor, "??1exception@@UAE@XZ");
297 SET(pexception_opequals, "??4exception@@QAEAAV0@ABV0@@Z");
298 SET(pexception_what, "?what@exception@@UBEPBDXZ");
299 SET(pexception_vector_dtor, "??_Eexception@@UAEPAXI@Z");
300 SET(pexception_scalar_dtor, "??_Gexception@@UAEPAXI@Z");
301
302 SET(pbad_typeid_ctor, "??0bad_typeid@@QAE@PBD@Z");
303 SETNOFAIL(pbad_typeid_ctor_closure, "??_Fbad_typeid@@QAEXXZ");
304 SET(pbad_typeid_copy_ctor, "??0bad_typeid@@QAE@ABV0@@Z");
305 SET(pbad_typeid_dtor, "??1bad_typeid@@UAE@XZ");
306 SET(pbad_typeid_opequals, "??4bad_typeid@@QAEAAV0@ABV0@@Z");
307 SET(pbad_typeid_what, "?what@exception@@UBEPBDXZ");
308 SET(pbad_typeid_vector_dtor, "??_Ebad_typeid@@UAEPAXI@Z");
309 SET(pbad_typeid_scalar_dtor, "??_Gbad_typeid@@UAEPAXI@Z");
310
311 SETNOFAIL(pbad_cast_ctor, "??0bad_cast@@QAE@ABQBD@Z");
312 if (!pbad_cast_ctor)
313 SET(pbad_cast_ctor, "??0bad_cast@@AAE@PBQBD@Z");
314 SETNOFAIL(pbad_cast_ctor2, "??0bad_cast@@QAE@PBD@Z");
315 SETNOFAIL(pbad_cast_ctor_closure, "??_Fbad_cast@@QAEXXZ");
316 SET(pbad_cast_copy_ctor, "??0bad_cast@@QAE@ABV0@@Z");
317 SET(pbad_cast_dtor, "??1bad_cast@@UAE@XZ");
318 SET(pbad_cast_opequals, "??4bad_cast@@QAEAAV0@ABV0@@Z");
319 SET(pbad_cast_what, "?what@exception@@UBEPBDXZ");
320 SET(pbad_cast_vector_dtor, "??_Ebad_cast@@UAEPAXI@Z");
321 SET(pbad_cast_scalar_dtor, "??_Gbad_cast@@UAEPAXI@Z");
322
323 SET(p__non_rtti_object_ctor, "??0__non_rtti_object@@QAE@PBD@Z");
324 SET(p__non_rtti_object_copy_ctor, "??0__non_rtti_object@@QAE@ABV0@@Z");
325 SET(p__non_rtti_object_dtor, "??1__non_rtti_object@@UAE@XZ");
326 SET(p__non_rtti_object_opequals, "??4__non_rtti_object@@QAEAAV0@ABV0@@Z");
327 SET(p__non_rtti_object_what, "?what@exception@@UBEPBDXZ");
328 SET(p__non_rtti_object_vector_dtor, "??_E__non_rtti_object@@UAEPAXI@Z");
329 SET(p__non_rtti_object_scalar_dtor, "??_G__non_rtti_object@@UAEPAXI@Z");
330
331 SET(ptype_info_dtor, "??1type_info@@UAE@XZ");
332 SET(ptype_info_raw_name, "?raw_name@type_info@@QBEPBDXZ");
333 SET(ptype_info_name, "?name@type_info@@QBEPBDXZ");
334 SET(ptype_info_before, "?before@type_info@@QBEHABV1@@Z");
335 SET(ptype_info_opequals_equals, "??8type_info@@QBEHABV0@@Z");
336 SET(ptype_info_opnot_equals, "??9type_info@@QBEHABV0@@Z");
337#endif /* __arm__ */
338 }
339
340 if (!poperator_new)
342 if (!poperator_delete)
343 poperator_delete = pfree;
344
346 return TRUE;
347}
#define ok(value,...)
Definition: atltest.h:57
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
Definition: loader.c:812
#define SETNOFAIL(x, y)
Definition: cpp.c:160
static char *__thiscall * ptype_info_raw_name(type_info *)
static vtable_ptr * pbad_typeid_vtable
Definition: cpp.c:72
static char *__thiscall * pexception_what(exception *)
static exception *__thiscall * pexception_opequals(exception *, exception *)
#define SET(x, y)
Definition: cpp.c:161
static char *__thiscall * pbad_typeid_what(exception *)
static exception *__thiscall * pbad_typeid_opequals(exception *, exception *)
static HMODULE hMsvcrt
Definition: cpp.c:47
static char *__thiscall * pbad_cast_what(exception *)
static void *__cdecl * pmalloc(unsigned int)
static void *__cdecl * p__RTCastToVoid(void *)
static void * bAncientVersion
Definition: cpp.c:116
static char *__cdecl * p__unDName(char *, const char *, int, void *, void *, unsigned short int)
static vtable_ptr * p__non_rtti_object_vtable
Definition: cpp.c:94
static void *__cdecl * poperator_new(unsigned int)
static void *__cdecl * p__RTDynamicCast(void *, int, void *, void *, int)
static exception *__thiscall * pbad_cast_opequals(exception *, exception *)
static char *__thiscall * ptype_info_name(type_info *)
#define init_thiscall_thunk()
Definition: cpp.c:153
static vtable_ptr * pbad_cast_vtable
Definition: cpp.c:84
static vtable_ptr * pexception_vtable
Definition: cpp.c:61
static exception *__thiscall * p__non_rtti_object_opequals(exception *, exception *)
static char *__thiscall * p__non_rtti_object_what(exception *)
static type_info *static type_info *static type_info *static type_info *__cdecl * p__RTtypeid(void *)
#define win_skip
Definition: test.h:160

Referenced by START_TEST().

◆ int()

static int ( __thiscall ptype_info_before)
static

◆ p__non_rtti_object_opequals()

static exception *__thiscall * p__non_rtti_object_opequals ( exception ,
exception  
)
static

◆ p__non_rtti_object_what()

static char *__thiscall * p__non_rtti_object_what ( exception )
static

◆ p__RTCastToVoid()

static void *__cdecl * p__RTCastToVoid ( void )
static

Referenced by InitFunctionPtrs(), and test_rtti().

◆ p__RTDynamicCast()

static void *__cdecl * p__RTDynamicCast ( void ,
int  ,
void ,
void ,
int   
)
static

Referenced by InitFunctionPtrs(), and test_rtti().

◆ p__RTtypeid()

◆ p__unDName()

static char *__cdecl * p__unDName ( char ,
const char ,
int  ,
void ,
void ,
unsigned short int   
)
static

◆ pbad_cast_opequals()

static exception *__thiscall * pbad_cast_opequals ( exception ,
exception  
)
static

Referenced by InitFunctionPtrs(), and test_bad_cast().

◆ pbad_cast_what()

static char *__thiscall * pbad_cast_what ( exception )
static

Referenced by InitFunctionPtrs(), and test_bad_cast().

◆ pbad_typeid_opequals()

static exception *__thiscall * pbad_typeid_opequals ( exception ,
exception  
)
static

◆ pbad_typeid_what()

static char *__thiscall * pbad_typeid_what ( exception )
static

◆ pexception_opequals()

static exception *__thiscall * pexception_opequals ( exception ,
exception  
)
static

Referenced by InitFunctionPtrs(), and test_exception().

◆ pexception_what()

static char *__thiscall * pexception_what ( exception )
static

Referenced by InitFunctionPtrs(), and test_exception().

◆ pmalloc()

◆ poperator_new()

◆ ptype_info_name()

static char *__thiscall * ptype_info_name ( type_info )
static

Referenced by InitFunctionPtrs(), and test_type_info().

◆ ptype_info_raw_name()

static char *__thiscall * ptype_info_raw_name ( type_info )
static

Referenced by InitFunctionPtrs(), and test_type_info().

◆ START_TEST()

START_TEST ( cpp  )

Definition at line 1347 of file cpp.c.

1348{
1349 if (!InitFunctionPtrs())
1350 return;
1351
1354 test_bad_cast();
1357 test_rtti();
1359 test_demangle();
1360}
static void test_demangle_datatype(void)
Definition: cpp.c:1098
static void test_bad_typeid(void)
Definition: cpp.c:470
static void test_bad_cast(void)
Definition: cpp.c:587
static void test_type_info(void)
Definition: cpp.c:813
static void test_demangle(void)
Definition: cpp.c:1142
static BOOL InitFunctionPtrs(void)
Definition: cpp.c:163
static void test_exception(void)
Definition: cpp.c:349
static void test_rtti(void)
Definition: cpp.c:901
static void test___non_rtti_object(void)
Definition: cpp.c:712

◆ strcmp_space()

static int strcmp_space ( const char s1,
const char s2 
)
static

Definition at line 1126 of file cpp.c.

1127{
1128 const char* s2start = s2;
1129 do {
1130 while (*s1 == *s2 && *s1) {
1131 s1++;
1132 s2++;
1133 }
1134 if (*s2 == ' ' && s2 > s2start && *(s2 - 1) == ' ')
1135 s2++;
1136 else
1137 break;
1138 } while (*s1 && *s2);
1139 return *s1 - *s2;
1140}
struct S1 s1
struct S2 s2

Referenced by test_demangle().

◆ test___non_rtti_object()

static void test___non_rtti_object ( void  )
static

Definition at line 712 of file cpp.c.

713{
714 static const char* e_name = "A __non_rtti_object name";
715 char* name;
716 exception e, e2, *pe;
717
718 if (!poperator_new || !poperator_delete ||
719 !p__non_rtti_object_ctor || !p__non_rtti_object_copy_ctor ||
720 !p__non_rtti_object_dtor || !p__non_rtti_object_opequals || !p__non_rtti_object_what ||
721 !p__non_rtti_object_vtable || !p__non_rtti_object_vector_dtor || !p__non_rtti_object_scalar_dtor)
722 return;
723
724 /* 'const char*' ctor */
725 memset(&e, 0, sizeof(e));
726 call_func2(p__non_rtti_object_ctor, &e, e_name);
727 ok(e.vtable != NULL, "Null __non_rtti_object vtable for e\n");
728 ok(e.name && e.name != e_name && !strcmp(e.name, "A __non_rtti_object name"), "Bad name '%s' for e\n", e.name);
729 ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free);
730
731 /* Copy ctor */
732 memset(&e2, 0, sizeof(e2));
733 call_func2(p__non_rtti_object_copy_ctor, &e2, &e);
734 ok(e2.vtable != NULL, "Null __non_rtti_object vtable for e2\n");
735 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A __non_rtti_object name"), "Bad name '%s' for e2\n", e2.name);
736 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
737 ok(e.vtable == e2.vtable, "__non_rtti_object vtables differ!\n");
738
739 /* Test calling the dtors */
740 call_func1(p__non_rtti_object_dtor, &e2);
741
742 /* Operator equals */
743 memset(&e2, 1, sizeof(e2));
744 call_func1(pexception_default_ctor, &e2);
746 ok(e2.vtable != NULL, "Null __non_rtti_object vtable for e2\n");
747 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A __non_rtti_object name"), "Bad __non_rtti_object name for e2\n");
748 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
749 ok(pe == &e2, "opequals didn't return e2\n");
750
751 /* what() */
753 ok(e2.name == name, "Bad __non_rtti_object name from e2::what()\n");
754
755 /* vtable ptr */
756 ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n");
757 call_func1(p__non_rtti_object_dtor, &e2);
758
759 /* new() */
760 pe = poperator_new(sizeof(exception));
761 ok(pe != NULL, "new() failed\n");
762 if (pe)
763 {
764 call_func2(p__non_rtti_object_ctor, pe, e_name);
765 /* scalar dtor */
766 call_func2(p__non_rtti_object_scalar_dtor, pe, 0); /* Shouldn't delete pe */
767 pe->name = NULL;
768 pe->do_free = 0;
769 call_func2(p__non_rtti_object_scalar_dtor, pe, 1); /* Should delete pe */
770 }
771
772 pe = poperator_new(sizeof(exception));
773 ok(pe != NULL, "new() failed\n");
774 if (pe)
775 {
776 /* vector dtor, single element */
777 call_func2(p__non_rtti_object_ctor, pe, e_name);
778 call_func2(p__non_rtti_object_vector_dtor, pe, 1); /* Should delete pe as single element*/
779 }
780
781 pe = poperator_new(sizeof(exception) * 4 + sizeof(size_t));
782 ok(pe != NULL, "new() failed\n");
783 if (pe)
784 {
785 /* vector dtor, multiple elements */
786 *((size_t*)pe) = 3;
787 pe = (exception*)((size_t*)pe + 1);
788 call_func2(p__non_rtti_object_ctor, &pe[0], e_name);
789 call_func2(p__non_rtti_object_ctor, &pe[1], e_name);
790 call_func2(p__non_rtti_object_ctor, &pe[2], e_name);
791 pe[3].name = 0;
792 pe[3].do_free = 1; /* Crash if we try to free this element */
793 call_func2(p__non_rtti_object_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */
794 }
795
796 /* test our exported vtable is kosher */
797 pe = (void*)p__non_rtti_object_vtable; /* Use the exception struct to get vtable ptrs */
798 p__non_rtti_object_vector_dtor = (void*)pe->vtable;
799 p__non_rtti_object_what = (void*)pe->name;
800
802 ok(e.name == name, "Bad __non_rtti_object name from vtable e::what()\n");
803
805 {
806 /* Check the rtti */
807 type_info *ti = p__RTtypeid(&e);
808 ok (ti != NULL && !strcmp(ti->mangled, ".?AV__non_rtti_object@@"), "bad rtti for e\n");
809 }
810 call_func2(p__non_rtti_object_vector_dtor, &e, 0); /* Should delete e.name, but not e */
811}
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
#define NULL
Definition: types.h:112
#define e
Definition: ke_i.h:82
#define call_func2(func, _this, a)
Definition: cpp.c:155
#define call_func1(func, _this)
Definition: cpp.c:154
#define memset(x, y, z)
Definition: compat.h:39
char * name
Definition: cpp.c:28
vtable_ptr * vtable
Definition: cpp.c:27
int do_free
Definition: cpp.c:29
char mangled[16]
Definition: cpp.c:36
char * name
Definition: compiler.c:66
Definition: name.c:39

Referenced by START_TEST().

◆ test_bad_cast()

static void test_bad_cast ( void  )
static

Definition at line 587 of file cpp.c.

588{
589 static const char* e_name = "A bad_cast name";
590 char* name;
591 exception e, e2, e3, *pe;
592
593 if (!poperator_new || !poperator_delete ||
594 !pbad_cast_ctor || !pbad_cast_copy_ctor ||
595 !pbad_cast_dtor || !pbad_cast_opequals || !pbad_cast_what ||
596 !pbad_cast_vtable || !pbad_cast_vector_dtor || !pbad_cast_scalar_dtor)
597 return;
598
599 if (pbad_cast_ctor2)
600 {
601 /* 'const char*' ctor */
602 memset(&e, 0, sizeof(e));
603 call_func2(pbad_cast_ctor2, &e, e_name);
604 ok(e.vtable != NULL, "Null bad_cast vtable for e\n");
605 ok(e.name && e.name != e_name && !strcmp(e.name, "A bad_cast name"), "Bad name '%s' for e\n", e.name);
606 ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free);
607 call_func1(pbad_cast_dtor, &e);
608 }
609
610 /* 'const char*&' ctor */
611 memset(&e, 0, sizeof(e));
612 call_func2(pbad_cast_ctor, &e, &e_name);
613 ok(e.vtable != NULL, "Null bad_cast vtable for e\n");
614 ok(e.name && e.name != e_name && !strcmp(e.name, "A bad_cast name"), "Bad name '%s' for e\n", e.name);
615 ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free);
616
617 /* Copy ctor */
618 memset(&e2, 0, sizeof(e2));
619 call_func2(pbad_cast_copy_ctor, &e2, &e);
620 ok(e2.vtable != NULL, "Null bad_cast vtable for e2\n");
621 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_cast name"), "Bad name '%s' for e2\n", e2.name);
622 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
623
624 /* Ctor closure */
625 if (pbad_cast_ctor_closure)
626 {
627 memset(&e3, 1, sizeof(e3));
628 call_func1(pbad_cast_ctor_closure, &e3);
629 ok(e3.vtable != NULL, "Null bad_cast vtable for e3\n");
630 ok(e3.name && !strcmp(e3.name, "bad cast"), "Bad bad_cast name for e3\n");
631 ok(e3.do_free == 1, "do_free set to %d for e3\n", e3.do_free);
632 ok(e.vtable == e3.vtable, "bad_cast closure vtables differ!\n");
633 call_func1(pbad_cast_dtor, &e3);
634 }
635 ok(e.vtable == e2.vtable, "bad_cast vtables differ!\n");
636
637 /* Test calling the dtors */
638 call_func1(pbad_cast_dtor, &e2);
639
640 /* Operator equals */
641 memset(&e2, 1, sizeof(e2));
642 call_func1(pexception_default_ctor, &e2);
643 pe = call_func2(pbad_cast_opequals, &e2, &e);
644 ok(e2.vtable != NULL, "Null bad_cast vtable for e2\n");
645 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_cast name"), "Bad bad_cast name for e2\n");
646 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
647 ok(pe == &e2, "opequals didn't return e2\n");
648
649 /* what() */
651 ok(e2.name == name, "Bad bad_cast name from e2::what()\n");
652
653 /* vtable ptr */
654 ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n");
655 call_func1(pbad_cast_dtor, &e2);
656
657 /* new() */
658 pe = poperator_new(sizeof(exception));
659 ok(pe != NULL, "new() failed\n");
660 if (pe)
661 {
662 call_func2(pbad_cast_ctor, pe, &e_name);
663 /* scalar dtor */
664 call_func2(pbad_cast_scalar_dtor, pe, 0); /* Shouldn't delete pe */
665 pe->name = NULL;
666 pe->do_free = 0;
667 call_func2(pbad_cast_scalar_dtor, pe, 1); /* Should delete pe */
668 }
669
670 pe = poperator_new(sizeof(exception));
671 ok(pe != NULL, "new() failed\n");
672 if (pe)
673 {
674 /* vector dtor, single element */
675 call_func2(pbad_cast_ctor, pe, &e_name);
676 call_func2(pbad_cast_vector_dtor, pe, 1); /* Should delete pe as single element*/
677 }
678
679 pe = poperator_new(sizeof(exception) * 4 + sizeof(size_t));
680 ok(pe != NULL, "new() failed\n");
681 if (pe)
682 {
683 /* vector dtor, multiple elements */
684 *((size_t*)pe) = 3;
685 pe = (exception*)((size_t*)pe + 1);
686 call_func2(pbad_cast_ctor, &pe[0], &e_name);
687 call_func2(pbad_cast_ctor, &pe[1], &e_name);
688 call_func2(pbad_cast_ctor, &pe[2], &e_name);
689 pe[3].name = 0;
690 pe[3].do_free = 1; /* Crash if we try to free this element */
691 call_func2(pbad_cast_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */
692 }
693
694 /* test our exported vtable is kosher */
695 pe = (void*)pbad_cast_vtable; /* Use the exception struct to get vtable ptrs */
696 pbad_cast_vector_dtor = (void*)pe->vtable;
697 pbad_cast_what = (void*)pe->name;
698
700 ok(e.name == name, "Bad bad_cast name from vtable e::what()\n");
701
703 {
704 /* Check the rtti */
705 type_info *ti = p__RTtypeid(&e);
706 ok (ti != NULL && !strcmp(ti->mangled, ".?AVbad_cast@@"), "bad rtti for e\n");
707 }
708 call_func2(pbad_cast_vector_dtor, &e, 0); /* Should delete e.name, but not e */
709}

Referenced by START_TEST().

◆ test_bad_typeid()

static void test_bad_typeid ( void  )
static

Definition at line 470 of file cpp.c.

471{
472 static const char* e_name = "A bad_typeid name";
473 char* name;
474 exception e, e2, e3, *pe;
475
476 if (!poperator_new || !poperator_delete ||
477 !pbad_typeid_ctor || !pbad_typeid_copy_ctor ||
478 !pbad_typeid_dtor || !pbad_typeid_opequals || !pbad_typeid_what ||
479 !pbad_typeid_vtable || !pbad_typeid_vector_dtor || !pbad_typeid_scalar_dtor)
480 return;
481
482 /* 'const char*' ctor */
483 memset(&e, 0, sizeof(e));
484 call_func2(pbad_typeid_ctor, &e, e_name);
485 ok(e.vtable != NULL, "Null bad_typeid vtable for e\n");
486 ok(e.name && e.name != e_name && !strcmp(e.name, "A bad_typeid name"), "Bad name '%s' for e\n", e.name);
487 ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free);
488
489 /* Copy ctor */
490 memset(&e2, 0, sizeof(e2));
491 call_func2(pbad_typeid_copy_ctor, &e2, &e);
492 ok(e2.vtable != NULL, "Null bad_typeid vtable for e2\n");
493 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_typeid name"), "Bad name '%s' for e2\n", e2.name);
494 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
495
496 /* Ctor closure */
497 if (pbad_typeid_ctor_closure)
498 {
499 memset(&e3, 1, sizeof(e3));
500 call_func1(pbad_typeid_ctor_closure, &e3);
501 ok(e3.vtable != NULL, "Null bad_typeid vtable for e3\n");
502 ok(e3.name && !strcmp(e3.name, "bad typeid"), "Bad bad_typeid name for e3\n");
503 ok(e3.do_free == 1, "do_free set to %d for e3\n", e3.do_free);
504 ok(e.vtable == e3.vtable, "bad_typeid closure vtables differ!\n");
505 call_func1(pbad_typeid_dtor, &e3);
506 }
507 ok(e.vtable == e2.vtable, "bad_typeid vtables differ!\n");
508
509 /* Test calling the dtors */
510 call_func1(pbad_typeid_dtor, &e2);
511
512 /* Operator equals */
513 memset(&e2, 1, sizeof(e2));
514 call_func1(pexception_default_ctor, &e2);
515 pe = call_func2(pbad_typeid_opequals, &e2, &e);
516 ok(e2.vtable != NULL, "Null bad_typeid vtable for e2\n");
517 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "A bad_typeid name"), "Bad bad_typeid name for e2\n");
518 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
519 ok(pe == &e2, "opequals didn't return e2\n");
520
521 /* what() */
523 ok(e2.name == name, "Bad bad_typeid name from e2::what()\n");
524
525 /* vtable ptr */
526 ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n");
527 call_func1(pbad_typeid_dtor, &e2);
528
529 /* new() */
530 pe = poperator_new(sizeof(exception));
531 ok(pe != NULL, "new() failed\n");
532 if (pe)
533 {
534 call_func2(pbad_typeid_ctor, pe, e_name);
535 /* scalar dtor */
536 call_func2(pbad_typeid_scalar_dtor, pe, 0); /* Shouldn't delete pe */
537 pe->name = NULL;
538 pe->do_free = 0;
539 call_func2(pbad_typeid_scalar_dtor, pe, 1); /* Should delete pe */
540 }
541
542 pe = poperator_new(sizeof(exception));
543 ok(pe != NULL, "new() failed\n");
544 if (pe)
545 {
546 /* vector dtor, single element */
547 call_func2(pbad_typeid_ctor, pe, e_name);
548 call_func2(pbad_typeid_vector_dtor, pe, 1); /* Should delete pe as single element*/
549 }
550
551 pe = poperator_new(sizeof(exception) * 4 + sizeof(size_t));
552 ok(pe != NULL, "new() failed\n");
553 if (pe)
554 {
555 /* vector dtor, multiple elements */
556 *((size_t*)pe) = 3;
557 pe = (exception*)((size_t*)pe + 1);
558 call_func2(pbad_typeid_ctor, &pe[0], e_name);
559 call_func2(pbad_typeid_ctor, &pe[1], e_name);
560 call_func2(pbad_typeid_ctor, &pe[2], e_name);
561 pe[3].name = 0;
562 pe[3].do_free = 1; /* Crash if we try to free this element */
563 call_func2(pbad_typeid_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */
564 }
565
566 /* test our exported vtable is kosher */
567 pe = (void*)pbad_typeid_vtable; /* Use the exception struct to get vtable ptrs */
568 pbad_typeid_vector_dtor = (void*)pe->vtable;
569 pbad_typeid_what = (void*)pe->name;
570
572 ok(e.name == name, "Bad bad_typeid name from vtable e::what()\n");
573
575 {
576 /* Check the rtti */
577 type_info *ti = p__RTtypeid(&e);
578 ok (ti != NULL && !strcmp(ti->mangled, ".?AVbad_typeid@@"), "bad rtti for e (%s)\n",
579 !ti ? "null" : ti->mangled);
580 }
581
582 call_func2(pbad_typeid_vector_dtor, &e, 0); /* Should delete e.name, but not e */
583}

Referenced by START_TEST().

◆ test_demangle()

static void test_demangle ( void  )
static

Definition at line 1142 of file cpp.c.

1143{
1144 static struct {const char* in; const char* out; const char *broken; unsigned int flags;} test[] = {
1145/* 0 */ {"??0bad_alloc@std@@QAE@ABV01@@Z",
1146 "public: __thiscall std::bad_alloc::bad_alloc(class std::bad_alloc const &)",
1147 "public: __thiscall std::bad_alloc::bad_alloc(class bad_alloc::bad_alloc const &)"},
1148/* 1 */ {"??0bad_alloc@std@@QAE@PBD@Z",
1149 "public: __thiscall std::bad_alloc::bad_alloc(char const *)"},
1150/* 2 */ {"??0bad_cast@@AAE@PBQBD@Z",
1151 "private: __thiscall bad_cast::bad_cast(char const * const *)"},
1152/* 3 */ {"??0bad_cast@@QAE@ABQBD@Z",
1153 "public: __thiscall bad_cast::bad_cast(char const * const &)"},
1154/* 4 */ {"??0bad_cast@@QAE@ABV0@@Z",
1155 "public: __thiscall bad_cast::bad_cast(class bad_cast const &)"},
1156/* 5 */ {"??0bad_exception@std@@QAE@ABV01@@Z",
1157 "public: __thiscall std::bad_exception::bad_exception(class std::bad_exception const &)",
1158 "public: __thiscall std::bad_exception::bad_exception(class bad_exception::bad_exception const &)"},
1159/* 6 */ {"??0bad_exception@std@@QAE@PBD@Z",
1160 "public: __thiscall std::bad_exception::bad_exception(char const *)"},
1161/* 7 */ {"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@ABV01@@Z",
1162 "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(class std::basic_filebuf<char,struct std::char_traits<char> > const &)",
1163 "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(class basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> > const &)"},
1164/* 8 */ {"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@PAU_iobuf@@@Z",
1165 "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(struct _iobuf *)"},
1166/* 9 */ {"??0?$basic_filebuf@DU?$char_traits@D@std@@@std@@QAE@W4_Uninitialized@1@@Z",
1167 "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(enum std::_Uninitialized)",
1168 "public: __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::basic_filebuf<char,struct std::char_traits<char> >(enum basic_filebuf<char,struct std::char_traits<char> >::_Uninitialized)"},
1169/* 10 */ {"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@ABV01@@Z",
1170 "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(class std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> > const &)",
1171 "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(class basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> > const &)"},
1172/* 11 */ {"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@PAU_iobuf@@@Z",
1173 "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(struct _iobuf *)"},
1174/* 12 */ {"??0?$basic_filebuf@GU?$char_traits@G@std@@@std@@QAE@W4_Uninitialized@1@@Z",
1175 "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(enum std::_Uninitialized)",
1176 "public: __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >(enum basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::_Uninitialized)"},
1177/* 13 */ {"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV01@@Z",
1178 "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > const &)",
1179 "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(class basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
1180/* 14 */ {"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@1@H@Z",
1181 "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)",
1182 "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(class basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &,int)"},
1183/* 15 */ {"??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z",
1184 "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(int)"},
1185/* 16 */ {"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV01@@Z",
1186 "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(class std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)",
1187 "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(class basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
1188/* 17 */ {"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@1@H@Z",
1189 "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &,int)",
1190 "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(class basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &,int)"},
1191/* 18 */ {"??0?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAE@H@Z",
1192 "public: __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >(int)"},
1193/* 19 */ {"??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z",
1194 "public: __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >(class std::_Locinfo const &,unsigned int)",
1195 "public: __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >(class num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::_Locinfo const &,unsigned int)"},
1196/* 20 */ {"??0?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@QAE@I@Z",
1197 "public: __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >(unsigned int)"},
1198/* 21 */ {"??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@ABV_Locinfo@1@I@Z",
1199 "public: __thiscall std::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >(class std::_Locinfo const &,unsigned int)",
1200 "public: __thiscall std::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >(class num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::_Locinfo const &,unsigned int)"},
1201/* 22 */ {"??0?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@QAE@I@Z", "public: __thiscall std::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >(unsigned int)"},
1202/* 23 */ {"??0streambuf@@QAE@ABV0@@Z", "public: __thiscall streambuf::streambuf(class streambuf const &)"},
1203/* 24 */ {"??0strstreambuf@@QAE@ABV0@@Z", "public: __thiscall strstreambuf::strstreambuf(class strstreambuf const &)"},
1204/* 25 */ {"??0strstreambuf@@QAE@H@Z", "public: __thiscall strstreambuf::strstreambuf(int)"},
1205/* 26 */ {"??0strstreambuf@@QAE@P6APAXJ@ZP6AXPAX@Z@Z", "public: __thiscall strstreambuf::strstreambuf(void * (__cdecl*)(long),void (__cdecl*)(void *))"},
1206/* 27 */ {"??0strstreambuf@@QAE@PADH0@Z", "public: __thiscall strstreambuf::strstreambuf(char *,int,char *)"},
1207/* 28 */ {"??0strstreambuf@@QAE@PAEH0@Z", "public: __thiscall strstreambuf::strstreambuf(unsigned char *,int,unsigned char *)"},
1208/* 29 */ {"??0strstreambuf@@QAE@XZ", "public: __thiscall strstreambuf::strstreambuf(void)"},
1209/* 30 */ {"??1__non_rtti_object@std@@UAE@XZ", "public: virtual __thiscall std::__non_rtti_object::~__non_rtti_object(void)"},
1210/* 31 */ {"??1__non_rtti_object@@UAE@XZ", "public: virtual __thiscall __non_rtti_object::~__non_rtti_object(void)"},
1211/* 32 */ {"??1?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@UAE@XZ", "public: virtual __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::~num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >(void)"},
1212/* 33 */ {"??1?$num_get@GV?$istreambuf_iterator@GU?$char_traits@G@std@@@std@@@std@@UAE@XZ", "public: virtual __thiscall std::num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >::~num_get<unsigned short,class std::istreambuf_iterator<unsigned short,struct std::char_traits<unsigned short> > >(void)"},
1213/* 34 */ {"??4istream_withassign@@QAEAAV0@ABV0@@Z", "public: class istream_withassign & __thiscall istream_withassign::operator=(class istream_withassign const &)"},
1214/* 35 */ {"??4istream_withassign@@QAEAAVistream@@ABV1@@Z", "public: class istream & __thiscall istream_withassign::operator=(class istream const &)"},
1215/* 36 */ {"??4istream_withassign@@QAEAAVistream@@PAVstreambuf@@@Z", "public: class istream & __thiscall istream_withassign::operator=(class streambuf *)"},
1216/* 37 */ {"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAC@Z", "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,signed char &)"},
1217/* 38 */ {"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAD@Z", "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,char &)"},
1218/* 39 */ {"??5std@@YAAAV?$basic_istream@DU?$char_traits@D@std@@@0@AAV10@AAE@Z", "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl std::operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,unsigned char &)"},
1219/* 40 */ {"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@P6AAAVios_base@1@AAV21@@Z@Z", "public: class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::operator<<(class std::ios_base & (__cdecl*)(class std::ios_base &))"},
1220/* 41 */ {"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PAV?$basic_streambuf@GU?$char_traits@G@std@@@1@@Z", "public: class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::operator<<(class std::basic_streambuf<unsigned short,struct std::char_traits<unsigned short> > *)"},
1221/* 42 */ {"??6?$basic_ostream@GU?$char_traits@G@std@@@std@@QAEAAV01@PBX@Z", "public: class std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >::operator<<(void const *)"},
1222/* 43 */ {"??_8?$basic_fstream@DU?$char_traits@D@std@@@std@@7B?$basic_ostream@DU?$char_traits@D@std@@@1@@", "const std::basic_fstream<char,struct std::char_traits<char> >::`vbtable'{for `std::basic_ostream<char,struct std::char_traits<char> >'}"},
1223/* 44 */ {"??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_istream@GU?$char_traits@G@std@@@1@@", "const std::basic_fstream<unsigned short,struct std::char_traits<unsigned short> >::`vbtable'{for `std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >'}"},
1224/* 45 */ {"??_8?$basic_fstream@GU?$char_traits@G@std@@@std@@7B?$basic_ostream@GU?$char_traits@G@std@@@1@@", "const std::basic_fstream<unsigned short,struct std::char_traits<unsigned short> >::`vbtable'{for `std::basic_ostream<unsigned short,struct std::char_traits<unsigned short> >'}"},
1225/* 46 */ {"??9std@@YA_NPBDABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@0@@Z", "bool __cdecl std::operator!=(char const *,class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
1226/* 47 */ {"??9std@@YA_NPBGABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@0@@Z", "bool __cdecl std::operator!=(unsigned short const *,class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
1227/* 48 */ {"??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEAADI@Z", "public: char & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::operator[](unsigned int)"},
1228/* 49 */ {"??A?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBEABDI@Z", "public: char const & __thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::operator[](unsigned int)const "},
1229/* 50 */ {"??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEAAGI@Z", "public: unsigned short & __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::operator[](unsigned int)"},
1230/* 51 */ {"??A?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBEABGI@Z", "public: unsigned short const & __thiscall std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::operator[](unsigned int)const "},
1231/* 52 */ {"?abs@std@@YAMABV?$complex@M@1@@Z", "float __cdecl std::abs(class std::complex<float> const &)"},
1232/* 53 */ {"?abs@std@@YANABV?$complex@N@1@@Z", "double __cdecl std::abs(class std::complex<double> const &)"},
1233/* 54 */ {"?abs@std@@YAOABV?$complex@O@1@@Z", "long double __cdecl std::abs(class std::complex<long double> const &)"},
1234/* 55 */ {"?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A", "class std::basic_istream<char,struct std::char_traits<char> > std::cin"},
1235/* 56 */ {"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAG@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,unsigned short &)const "},
1236/* 57 */ {"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAI@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,unsigned int &)const "},
1237/* 58 */ {"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAJ@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,long &)const "},
1238/* 59 */ {"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAK@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,unsigned long &)const "},
1239/* 60 */ {"?do_get@?$num_get@DV?$istreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@MBE?AV?$istreambuf_iterator@DU?$char_traits@D@std@@@2@V32@0AAVios_base@2@AAHAAM@Z", "protected: virtual class std::istreambuf_iterator<char,struct std::char_traits<char> > __thiscall std::num_get<char,class std::istreambuf_iterator<char,struct std::char_traits<char> > >::do_get(class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::istreambuf_iterator<char,struct std::char_traits<char> >,class std::ios_base &,int &,float &)const "},
1240/* 61 */ {"?_query_new_handler@@YAP6AHI@ZXZ", "int (__cdecl*__cdecl _query_new_handler(void))(unsigned int)"},
1241/* 62 */ {"?register_callback@ios_base@std@@QAEXP6AXW4event@12@AAV12@H@ZH@Z", "public: void __thiscall std::ios_base::register_callback(void (__cdecl*)(enum std::ios_base::event,class std::ios_base &,int),int)"},
1242/* 63 */ {"?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z", "public: class std::basic_istream<char,struct std::char_traits<char> > & __thiscall std::basic_istream<char,struct std::char_traits<char> >::seekg(long,enum std::ios_base::seekdir)"},
1243/* 64 */ {"?seekg@?$basic_istream@DU?$char_traits@D@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z", "public: class std::basic_istream<char,struct std::char_traits<char> > & __thiscall std::basic_istream<char,struct std::char_traits<char> >::seekg(class std::fpos<int>)"},
1244/* 65 */ {"?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@JW4seekdir@ios_base@2@@Z", "public: class std::basic_istream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >::seekg(long,enum std::ios_base::seekdir)"},
1245/* 66 */ {"?seekg@?$basic_istream@GU?$char_traits@G@std@@@std@@QAEAAV12@V?$fpos@H@2@@Z", "public: class std::basic_istream<unsigned short,struct std::char_traits<unsigned short> > & __thiscall std::basic_istream<unsigned short,struct std::char_traits<unsigned short> >::seekg(class std::fpos<int>)"},
1246/* 67 */ {"?seekoff@?$basic_filebuf@DU?$char_traits@D@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z", "protected: virtual class std::fpos<int> __thiscall std::basic_filebuf<char,struct std::char_traits<char> >::seekoff(long,enum std::ios_base::seekdir,int)"},
1247/* 68 */ {"?seekoff@?$basic_filebuf@GU?$char_traits@G@std@@@std@@MAE?AV?$fpos@H@2@JW4seekdir@ios_base@2@H@Z", "protected: virtual class std::fpos<int> __thiscall std::basic_filebuf<unsigned short,struct std::char_traits<unsigned short> >::seekoff(long,enum std::ios_base::seekdir,int)"},
1248/* 69 */ {"?set_new_handler@@YAP6AXXZP6AXXZ@Z", "void (__cdecl*__cdecl set_new_handler(void (__cdecl*)(void)))(void)"},
1249/* 70 */ {"?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_istringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
1250/* 71 */ {"?str@?$basic_istringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_istringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
1251/* 72 */ {"?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_istringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
1252/* 73 */ {"?str@?$basic_istringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_istringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
1253/* 74 */ {"?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_ostringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
1254/* 75 */ {"?str@?$basic_ostringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_ostringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
1255/* 76 */ {"?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_ostringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
1256/* 77 */ {"?str@?$basic_ostringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_ostringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
1257/* 78 */ {"?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
1258/* 79 */ {"?str@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
1259/* 80 */ {"?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_stringbuf<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
1260/* 81 */ {"?str@?$basic_stringbuf@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_stringbuf<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
1261/* 82 */ {"?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAEXABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@@Z", "public: void __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > const &)"},
1262/* 83 */ {"?str@?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QBE?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@2@XZ", "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::str(void)const "},
1263/* 84 */ {"?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QAEXABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@@Z", "public: void __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > const &)"},
1264/* 85 */ {"?str@?$basic_stringstream@GU?$char_traits@G@std@@V?$allocator@G@2@@std@@QBE?AV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@2@XZ", "public: class std::basic_string<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> > __thiscall std::basic_stringstream<unsigned short,struct std::char_traits<unsigned short>,class std::allocator<unsigned short> >::str(void)const "},
1265/* 86 */ {"?_Sync@ios_base@std@@0_NA", "private: static bool std::ios_base::_Sync"},
1266/* 87 */ {"??_U@YAPAXI@Z", "void * __cdecl operator new[](unsigned int)"},
1267/* 88 */ {"??_V@YAXPAX@Z", "void __cdecl operator delete[](void *)"},
1268/* 89 */ {"??X?$_Complex_base@M@std@@QAEAAV01@ABM@Z", "public: class std::_Complex_base<float> & __thiscall std::_Complex_base<float>::operator*=(float const &)"},
1269/* 90 */ {"??Xstd@@YAAAV?$complex@M@0@AAV10@ABV10@@Z", "class std::complex<float> & __cdecl std::operator*=(class std::complex<float> &,class std::complex<float> const &)"},
1270/* 91 */ {"?aaa@@YAHAAUbbb@@@Z", "int __cdecl aaa(struct bbb &)"},
1271/* 92 */ {"?aaa@@YAHBAUbbb@@@Z", "int __cdecl aaa(struct bbb & volatile)"},
1272/* 93 */ {"?aaa@@YAHPAUbbb@@@Z", "int __cdecl aaa(struct bbb *)"},
1273/* 94 */ {"?aaa@@YAHQAUbbb@@@Z", "int __cdecl aaa(struct bbb * const)"},
1274/* 95 */ {"?aaa@@YAHRAUbbb@@@Z", "int __cdecl aaa(struct bbb * volatile)"},
1275/* 96 */ {"?aaa@@YAHSAUbbb@@@Z", "int __cdecl aaa(struct bbb * const volatile)"},
1276/* 97 */ {"??0aa.a@@QAE@XZ", "??0aa.a@@QAE@XZ"},
1277/* 98 */ {"??0aa$_3a@@QAE@XZ", "public: __thiscall aa$_3a::aa$_3a(void)"},
1278/* 99 */ {"??2?$aaa@AAUbbb@@AAUccc@@AAU2@@ddd@1eee@2@QAEHXZ", "public: int __thiscall eee::eee::ddd::ddd::aaa<struct bbb &,struct ccc &,struct ccc &>::operator new(void)"},
1279/* 100 */ {"?pSW@@3P6GHKPAX0PAU_tagSTACKFRAME@@0P6GH0K0KPAK@ZP6GPAX0K@ZP6GK0K@ZP6GK00PAU_tagADDRESS@@@Z@ZA", "int (__stdcall* pSW)(unsigned long,void *,void *,struct _tagSTACKFRAME *,void *,int (__stdcall*)(void *,unsigned long,void *,unsigned long,unsigned long *),void * (__stdcall*)(void *,unsigned long),unsigned long (__stdcall*)(void *,unsigned long),unsigned long (__stdcall*)(void *,void *,struct _tagADDRESS *))"},
1280/* 101 */ {"?$_aaa@Vbbb@@", "_aaa<class bbb>"},
1281/* 102 */ {"?$aaa@Vbbb@ccc@@Vddd@2@", "aaa<class ccc::bbb,class ccc::ddd>"},
1282/* 103 */ { "??0?$Foo@P6GHPAX0@Z@@QAE@PAD@Z", "public: __thiscall Foo<int (__stdcall*)(void *,void *)>::Foo<int (__stdcall*)(void *,void *)>(char *)"},
1283/* 104 */ { "??0?$Foo@P6GHPAX0@Z@@QAE@PAD@Z", "__thiscall Foo<int (__stdcall*)(void *,void *)>::Foo<int (__stdcall*)(void *,void *)>(char *)", NULL, 0x880},
1284/* 105 */ { "?Qux@Bar@@0PAP6AHPAV1@AAH1PAH@ZA", "private: static int (__cdecl** Bar::Qux)(class Bar *,int &,int &,int *)" },
1285/* 106 */ { "?Qux@Bar@@0PAP6AHPAV1@AAH1PAH@ZA", "Bar::Qux", NULL, 0x1800},
1286/* 107 */ {"?$AAA@$DBAB@", "AAA<`template-parameter257'>"},
1287/* 108 */ {"?$AAA@?C@", "AAA<`template-parameter-2'>"},
1288/* 109 */ {"?$AAA@PAUBBB@@", "AAA<struct BBB *>"},
1289/* 110 */ {"??$ccccc@PAVaaa@@@bar@bb@foo@@DGPAV0@PAV0@PAVee@@IPAPAVaaa@@1@Z",
1290 "private: static class bar * __stdcall foo::bb::bar::ccccc<class aaa *>(class bar *,class ee *,unsigned int,class aaa * *,class ee *)",
1291 "??$ccccc@PAVaaa@@@bar@bb@foo@@DGPAV0@PAV0@PAVee@@IPAPAVaaa@@1@Z"},
1292/* 111 */ {"?f@T@@QAEHQCY1BE@BO@D@Z", "public: int __thiscall T::f(char (volatile * const)[20][30])"},
1293/* 112 */ {"?f@T@@QAEHQAY2BE@BO@CI@D@Z", "public: int __thiscall T::f(char (* const)[20][30][40])"},
1294/* 113 */ {"?f@T@@QAEHQAY1BE@BO@$$CBD@Z", "public: int __thiscall T::f(char const (* const)[20][30])"},
1295/* 114 */ {"??0?$Foo@U?$vector_c@H$00$01$0?1$0A@$0A@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@$0HPPPPPPP@@mpl@boost@@@@QAE@XZ",
1296 "public: __thiscall Foo<struct boost::mpl::vector_c<int,1,2,-2,0,0,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647> >::Foo<struct boost::mpl::vector_c<int,1,2,-2,0,0,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647,2147483647> >(void)"},
1297/* 115 */ {"?swprintf@@YAHPAGIPBGZZ", "int __cdecl swprintf(unsigned short *,unsigned int,unsigned short const *,...)"},
1298/* 116 */ {"?vswprintf@@YAHPAGIPBGPAD@Z", "int __cdecl vswprintf(unsigned short *,unsigned int,unsigned short const *,char *)"},
1299/* 117 */ {"?vswprintf@@YAHPA_WIPB_WPAD@Z", "int __cdecl vswprintf(wchar_t *,unsigned int,wchar_t const *,char *)"},
1300/* 118 */ {"?swprintf@@YAHPA_WIPB_WZZ", "int __cdecl swprintf(wchar_t *,unsigned int,wchar_t const *,...)"},
1301/* 119 */ {"??Xstd@@YAAEAV?$complex@M@0@AEAV10@AEBV10@@Z", "class std::complex<float> & __ptr64 __cdecl std::operator*=(class std::complex<float> & __ptr64,class std::complex<float> const & __ptr64)"},
1302/* 120 */ {"?_Doraise@bad_cast@std@@MEBAXXZ", "protected: virtual void __cdecl std::bad_cast::_Doraise(void)const __ptr64"},
1303/* 121 */ {"??$?DM@std@@YA?AV?$complex@M@0@ABMABV10@@Z",
1304 "class std::complex<float> __cdecl std::operator*<float>(float const &,class std::complex<float> const &)",
1305 "??$?DM@std@@YA?AV?$complex@M@0@ABMABV10@@Z"},
1306/* 122 */ {"?_R2@?BN@???$_Fabs@N@std@@YANAEBV?$complex@N@1@PEAH@Z@4NB",
1307 "double const `double __cdecl std::_Fabs<double>(class std::complex<double> const & __ptr64,int * __ptr64)'::`29'::_R2",
1308 "?_R2@?BN@???$_Fabs@N@std@@YANAEBV?$complex@N@1@PEAH@Z@4NB"},
1309/* 123 */ {"?vtordisp_thunk@std@@$4PPPPPPPM@3EAA_NXZ",
1310 "[thunk]:public: virtual bool __cdecl std::vtordisp_thunk`vtordisp{4294967292,4}' (void) __ptr64",
1311 "[thunk]:public: virtual bool __cdecl std::vtordisp_thunk`vtordisp{-4,4}' (void) __ptr64"},
1312/* 124 */ {"??_9CView@@$BBII@AE",
1313 "[thunk]: __thiscall CView::`vcall'{392,{flat}}' }'",
1314 "[thunk]: __thiscall CView::`vcall'{392,{flat}}' "},
1315/* 125 */ {"?_dispatch@_impl_Engine@SalomeApp@@$R4CE@BA@PPPPPPPM@7AE_NAAVomniCallHandle@@@Z",
1316 "[thunk]:public: virtual bool __thiscall SalomeApp::_impl_Engine::_dispatch`vtordispex{36,16,4294967292,8}' (class omniCallHandle &)",
1317 "?_dispatch@_impl_Engine@SalomeApp@@$R4CE@BA@PPPPPPPM@7AE_NAAVomniCallHandle@@@Z"},
1318/* 126 */ {"?_Doraise@bad_cast@std@@MEBAXXZ", "protected: virtual void __cdecl std::bad_cast::_Doraise(void)", NULL, 0x60},
1319/* 127 */ {"??Xstd@@YAAEAV?$complex@M@0@AEAV10@AEBV10@@Z", "class std::complex<float> & ptr64 cdecl std::operator*=(class std::complex<float> & ptr64,class std::complex<float> const & ptr64)", NULL, 1},
1320/* 128 */ {"??Xstd@@YAAEAV?$complex@M@0@AEAV10@AEBV10@@Z",
1321 "class std::complex<float> & std::operator*=(class std::complex<float> &,class std::complex<float> const &)",
1322 "??Xstd@@YAAEAV?$complex@M@0@AEAV10@AEBV10@@Z", 2},
1323/* 129 */ {"??$run@XVTask_Render_Preview@@@QtConcurrent@@YA?AV?$QFuture@X@@PEAVTask_Render_Preview@@P82@EAAXXZ@Z",
1324 "class QFuture<void> __cdecl QtConcurrent::run<void,class Task_Render_Preview>(class Task_Render_Preview * __ptr64,void (__cdecl Task_Render_Preview::*)(void) __ptr64)",
1325 "??$run@XVTask_Render_Preview@@@QtConcurrent@@YA?AV?$QFuture@X@@PEAVTask_Render_Preview@@P82@EAAXXZ@Z"},
1326/* 130 */ {"??_E?$TStrArray@$$BY0BAA@D$0BA@@@UAEPAXI@Z",
1327 "public: virtual void * __thiscall TStrArray<char [256],16>::`vector deleting destructor'(unsigned int)"},
1328 };
1329 int i, num_test = ARRAY_SIZE(test);
1330 char* name;
1331
1332 for (i = 0; i < num_test; i++)
1333 {
1334 name = p__unDName(0, test[i].in, 0, pmalloc, pfree, test[i].flags);
1335 ok(name != NULL, "%u: unDName failed\n", i);
1336 if (!name) continue;
1337 ok( !strcmp_space(test[i].out, name) ||
1339 "%u: Got name \"%s\"\n", i, name );
1340 ok( !strcmp_space(test[i].out, name) ||
1342 "%u: Expected \"%s\"\n", i, test[i].out );
1343 pfree(name);
1344 }
1345}
#define broken(x)
Definition: _sntprintf.h:21
#define ARRAY_SIZE(A)
Definition: main.h:33
GLuint in
Definition: glext.h:9616
GLbitfield flags
Definition: glext.h:7161
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
static int strcmp_space(const char *s1, const char *s2)
Definition: cpp.c:1126
static FILE * out
Definition: regtests2xml.c:44
#define test
Definition: rosglue.h:37

Referenced by START_TEST().

◆ test_demangle_datatype()

static void test_demangle_datatype ( void  )
static

Definition at line 1098 of file cpp.c.

1099{
1100 char * name;
1101 struct _demangle demangle[]={
1102/* { "BlaBla"," ?? ::Bla", FALSE}, */
1103 { "ABVVec4@ref2@dice@@","class dice::ref2::Vec4 const &",TRUE},
1104 { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0H@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,7>", TRUE},
1105 { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HO@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,126>",TRUE},
1106 { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HOA@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,2016>",TRUE},
1107 { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$0HOAA@@@", "class CDB_GEN_BIG_ENUM_FLAG<enum CDB_WYSIWYG_BITS_ENUM,32256>",TRUE},
1108 { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$01@@@", "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$01@@@", FALSE},
1109/* { "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$011@@@", "?AV?$CDB_GEN_BIG_ENUM_FLAG@W4CDB_WYSIWYG_BITS_ENUM@@$011@@@",FALSE}, */
1110 };
1111 int i, num_test = ARRAY_SIZE(demangle);
1112
1113 for (i = 0; i < num_test; i++)
1114 {
1115 name = p__unDName(0, demangle[i].mangled, 0, pmalloc, pfree, 0x2800);
1116 todo_wine_if (!demangle[i].test_in_wine)
1117 ok(name != NULL && !strcmp(name,demangle[i].result), "Got name \"%s\" for %d\n", name, i);
1118 if(name)
1119 pfree(name);
1120 }
1121}
GLuint64EXT * result
Definition: glext.h:11304
#define todo_wine_if(is_todo)
Definition: custom.c:76
LPCSTR mangled
Definition: cpp.c:1093
BOOL test_in_wine
Definition: cpp.c:1095

Referenced by START_TEST().

◆ test_exception()

static void test_exception ( void  )
static

Definition at line 349 of file cpp.c.

350{
351 static const char* e_name = "An exception name";
352 char* name;
353 exception e, e2, e3, *pe;
354
355 if (!poperator_new || !poperator_delete ||
356 !pexception_ctor || !pexception_copy_ctor || !pexception_default_ctor ||
357 !pexception_dtor || !pexception_opequals || !pexception_what ||
358 !pexception_vtable || !pexception_vector_dtor || !pexception_scalar_dtor)
359 return;
360
361 /* 'const char*&' ctor */
362 memset(&e, 0, sizeof(e));
363 call_func2(pexception_ctor, &e, &e_name);
364 ok(e.vtable != NULL, "Null exception vtable for e\n");
365 ok(e.name && e.name != e_name && !strcmp(e.name, "An exception name"), "Bad name '%s' for e\n", e.name);
366 ok(e.do_free == 1, "do_free set to %d for e\n", e.do_free);
367
368 /* Copy ctor */
369 memset(&e2, 0, sizeof(e2));
370 call_func2(pexception_copy_ctor, &e2, &e);
371 ok(e2.vtable != NULL, "Null exception vtable for e2\n");
372 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "An exception name"), "Bad exception name for e2\n");
373 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
374
375 /* Default ctor */
376 memset(&e3, 1, sizeof(e3));
377 call_func1(pexception_default_ctor, &e3);
378 ok(e3.vtable != NULL, "Null exception vtable for e3\n");
379 ok(e3.name == NULL, "Bad exception name for e3\n");
380 ok(e3.do_free == 0, "do_free set to %d for e3\n", e3.do_free);
381
382 ok(e.vtable == e2.vtable && e.vtable == e3.vtable, "exception vtables differ!\n");
383
384 /* Test calling the dtors */
385 call_func1(pexception_dtor, &e2);
386 call_func1(pexception_dtor, &e3);
387
388 /* Operator equals */
389 memset(&e2, 0, sizeof(e2));
390 call_func1(pexception_default_ctor, &e2);
391 pe = call_func2(pexception_opequals, &e2, &e);
392 ok(e2.vtable != NULL, "Null exception vtable for e2\n");
393 ok(e2.name && e2.name != e.name && !strcmp(e2.name, "An exception name"), "Bad exception name for e2\n");
394 ok(e2.do_free == 1, "do_free set to %d for e2\n", e2.do_free);
395 ok(pe == &e2, "opequals didn't return e2\n");
396
397 /* what() */
399 ok(e2.name == name, "Bad exception name from e2::what()\n");
400
401 /* vtable ptr */
402 ok(e2.vtable == pexception_vtable, "Bad vtable for e2\n");
403 call_func1(pexception_dtor, &e2);
404
405 /* new() */
406 pe = poperator_new(sizeof(exception));
407 ok(pe != NULL, "new() failed\n");
408 if (pe)
409 {
410 call_func2(pexception_ctor, pe, &e_name);
411 /* scalar dtor */
412 call_func2(pexception_scalar_dtor, pe, 0); /* Shouldn't delete pe */
413 pe->name = NULL;
414 pe->do_free = 0;
415 call_func2(pexception_scalar_dtor, pe, 1); /* Should delete pe */
416 }
417
418 pe = poperator_new(sizeof(exception));
419 ok(pe != NULL, "new() failed\n");
420 if (pe)
421 {
422 /* vector dtor, single element */
423 call_func2(pexception_ctor, pe, &e_name);
424 call_func2(pexception_vector_dtor, pe, 1); /* Should delete pe as single element*/
425 }
426
427 pe = poperator_new(sizeof(exception) * 4 + sizeof(size_t));
428 ok(pe != NULL, "new() failed\n");
429 if (pe)
430 {
431 /* vector dtor, multiple elements */
432 char name[] = "a constant";
433 *((size_t*)pe) = 3;
434 pe = (exception*)((size_t*)pe + 1);
435 call_func2(pexception_ctor, &pe[0], &e_name);
436 call_func2(pexception_ctor, &pe[1], &e_name);
437 call_func2(pexception_ctor, &pe[2], &e_name);
438 pe[3].name = name;
439 pe[3].do_free = 1; /* Crash if we try to free this */
440 call_func2(pexception_vector_dtor, pe, 3); /* Should delete all 3 and then pe block */
441 }
442
443 /* test our exported vtable is kosher */
444 pe = (void*)pexception_vtable; /* Use the exception struct to get vtable ptrs */
445 pexception_vector_dtor = (void*)pe->vtable;
446 pexception_what = (void*)pe->name;
447
449 ok(e.name == name, "Bad exception name from vtable e::what()\n");
450
452 {
453 /* Check the rtti */
454 type_info *ti = p__RTtypeid(&e);
455 ok (ti && !strcmp(ti->mangled, ".?AVexception@@"), "bad rtti for e\n");
456
457 if (ti)
458 {
459 /* Check the returned type_info has rtti too */
460 type_info *ti2 = p__RTtypeid(ti);
461 ok (ti2 != NULL && !strcmp(ti2->mangled, ".?AVtype_info@@"), "bad rtti for e's type_info\n");
462 }
463 }
464
465 call_func2(pexception_vector_dtor, &e, 0); /* Should delete e.name, but not e */
466}

Referenced by START_TEST().

◆ test_rtti()

static void test_rtti ( void  )
static

Definition at line 901 of file cpp.c.

902{
903 struct _object_locator
904 {
905 unsigned int signature;
906 int base_class_offset;
907 unsigned int flags;
908 DEFINE_RTTI_REF(type_info, type_descriptor);
909 DEFINE_RTTI_REF(struct _rtti_object_hierarchy, type_hierarchy);
910 DEFINE_RTTI_REF(void, object_locator);
911 } *obj_locator;
912
913 struct rtti_data
914 {
916
918 {
919 DEFINE_RTTI_REF(type_info, type_descriptor);
920 int num_base_classes;
921 struct {
922 int this_offset;
923 int vbase_descr;
924 int vbase_offset;
926 unsigned int attributes;
927 } base_descriptor[4];
928
929 struct _rtti_base_array {
930 DEFINE_RTTI_REF(struct _rtti_base_descriptor, bases[4]);
931 } base_array;
932
934 unsigned int signature;
935 unsigned int attributes;
936 int array_len;
937 DEFINE_RTTI_REF(struct _rtti_base_array, base_classes);
938 } object_hierarchy;
939
940 struct _object_locator object_locator;
941 } simple_class_rtti = {
942 { {NULL, NULL, "simple_class"} },
943 { {RTTI_REF(simple_class_rtti, type_info[0]), 0, {0, 0, 0}, 0} },
944 { {RTTI_REF(simple_class_rtti, base_descriptor[0])} },
945 {0, 0, 1, RTTI_REF(simple_class_rtti, base_array)},
946 {1, 0, 0, RTTI_REF(simple_class_rtti, type_info[0]), RTTI_REF(simple_class_rtti, object_hierarchy), RTTI_REF(simple_class_rtti, object_locator)}
947 }, child_class_rtti = {
948 { {NULL, NULL, "simple_class"}, {NULL, NULL, "child_class"} },
949 { {RTTI_REF(child_class_rtti, type_info[1]), 0, {4, -1, 0}, 0}, {RTTI_REF(child_class_rtti, type_info[0]), 0, {8, -1, 0}, 0} },
950 { {RTTI_REF(child_class_rtti, base_descriptor[0]), RTTI_REF(child_class_rtti, base_descriptor[1])} },
951 {0, 0, 2, RTTI_REF(child_class_rtti, base_array)},
952 {1, 0, 0, RTTI_REF(child_class_rtti, type_info[1]), RTTI_REF(child_class_rtti, object_hierarchy), RTTI_REF(child_class_rtti, object_locator)}
953 }, virtual_base_class_rtti = {
954 { {NULL, NULL, "simple_class"}, {NULL, NULL, "child_class"} },
955 { {RTTI_REF(virtual_base_class_rtti, type_info[1]), 0, {0x10, sizeof(void*), sizeof(int)}, 0}, {RTTI_REF(virtual_base_class_rtti, type_info[0]), 0, {8, -1, 0}, 0} },
956 { {RTTI_REF(virtual_base_class_rtti, base_descriptor[0]), RTTI_REF(virtual_base_class_rtti, base_descriptor[1])} },
957 {0, 0, 2, RTTI_REF(virtual_base_class_rtti, base_array)},
958 {1, 0, 0, RTTI_REF(virtual_base_class_rtti, type_info[1]), RTTI_REF(virtual_base_class_rtti, object_hierarchy), RTTI_REF(virtual_base_class_rtti, object_locator)}
959 };
960 static struct rtti_data simple_class_sig0_rtti, child_class_sig0_rtti;
961
962 void *simple_class_vtbl[2] = {&simple_class_rtti.object_locator};
963 void *simple_class = &simple_class_vtbl[1];
964 void *child_class_vtbl[2] = {&child_class_rtti.object_locator};
965 void *child_class = &child_class_vtbl[1];
966 void *simple_class_sig0_vtbl[2] = {&simple_class_sig0_rtti.object_locator};
967 void *simple_class_sig0 = &simple_class_sig0_vtbl[1];
968 void *child_class_sig0_vtbl[2] = {&child_class_sig0_rtti.object_locator};
969 void *child_class_sig0 = &child_class_sig0_vtbl[1];
970 void *virtual_base_class_vtbl[2] = {&virtual_base_class_rtti.object_locator};
971 int virtual_base_class_vbtbl[2] = {0, 0x100};
972 struct {
973 void *virtual_base[2];
974 char data[0x110-sizeof(void*)];
975 void *vbthis;
976 } virtual_base_class = { {&virtual_base_class_vtbl[1], virtual_base_class_vbtbl} };
977
978 static const char* e_name = "name";
979 type_info *ti,*bti;
980 exception e,b;
981 void *casted;
982 BOOL old_signature;
983#ifdef __x86_64__
984 char *base = (char*)GetModuleHandleW(NULL);
985#endif
986
987 if (bAncientVersion ||
988 !p__RTCastToVoid || !p__RTtypeid || !pexception_ctor || !pbad_typeid_ctor
989 || !p__RTDynamicCast || !pexception_dtor || !pbad_typeid_dtor)
990 return;
991
992 call_func2(pexception_ctor, &e, &e_name);
993 call_func2(pbad_typeid_ctor, &b, e_name);
994
995 obj_locator = get_obj_locator(&e);
996 if(obj_locator->signature!=1 && sizeof(void*)>sizeof(int))
997 old_signature = TRUE;
998 else
999 old_signature = FALSE;
1000
1001 /* dynamic_cast to void* */
1002 casted = p__RTCastToVoid(&e);
1003 ok (casted == (void*)&e, "failed cast to void\n");
1004
1005 /* dynamic_cast up */
1006 ti = p__RTtypeid(&e);
1007 bti = p__RTtypeid(&b);
1008
1009 casted = p__RTDynamicCast(&b, 0, NULL, ti, 0);
1010 if (casted)
1011 {
1012 /* New versions do not allow this conversion due to compiler changes */
1013 ok (casted == (void*)&b, "failed cast from bad_typeid to exception\n");
1014 }
1015
1016 /* dynamic_cast down */
1017 casted = p__RTDynamicCast(&e, 0, NULL, bti, 0);
1018 ok (casted == NULL, "Cast succeeded\n");
1019
1020 call_func1(pexception_dtor, &e);
1021 call_func1(pbad_typeid_dtor, &b);
1022
1023 simple_class_sig0_rtti = simple_class_rtti;
1024 simple_class_sig0_rtti.object_locator.signature = 0;
1025 simple_class_sig0_rtti.base_descriptor[0].type_descriptor = RTTI_REF_SIG0(simple_class_sig0_rtti, type_info[0], base);
1026 simple_class_sig0_rtti.base_array.bases[0] = RTTI_REF_SIG0(simple_class_sig0_rtti, base_descriptor[0], base);
1027 simple_class_sig0_rtti.object_hierarchy.base_classes = RTTI_REF_SIG0(simple_class_sig0_rtti, base_array, base);
1028 simple_class_sig0_rtti.object_locator.type_descriptor = RTTI_REF_SIG0(simple_class_sig0_rtti, type_info[0], base);
1029 simple_class_sig0_rtti.object_locator.type_hierarchy = RTTI_REF_SIG0(simple_class_sig0_rtti, object_hierarchy, base);
1030
1031 child_class_sig0_rtti = child_class_rtti;
1032 child_class_sig0_rtti.object_locator.signature = 0;
1033 child_class_sig0_rtti.base_descriptor[0].type_descriptor = RTTI_REF_SIG0(child_class_sig0_rtti, type_info[1], base);
1034 child_class_sig0_rtti.base_descriptor[1].type_descriptor = RTTI_REF_SIG0(child_class_sig0_rtti, type_info[0], base);
1035 child_class_sig0_rtti.base_array.bases[0] = RTTI_REF_SIG0(child_class_sig0_rtti, base_descriptor[0], base);
1036 child_class_sig0_rtti.base_array.bases[1] = RTTI_REF_SIG0(child_class_sig0_rtti, base_descriptor[1], base);
1037 child_class_sig0_rtti.object_hierarchy.base_classes = RTTI_REF_SIG0(child_class_sig0_rtti, base_array, base);
1038 child_class_sig0_rtti.object_locator.type_descriptor = RTTI_REF_SIG0(child_class_sig0_rtti, type_info[1], base);
1039 child_class_sig0_rtti.object_locator.type_hierarchy = RTTI_REF_SIG0(child_class_sig0_rtti, object_hierarchy, base);
1040
1041 ti = p__RTtypeid(&simple_class_sig0);
1042 ok (ti && !strcmp(ti->mangled, "simple_class"), "incorrect rtti data\n");
1043
1044 casted = p__RTCastToVoid(&simple_class_sig0);
1045 ok (casted == (void*)&simple_class_sig0, "failed cast to void\n");
1046
1047 ti = p__RTtypeid(&child_class_sig0);
1048 ok (ti && !strcmp(ti->mangled, "child_class"), "incorrect rtti data\n");
1049
1050 casted = p__RTCastToVoid(&child_class_sig0);
1051 ok (casted == (void*)&child_class_sig0, "failed cast to void\n");
1052
1053 casted = p__RTDynamicCast(&child_class_sig0, 0, NULL, simple_class_sig0_rtti.type_info, 0);
1054 if(casted)
1055 {
1056 ok (casted == (char*)&child_class_sig0+8, "failed cast to simple_class (%p %p)\n", casted, &child_class_sig0);
1057 }
1058
1059 casted = p__RTDynamicCast(&child_class_sig0, 0, &child_class_sig0_rtti.type_info[0], &child_class_sig0_rtti.type_info[1], 0);
1060 ok(casted == (char*)&child_class_sig0+4, "failed cast to child class (%p %p)\n", casted, &child_class_sig0);
1061
1062 if(old_signature) {
1063 skip("signature==1 is not supported\n");
1064 return;
1065 }
1066
1067 ti = p__RTtypeid(&simple_class);
1068 ok (ti && !strcmp(ti->mangled, "simple_class"), "incorrect rtti data\n");
1069
1070 casted = p__RTCastToVoid(&simple_class);
1071 ok (casted == (void*)&simple_class, "failed cast to void\n");
1072
1073 ti = p__RTtypeid(&child_class);
1074 ok (ti && !strcmp(ti->mangled, "child_class"), "incorrect rtti data\n");
1075
1076 casted = p__RTCastToVoid(&child_class);
1077 ok (casted == (void*)&child_class, "failed cast to void\n");
1078
1079 casted = p__RTDynamicCast(&child_class, 0, NULL, simple_class_rtti.type_info, 0);
1080 if(casted)
1081 {
1082 ok (casted == (char*)&child_class+8, "failed cast to simple_class (%p %p)\n", casted, &child_class);
1083 }
1084
1085 casted = p__RTDynamicCast(&child_class, 0, &child_class_rtti.type_info[0], &child_class_rtti.type_info[1], 0);
1086 ok(casted == (char*)&child_class+4, "failed cast to child class (%p %p)\n", casted, &child_class);
1087
1088 casted = p__RTDynamicCast(&virtual_base_class, 0, &virtual_base_class_rtti.type_info[0], &virtual_base_class_rtti.type_info[1], 0);
1089 ok(casted == &virtual_base_class.vbthis, "failed cast to child class (%p %p)\n", casted, &virtual_base_class);
1090}
#define skip(...)
Definition: atltest.h:64
HMODULE WINAPI GetModuleHandleW(LPCWSTR lpModuleName)
Definition: loader.c:838
unsigned int BOOL
Definition: ntddk_ex.h:94
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
GLboolean GLboolean GLboolean b
Definition: glext.h:6204
#define b
Definition: ke_i.h:79
#define RTTI_REF_SIG0(instance, name, base)
Definition: cpp.c:894
static void * get_obj_locator(void *cppobj)
Definition: cpp.c:885
#define DEFINE_RTTI_REF(type, name)
Definition: cpp.c:892
#define RTTI_REF(instance, name)
Definition: cpp.c:893

Referenced by START_TEST().

◆ test_type_info()

static void test_type_info ( void  )
static

Definition at line 813 of file cpp.c.

814{
815 static type_info t1 = { NULL, NULL,{'.','?','A','V','t','e','s','t','1','@','@',0,0,0,0,0 } };
816 static type_info t1_1 = { NULL, NULL,{'?','?','A','V','t','e','s','t','1','@','@',0,0,0,0,0 } };
817 static type_info t2 = { NULL, NULL, {'.','?','A','V','t','e','s','t','2','@','@',0,0,0,0,0 } };
818 char* name;
819 int res;
820
821 if (!pmalloc || !pfree || !ptype_info_dtor || !ptype_info_raw_name ||
822 !ptype_info_name || !ptype_info_before ||
823 !ptype_info_opequals_equals || !ptype_info_opnot_equals)
824 return;
825
826 /* Test calling the dtors */
827 call_func1(ptype_info_dtor, &t1); /* No effect, since name is NULL */
828 t1.name = pmalloc(64);
829 strcpy(t1.name, "foo");
830 call_func1(ptype_info_dtor, &t1); /* Frees t1.name using 'free' */
831
832 /* raw_name */
833 t1.name = NULL;
835
836 /* FIXME: This fails on native; it shouldn't though - native bug?
837 * ok(name && !strcmp(name, t1.mangled), "bad raw_name '%s' for t1 (expected '%s')\n", name, t1.mangled);
838 */
839 ok(t1.name == NULL, "raw_name() set name for t1\n");
840
841 /* name */
842 t1.name = NULL;
844 ok(name && t1.name && !strcmp(name, t1.name), "bad name '%s' for t1\n", name);
845
846 ok(t1.name && !strcmp(t1.name, "class test1"), "demangled to '%s' for t1\n", t1.name);
847 call_func1(ptype_info_dtor, &t1);
848
849 /* before */
850 t1.name = NULL;
851 res = (int)call_func2(ptype_info_before, &t1, &t1);
852 ok(res == 0, "expected 0, got %d\n", res);
853 res = (int)call_func2(ptype_info_before, &t2, &t1);
854 ok(res == 0, "expected 0, got %d\n", res);
855 res = (int)call_func2(ptype_info_before, &t1, &t2);
856 ok(res == 1, "expected 1, got %d\n", res);
857 /* Doesn't check first char */
858 res = (int)call_func2(ptype_info_before, &t1, &t1_1);
859 ok(res == 0, "expected 0, got %d\n", res);
860
861 /* opequals_equals */
862 t1.name = NULL;
863 res = (int)call_func2(ptype_info_opequals_equals, &t1, &t1);
864 ok(res == 1, "expected 1, got %d\n", res);
865 res = (int)call_func2(ptype_info_opequals_equals, &t1, &t2);
866 ok(res == 0, "expected 0, got %d\n", res);
867 res = (int)call_func2(ptype_info_opequals_equals, &t2, &t1);
868 ok(res == 0, "expected 0, got %d\n", res);
869
870 /* opnot_equals */
871 t1.name = NULL;
872 res = (int)call_func2(ptype_info_opnot_equals, &t1, &t1);
873 ok(res == 0, "expected 0, got %d\n", res);
874 res = (int)call_func2(ptype_info_opnot_equals, &t1, &t2);
875 ok(res == 1, "expected 1, got %d\n", res);
876 res = (int)call_func2(ptype_info_opnot_equals, &t2, &t1);
877 ok(res == 1, "expected 1, got %d\n", res);
878}
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
GLuint res
Definition: glext.h:9613
static unsigned int
Definition: cpp.c:62
char * name
Definition: cpp.c:35

Referenced by START_TEST().

◆ void() [1/2]

static void ( __cdecl poperator_delete)
static

◆ void() [2/2]

static void ( __thiscall pexception_ctor)
static

Variable Documentation

◆ bAncientVersion

void* bAncientVersion
static

◆ hMsvcrt

HMODULE hMsvcrt
static

Definition at line 47 of file cpp.c.

Referenced by InitFunctionPtrs(), and und_name().

◆ int

unsigned int

Definition at line 62 of file cpp.c.

Referenced by test_type_info().

◆ LPCSTR

Definition at line 66 of file cpp.c.

◆ p__non_rtti_object_vtable

vtable_ptr* p__non_rtti_object_vtable
static

Definition at line 94 of file cpp.c.

Referenced by InitFunctionPtrs(), and test___non_rtti_object().

◆ pbad_cast_vtable

vtable_ptr* pbad_cast_vtable
static

Definition at line 84 of file cpp.c.

Referenced by InitFunctionPtrs(), and test_bad_cast().

◆ pbad_typeid_vtable

vtable_ptr* pbad_typeid_vtable
static

Definition at line 72 of file cpp.c.

Referenced by InitFunctionPtrs(), and test_bad_typeid().

◆ pexception_vtable

vtable_ptr* pexception_vtable
static