Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. // -*- C++ -*- std::terminate, std::unexpected and friends.
  2. // Copyright (C) 1994-2013 Free Software Foundation, Inc.
  3. //
  4. // This file is part of GCC.
  5. //
  6. // GCC is free software; you can redistribute it and/or modify
  7. // it under the terms of the GNU General Public License as published by
  8. // the Free Software Foundation; either version 3, or (at your option)
  9. // any later version.
  10. //
  11. // GCC is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. // GNU General Public License for more details.
  15. //
  16. // Under Section 7 of GPL version 3, you are granted additional
  17. // permissions described in the GCC Runtime Library Exception, version
  18. // 3.1, as published by the Free Software Foundation.
  19.  
  20. // You should have received a copy of the GNU General Public License and
  21. // a copy of the GCC Runtime Library Exception along with this program;
  22. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  23. // <http://www.gnu.org/licenses/>.
  24.  
  25. #include "typeinfo"
  26. #include "exception"
  27. #include <cstdlib>
  28. #include "unwind-cxx.h"
  29. #include <bits/exception_defines.h>
  30.  
  31. using namespace __cxxabiv1;
  32.  
  33. void
  34. __cxxabiv1::__terminate (std::terminate_handler handler) throw ()
  35. {
  36.   __try
  37.     {
  38.       handler ();
  39.       std::abort ();
  40.     }
  41.   __catch(...)
  42.     { std::abort (); }
  43. }
  44.  
  45. void
  46. std::terminate () throw()
  47. {
  48.   __terminate (__terminate_handler);
  49. }
  50.  
  51. void
  52. __cxxabiv1::__unexpected (std::unexpected_handler handler)
  53. {
  54.   handler();
  55.   std::terminate ();
  56. }
  57.  
  58. void
  59. std::unexpected ()
  60. {
  61.   __unexpected (__unexpected_handler);
  62. }
  63.  
  64. std::terminate_handler
  65. std::set_terminate (std::terminate_handler func) throw()
  66. {
  67.   std::terminate_handler old = __terminate_handler;
  68.   __terminate_handler = func;
  69.   return old;
  70. }
  71.  
  72. std::unexpected_handler
  73. std::set_unexpected (std::unexpected_handler func) throw()
  74. {
  75.   std::unexpected_handler old = __unexpected_handler;
  76.   __unexpected_handler = func;
  77.   return old;
  78. }
  79.