Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// exception standard header for Microsoft #pragma once #ifndef _EXCEPTION_ #define _EXCEPTION_ #include <xstddef>
#pragma pack(push,8) #pragma warning(push,3) _STD_BEGIN
#define _USE_EX using::exception;
#if _HAS_EXCEPTIONS _STD_END
#include <eh.h>
#if !defined(_WIN32) #error ERROR: Only Win32 targets supported! #endif
#ifndef _CRTIMP #ifdef _DLL #define _CRTIMP __declspec(dllimport) #else /* ndef _DLL */ #define _CRTIMP #endif /* _DLL */ #endif /* _CRTIMP */
typedef const char *__exString;
class _CRTIMP exception { // base of all library exceptions public: exception(); exception(const char *const&); exception(const exception&); exception& operator=(const exception&); virtual ~exception(); virtual const char *what() const;
private: const char *_m_what; int _m_doFree; };
_STD_BEGIN
_USE_EX typedef void (*_Prhand)(const exception&); extern _CRTIMP2 _Prhand _Raise_handler; _CRTIMP2 bool __cdecl uncaught_exception();
using ::unexpected_handler; using ::set_unexpected; using ::unexpected; using ::terminate_handler; using ::set_terminate; using ::terminate;
#else /* _HAS_EXCEPTIONS */ // CLASS exception class exception; typedef void (*_Prhand)(const exception&);
extern _CRTIMP2 _Prhand _Raise_handler; // pointer to raise handler
_CRTIMP2 void __cdecl _Throw(const exception&); // throw the exception
class exception { // base of all library exceptions public: static _Prhand _Set_raise_handler(_Prhand _Pnew) { // register a handler for _Raise calls const _Prhand _Pold = _Raise_handler; _Raise_handler = _Pnew; return (_Pold); }
explicit exception(const char *_Message = _MESG("unknown")) _THROW0() : _Ptr(_Message) { // construct from message string }
exception(const exception& _Right) _THROW0() : _Ptr(_Right._Ptr) { // construct by copying _Right }
exception& operator=(const exception& _Right) _THROW0() { // assign _Right _Ptr = _Right._Ptr; return (*this); }
virtual ~exception() { // destroy the object }
virtual const char *what() const _THROW0() { // return pointer to message string return (_Ptr); }
void _Raise() const { // raise the exception if (_Raise_handler != 0) (*_Raise_handler)(*this); // call raise handler if present
_Doraise(); // call the protected virtual _RAISE(*this); // raise this exception }
protected: virtual void _Doraise() const { // perform class-specific exception handling }
const char *_Ptr; // the message pointer };
// TYPES typedef void (__cdecl *terminate_handler)(); typedef void (__cdecl *unexpected_handler)();
// DUMMY FUNCTION DECLARATIONS inline terminate_handler __cdecl set_terminate(terminate_handler) _THROW0() { // register a terminate handler return 0; }
inline unexpected_handler __cdecl set_unexpected(unexpected_handler) _THROW0() { // register an unexpected handler return 0; }
inline void __cdecl terminate() { // handle exception termination }
inline void __cdecl unexpected() { // handle unexpected exception }
_CRTIMP2 bool __cdecl uncaught_exception(); // handle uncaught exception #endif /* _HAS_EXCEPTIONS */
// CLASS bad_exception class bad_exception : public exception { // base of all bad exceptions public: bad_exception(const char *_Message = _MESG("bad exception")) _THROW0() : exception(_Message) { // construct from message string }
virtual ~bad_exception() _THROW0() { // destroy the object }
#if !_HAS_EXCEPTIONS protected: virtual void _Doraise() const { // raise this exception _RAISE(*this); } #endif /* _HAS_EXCEPTIONS */ }; _STD_END #pragma warning(pop) #pragma pack(pop)
#endif /* _EXCEPTION_ */
/* * Copyright (c) 1992-2001 by P.J. Plauger. ALL RIGHTS RESERVED. * Consult your license regarding permissions and restrictions. V3.10:0009 */
|