msvcp90: Added _String_base::Xlen implementation.
This commit is contained in:
parent
8f78375d83
commit
1ba4fff989
@ -100,6 +100,7 @@ void CDECL _CxxThrowException(exception*,const cxx_exception_type*);
|
|||||||
|
|
||||||
extern const vtable_ptr MSVCP_bad_alloc_vtable;
|
extern const vtable_ptr MSVCP_bad_alloc_vtable;
|
||||||
extern const vtable_ptr MSVCP_logic_error_vtable;
|
extern const vtable_ptr MSVCP_logic_error_vtable;
|
||||||
|
extern const vtable_ptr MSVCP_length_error_vtable;
|
||||||
|
|
||||||
/* exception class data */
|
/* exception class data */
|
||||||
static type_info exception_type_info = {
|
static type_info exception_type_info = {
|
||||||
@ -427,11 +428,103 @@ static const cxx_exception_type logic_error_cxx_type = {
|
|||||||
&logic_error_cxx_type_table
|
&logic_error_cxx_type_table
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* length_error class data */
|
||||||
|
typedef logic_error length_error;
|
||||||
|
|
||||||
|
DEFINE_THISCALL_WRAPPER(MSVCP_length_error_ctor, 8)
|
||||||
|
length_error* __stdcall MSVCP_length_error_ctor(
|
||||||
|
length_error *this, const char **name)
|
||||||
|
{
|
||||||
|
TRACE("%p %s\n", this, *name);
|
||||||
|
MSVCP_logic_error_ctor(this, name);
|
||||||
|
this->e.vtable = &MSVCP_length_error_vtable;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_THISCALL_WRAPPER(MSVCP_length_error_copy_ctor, 8)
|
||||||
|
length_error* __stdcall MSVCP_length_error_copy_ctor(
|
||||||
|
length_error *this, length_error *rhs)
|
||||||
|
{
|
||||||
|
TRACE("%p %p\n", this, rhs);
|
||||||
|
MSVCP_logic_error_copy_ctor(this, rhs);
|
||||||
|
this->e.vtable = &MSVCP_length_error_vtable;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
DEFINE_THISCALL_WRAPPER(MSVCP_length_error_vector_dtor, 8)
|
||||||
|
void* __stdcall MSVCP_length_error_vector_dtor(
|
||||||
|
length_error *this, unsigned int flags)
|
||||||
|
{
|
||||||
|
TRACE("%p %x\n", this, flags);
|
||||||
|
return MSVCP_logic_error_vector_dtor(this, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
static const type_info length_error_type_info = {
|
||||||
|
&MSVCP_length_error_vtable,
|
||||||
|
NULL,
|
||||||
|
".?AVlength_error@std@@"
|
||||||
|
};
|
||||||
|
|
||||||
|
static const rtti_base_descriptor length_error_rtti_base_descriptor = {
|
||||||
|
&length_error_type_info,
|
||||||
|
2,
|
||||||
|
{ 0, -1, 0 },
|
||||||
|
64
|
||||||
|
};
|
||||||
|
|
||||||
|
static const rtti_base_array length_error_rtti_base_array = {
|
||||||
|
{
|
||||||
|
&length_error_rtti_base_descriptor,
|
||||||
|
&logic_error_rtti_base_descriptor,
|
||||||
|
&exception_rtti_base_descriptor
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const rtti_object_hierarchy length_error_type_hierarchy = {
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
3,
|
||||||
|
&length_error_rtti_base_array
|
||||||
|
};
|
||||||
|
|
||||||
|
const rtti_object_locator length_error_rtti = {
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
&length_error_type_info,
|
||||||
|
&length_error_type_hierarchy
|
||||||
|
};
|
||||||
|
|
||||||
|
static const cxx_type_info length_error_cxx_type_info = {
|
||||||
|
0,
|
||||||
|
&length_error_type_info,
|
||||||
|
{ 0, -1, 0 },
|
||||||
|
sizeof(length_error),
|
||||||
|
(cxx_copy_ctor)THISCALL(MSVCP_length_error_copy_ctor)
|
||||||
|
};
|
||||||
|
|
||||||
|
static const cxx_type_info_table length_error_cxx_type_table = {
|
||||||
|
3,
|
||||||
|
{
|
||||||
|
&length_error_cxx_type_info,
|
||||||
|
&logic_error_cxx_type_info,
|
||||||
|
&exception_cxx_type_info
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static const cxx_exception_type length_error_cxx_type = {
|
||||||
|
0,
|
||||||
|
(cxx_copy_ctor)THISCALL(MSVCP_logic_error_dtor),
|
||||||
|
NULL,
|
||||||
|
&length_error_cxx_type_table
|
||||||
|
};
|
||||||
|
|
||||||
#ifndef __GNUC__
|
#ifndef __GNUC__
|
||||||
void __asm_dummy_vtables(void) {
|
void __asm_dummy_vtables(void) {
|
||||||
#endif
|
#endif
|
||||||
__ASM_EXCEPTION_VTABLE(bad_alloc)
|
__ASM_EXCEPTION_VTABLE(bad_alloc)
|
||||||
__ASM_EXCEPTION_STRING_VTABLE(logic_error)
|
__ASM_EXCEPTION_STRING_VTABLE(logic_error)
|
||||||
|
__ASM_EXCEPTION_STRING_VTABLE(length_error)
|
||||||
#ifndef __GNUC__
|
#ifndef __GNUC__
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -460,5 +553,11 @@ void throw_exception(exception_type et, const char *str)
|
|||||||
_CxxThrowException((exception*)&e, &logic_error_cxx_type);
|
_CxxThrowException((exception*)&e, &logic_error_cxx_type);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
case EXCEPTION_LENGTH_ERROR: {
|
||||||
|
length_error e;
|
||||||
|
MSVCP_length_error_ctor(&e, &addr);
|
||||||
|
_CxxThrowException((exception*)&e, &length_error_cxx_type);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,8 @@ typedef struct __exception
|
|||||||
typedef enum __exception_type {
|
typedef enum __exception_type {
|
||||||
EXCEPTION,
|
EXCEPTION,
|
||||||
EXCEPTION_BAD_ALLOC,
|
EXCEPTION_BAD_ALLOC,
|
||||||
EXCEPTION_LOGIC_ERROR
|
EXCEPTION_LOGIC_ERROR,
|
||||||
|
EXCEPTION_LENGTH_ERROR
|
||||||
} exception_type;
|
} exception_type;
|
||||||
void throw_exception(exception_type, const char *);
|
void throw_exception(exception_type, const char *);
|
||||||
void set_exception_vtable(void);
|
void set_exception_vtable(void);
|
||||||
|
@ -2878,7 +2878,7 @@
|
|||||||
@ stub -arch=win32 ?_Xinvalid@tr1@std@@YAXPBD@Z
|
@ stub -arch=win32 ?_Xinvalid@tr1@std@@YAXPBD@Z
|
||||||
@ stub -arch=win64 ?_Xinvalid@tr1@std@@YAXPEBD@Z
|
@ stub -arch=win64 ?_Xinvalid@tr1@std@@YAXPEBD@Z
|
||||||
@ stub ?_Xinvarg@_String_base@std@@SAXXZ
|
@ stub ?_Xinvarg@_String_base@std@@SAXXZ
|
||||||
@ stub ?_Xlen@_String_base@std@@SAXXZ
|
@ cdecl ?_Xlen@_String_base@std@@SAXXZ() MSVCP__String_base_Xlen
|
||||||
@ stub ?_Xmem@tr1@std@@YAXXZ
|
@ stub ?_Xmem@tr1@std@@YAXXZ
|
||||||
@ stub ?_Xoutrange@tr1@std@@YAXXZ
|
@ stub ?_Xoutrange@tr1@std@@YAXXZ
|
||||||
@ stub ?_Xran@_String_base@std@@SAXXZ
|
@ stub ?_Xran@_String_base@std@@SAXXZ
|
||||||
|
@ -466,6 +466,17 @@ unsigned short CDECL MSVCP_char_traits_short_not_eof(const unsigned short *in)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* _String_base */
|
||||||
|
/* ?_Xlen@_String_base@std@@SAXXZ */
|
||||||
|
void CDECL MSVCP__String_base_Xlen(void)
|
||||||
|
{
|
||||||
|
static const char msg[] = "string too long";
|
||||||
|
|
||||||
|
TRACE("\n");
|
||||||
|
throw_exception(EXCEPTION_LENGTH_ERROR, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* basic_string<char, char_traits<char>, allocator<char>> */
|
/* basic_string<char, char_traits<char>, allocator<char>> */
|
||||||
/* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB */
|
/* ?npos@?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@2IB */
|
||||||
const size_t MSVCP_basic_string_char_npos = -1;
|
const size_t MSVCP_basic_string_char_npos = -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user