1. 17 Sep, 2020 6 commits
    • Matthijs Kooijman's avatar
      Make zero-sized new standards-compliant · 6e0fb1ee
      Matthijs Kooijman authored
      This fixes part of #287.
      6e0fb1ee
    • Matthijs Kooijman's avatar
      Call std::terminate on pure or deleted virtual functions · 66d06b03
      Matthijs Kooijman authored
      These are special functions that are presumably put into vtables for
      deleted or pure virtual functions. Previously, this would call `abort()`
      directly, but calling `std::terminate()` achieves the same effect, but
      allows user code to change the behavior (e.g. to print to serial, blink
      leds or whatever makes sense).
      66d06b03
    • Matthijs Kooijman's avatar
      Add weak `std::terminate()` implementation · b8c6c850
      Matthijs Kooijman authored
      This allows calling it from other places later. The default
      implementation calls `abort()`, but making it weak allows user code to
      override this function (either directly, or by including a library like
      uclibc++ that implements `std::set_terminate()`).
      
      Note that this does not add a declaration for this function, since the
      standard dictates this to be in `<exception>`, but we cannot
      meaningfully or completely implement that header, so better leave it to
      be overridden by e.g. libraries like uclibc++.
      b8c6c850
    • Matthijs Kooijman's avatar
      Allow overriding selected operator new and delete functions · 4e469e0c
      Matthijs Kooijman authored
      This makes these functions weak, so that a sketch or library can replace
      them. This does not apply to all of these operators, only for the ones
      that the C++ standard specifies as replaceable.
      4e469e0c
    • Matthijs Kooijman's avatar
      Clean up and complete `<new>` header · 07b6bd18
      Matthijs Kooijman authored
      This makes this header complete up to including C++14, except two
      exception classes that cannot be defined without `<exception>`.
      
      The functions related to the "new_handler" are declared but not actually
      defined, to prevent overhead and complexity. They are still declared to
      allow implementing them in user code if needed.
      
      This makes the implementation of all operator new and delete functions
      comply with the C++11/C++14 specification in terms of which should be
      actually implemented and which should be delegate to other functions.
      
      There are still some areas where these implementations are not entirely
      standards-compliant, which will be fixed in subsequent commits.
      
      This fixes part of #287 and fixes #47.
      07b6bd18
    • Matthijs Kooijman's avatar
      Swap new and new.h header files · 9a02bd80
      Matthijs Kooijman authored
      Originally, the Arduino core used "new.h", rather than the standard
      "new", probably because the implementation was incomplete, and for the
      most commonly used new and delete operators, no include is needed at all
      (they are defined implicitly by the compiler). However, now Arduino
      does expose the "new" name, as an alias for the older "new.h". Given
      that the standard name is "new", it makes more sense to put the actual
      content in "new", and make "new.h" a compatibility header that includes
      "new" instead of the other way around.
      9a02bd80
  2. 11 Jun, 2020 7 commits
  3. 13 May, 2020 1 commit
  4. 04 May, 2020 1 commit
  5. 02 May, 2020 1 commit
  6. 28 Apr, 2020 1 commit
  7. 19 Mar, 2020 1 commit
  8. 18 Mar, 2020 1 commit
  9. 02 Dec, 2019 1 commit
  10. 25 Sep, 2019 1 commit
  11. 20 Sep, 2019 3 commits
  12. 19 Sep, 2019 1 commit
  13. 18 Sep, 2019 2 commits
  14. 16 Sep, 2019 13 commits