diff options
Diffstat (limited to 'gcc/cp/inc/new')
-rwxr-xr-x | gcc/cp/inc/new | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/gcc/cp/inc/new b/gcc/cp/inc/new new file mode 100755 index 0000000..c19205b --- /dev/null +++ b/gcc/cp/inc/new @@ -0,0 +1,60 @@ +/* CYGNUS LOCAL Embedded C++ whole file */ +// The -*- C++ -*- dynamic memory management header. +// Copyright (C) 1994, 96-97, 1998 Free Software Foundation + +#ifndef __NEW__ +#define __NEW__ + +#pragma interface "new" +#include <stddef.h> + +#ifndef __EMBEDDED_CXX__ +// Exception Handling is forbidden in Embedded C++. +#include <exception> +#define __GCC_THROW(what) throw (what) +#define __GCC_nothing +#else +#define __GCC_THROW(what) +#endif + +extern "C++" { + +namespace std { + +#ifndef __EMBEDDED_CXX__ + class bad_alloc : public exception { + public: + virtual const char* what() const throw() { return "bad_alloc"; } + }; +#endif + + struct nothrow_t {}; + extern const nothrow_t nothrow; + + typedef void (*new_handler)(); + new_handler set_new_handler (new_handler); + +} // namespace std + +// replaceable signatures +void *operator new (size_t) __GCC_THROW (std::bad_alloc); +void *operator new[] (size_t) __GCC_THROW (std::bad_alloc); +void operator delete (void *) __GCC_THROW(__GCC_nothing); +void operator delete[] (void *) __GCC_THROW(__GCC_nothing); +void *operator new (size_t, const nothrow_t&) __GCC_THROW(__GCC_nothing); +void *operator new[] (size_t, const nothrow_t&) __GCC_THROW(__GCC_nothing); +void operator delete (void *, const nothrow_t&) __GCC_THROW(__GCC_nothing); +void operator delete[] (void *, const nothrow_t&) __GCC_THROW(__GCC_nothing); + +// default placement versions of operator new +inline void *operator new(size_t, void *place) __GCC_THROW(__GCC_nothing) { + return place; +} +inline void *operator new[](size_t, void *place) __GCC_THROW(__GCC_nothing) { + return place; +} + +} // extern "C++" + +#endif +/* END CYGNUS LOCAL */ |