aboutsummaryrefslogtreecommitdiff
path: root/include/new
diff options
context:
space:
mode:
Diffstat (limited to 'include/new')
-rw-r--r--include/new117
1 files changed, 117 insertions, 0 deletions
diff --git a/include/new b/include/new
new file mode 100644
index 000000000000..5bcbad0cd046
--- /dev/null
+++ b/include/new
@@ -0,0 +1,117 @@
+// -*- C++ -*-
+//===----------------------------- new ------------------------------------===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef _LIBCPP_NEW
+#define _LIBCPP_NEW
+
+/*
+ new synopsis
+
+namespace std
+{
+
+class bad_alloc
+ : public exception
+{
+public:
+ bad_alloc() noexcept;
+ bad_alloc(const bad_alloc&) noexcept;
+ bad_alloc& operator=(const bad_alloc&) noexcept;
+ virtual const char* what() const noexcept;
+};
+
+struct nothrow_t {};
+extern const nothrow_t nothrow;
+typedef void (*new_handler)();
+new_handler set_new_handler(new_handler new_p) noexcept;
+new_handler get_new_handler() noexcept;
+
+} // std
+
+void* operator new(std::size_t size); // replaceable
+void* operator new(std::size_t size, const std::nothrow_t&) noexcept; // replaceable
+void operator delete(void* ptr) noexcept; // replaceable
+void operator delete(void* ptr, const std::nothrow_t&) noexcept; // replaceable
+
+void* operator new[](std::size_t size); // replaceable
+void* operator new[](std::size_t size, const std::nothrow_t&) noexcept; // replaceable
+void operator delete[](void* ptr) noexcept; // replaceable
+void operator delete[](void* ptr, const std::nothrow_t&) noexcept; // replaceable
+
+void* operator new (std::size_t size, void* ptr) noexcept;
+void* operator new[](std::size_t size, void* ptr) noexcept;
+void operator delete (void* ptr, void*) noexcept;
+void operator delete[](void* ptr, void*) noexcept;
+
+*/
+
+#include <__config>
+#include <exception>
+#include <cstddef>
+
+#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
+#pragma GCC system_header
+#endif
+
+namespace std // purposefully not using versioning namespace
+{
+
+class _LIBCPP_EXCEPTION_ABI bad_alloc
+ : public exception
+{
+public:
+ bad_alloc() _NOEXCEPT;
+ virtual ~bad_alloc() _NOEXCEPT;
+ virtual const char* what() const _NOEXCEPT;
+};
+
+class _LIBCPP_EXCEPTION_ABI bad_array_new_length
+ : public bad_alloc
+{
+public:
+ bad_array_new_length() _NOEXCEPT;
+ virtual ~bad_array_new_length() _NOEXCEPT;
+ virtual const char* what() const _NOEXCEPT;
+};
+
+void __throw_bad_alloc(); // not in C++ spec
+
+struct _LIBCPP_VISIBLE nothrow_t {};
+extern _LIBCPP_VISIBLE const nothrow_t nothrow;
+typedef void (*new_handler)();
+_LIBCPP_VISIBLE new_handler set_new_handler(new_handler) _NOEXCEPT;
+_LIBCPP_VISIBLE new_handler get_new_handler() _NOEXCEPT;
+
+} // std
+
+_LIBCPP_VISIBLE void* operator new(std::size_t __sz)
+#if !__has_feature(cxx_noexcept)
+ throw(std::bad_alloc)
+#endif
+;
+_LIBCPP_VISIBLE void* operator new(std::size_t __sz, const std::nothrow_t&) _NOEXCEPT;
+_LIBCPP_VISIBLE void operator delete(void* __p) _NOEXCEPT;
+_LIBCPP_VISIBLE void operator delete(void* __p, const std::nothrow_t&) _NOEXCEPT;
+
+_LIBCPP_VISIBLE void* operator new[](std::size_t __sz)
+#if !__has_feature(cxx_noexcept)
+ throw(std::bad_alloc)
+#endif
+;
+_LIBCPP_VISIBLE void* operator new[](std::size_t __sz, const std::nothrow_t&) _NOEXCEPT;
+_LIBCPP_VISIBLE void operator delete[](void* __p) _NOEXCEPT;
+_LIBCPP_VISIBLE void operator delete[](void* __p, const std::nothrow_t&) _NOEXCEPT;
+
+_LIBCPP_INLINE_VISIBILITY inline void* operator new (std::size_t, void* __p) _NOEXCEPT {return __p;}
+_LIBCPP_INLINE_VISIBILITY inline void* operator new[](std::size_t, void* __p) _NOEXCEPT {return __p;}
+_LIBCPP_INLINE_VISIBILITY inline void operator delete (void*, void*) _NOEXCEPT {}
+_LIBCPP_INLINE_VISIBILITY inline void operator delete[](void*, void*) _NOEXCEPT {}
+
+#endif // _LIBCPP_NEW