aboutsummaryrefslogtreecommitdiff
path: root/cores/arduino/new
diff options
context:
space:
mode:
authorDavid Madison <dmadison@users.noreply.github.com>2022-02-22 02:11:13 -0500
committerDavid Madison <dmadison@users.noreply.github.com>2022-02-22 02:11:13 -0500
commit65f1968b755855315b931b4b8fa45747576d6536 (patch)
tree77f4cf88950d90182f57c73f69027b4d39375d64 /cores/arduino/new
parentf47a97522dc28c16c432422e3085035de69cfaf6 (diff)
parenta1c76c0651192587f495d88b419553edd12a4881 (diff)
Merge tag '1.8.4' into upstream-1.8.4
Diffstat (limited to 'cores/arduino/new')
-rw-r--r--cores/arduino/new67
1 files changed, 64 insertions, 3 deletions
diff --git a/cores/arduino/new b/cores/arduino/new
index aa8ecb5..8cf2103 100644
--- a/cores/arduino/new
+++ b/cores/arduino/new
@@ -1,5 +1,66 @@
/*
-this header is for compatibility with standard c++ header names
-so that #include<new> works as expected
+ Copyright (c) 2014 Arduino. All right reserved.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ See the GNU Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
-#include "new.h"
+
+#ifndef NEW_H
+#define NEW_H
+
+#include <stdlib.h>
+
+namespace std {
+ struct nothrow_t {};
+ extern const nothrow_t nothrow;
+
+ // These are not actually implemented, to prevent overhead and
+ // complexity. They are still declared to allow implementing
+ // them in user code if needed.
+ typedef void (*new_handler)();
+ new_handler set_new_handler(new_handler new_p) noexcept;
+ new_handler get_new_handler() noexcept;
+
+ // This is normally declared in various headers that we do not have
+ // available, so just define it here. We could also use ::size_t
+ // below, but then anyone including <new> can no longer assume
+ // std::size_t is available.
+ using size_t = ::size_t;
+} // namespace std
+
+[[gnu::weak]] void * operator new(std::size_t size);
+[[gnu::weak]] void * operator new[](std::size_t size);
+
+[[gnu::weak]] void * operator new(std::size_t size, const std::nothrow_t tag) noexcept;
+[[gnu::weak]] void * operator new[](std::size_t size, const std::nothrow_t& tag) noexcept;
+
+void * operator new(std::size_t size, void *place) noexcept;
+void * operator new[](std::size_t size, void *place) noexcept;
+
+[[gnu::weak]] void operator delete(void * ptr) noexcept;
+[[gnu::weak]] void operator delete[](void * ptr) noexcept;
+
+#if __cplusplus >= 201402L
+[[gnu::weak]] void operator delete(void* ptr, std::size_t size) noexcept;
+[[gnu::weak]] void operator delete[](void * ptr, std::size_t size) noexcept;
+#endif // __cplusplus >= 201402L
+
+[[gnu::weak]] void operator delete(void* ptr, const std::nothrow_t& tag) noexcept;
+[[gnu::weak]] void operator delete[](void* ptr, const std::nothrow_t& tag) noexcept;
+
+void operator delete(void* ptr, void* place) noexcept;
+void operator delete[](void* ptr, void* place) noexcept;
+
+#endif
+