Subversion Repositories Kolibri OS

Rev

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

  1. // Exception Handling support header for -*- C++ -*-
  2.  
  3. // Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
  4. // 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
  5. // Free Software Foundation
  6. //
  7. // This file is part of GCC.
  8. //
  9. // GCC is free software; you can redistribute it and/or modify
  10. // it under the terms of the GNU General Public License as published by
  11. // the Free Software Foundation; either version 3, or (at your option)
  12. // any later version.
  13. //
  14. // GCC is distributed in the hope that it will be useful,
  15. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  16. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17. // GNU General Public License for more details.
  18. //
  19. // Under Section 7 of GPL version 3, you are granted additional
  20. // permissions described in the GCC Runtime Library Exception, version
  21. // 3.1, as published by the Free Software Foundation.
  22.  
  23. // You should have received a copy of the GNU General Public License and
  24. // a copy of the GCC Runtime Library Exception along with this program;
  25. // see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
  26. // <http://www.gnu.org/licenses/>.
  27.  
  28. /** @file exception
  29.  *  This is a Standard C++ Library header.
  30.  */
  31.  
  32. #ifndef __EXCEPTION__
  33. #define __EXCEPTION__
  34.  
  35. #pragma GCC system_header
  36.  
  37. #pragma GCC visibility push(default)
  38.  
  39. #include <bits/c++config.h>
  40. #include <bits/atomic_lockfree_defines.h>
  41.  
  42. extern "C++" {
  43.  
  44. namespace std
  45. {
  46.   /**
  47.    * @defgroup exceptions Exceptions
  48.    * @ingroup diagnostics
  49.    *
  50.    * Classes and functions for reporting errors via exception classes.
  51.    * @{
  52.    */
  53.  
  54.   /**
  55.    *  @brief Base class for all library exceptions.
  56.    *
  57.    *  This is the base class for all exceptions thrown by the standard
  58.    *  library, and by certain language expressions.  You are free to derive
  59.    *  your own %exception classes, or use a different hierarchy, or to
  60.    *  throw non-class data (e.g., fundamental types).
  61.    */
  62.   class exception
  63.   {
  64.   public:
  65.     exception() _GLIBCXX_USE_NOEXCEPT { }
  66.     virtual ~exception() _GLIBCXX_USE_NOEXCEPT;
  67.  
  68.     /** Returns a C-style character string describing the general cause
  69.      *  of the current error.  */
  70.     virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
  71.   };
  72.  
  73.   /** If an %exception is thrown which is not listed in a function's
  74.    *  %exception specification, one of these may be thrown.  */
  75.   class bad_exception : public exception
  76.   {
  77.   public:
  78.     bad_exception() _GLIBCXX_USE_NOEXCEPT { }
  79.  
  80.     // This declaration is not useless:
  81.     // http://gcc.gnu.org/onlinedocs/gcc-3.0.2/gcc_6.html#SEC118
  82.     virtual ~bad_exception() _GLIBCXX_USE_NOEXCEPT;
  83.  
  84.     // See comment in eh_exception.cc.
  85.     virtual const char* what() const _GLIBCXX_USE_NOEXCEPT;
  86.   };
  87.  
  88.   /// If you write a replacement %terminate handler, it must be of this type.
  89.   typedef void (*terminate_handler) ();
  90.  
  91.   /// If you write a replacement %unexpected handler, it must be of this type.
  92.   typedef void (*unexpected_handler) ();
  93.  
  94.   /// Takes a new handler function as an argument, returns the old function.
  95.   terminate_handler set_terminate(terminate_handler) _GLIBCXX_USE_NOEXCEPT;
  96.  
  97.   /** The runtime will call this function if %exception handling must be
  98.    *  abandoned for any reason.  It can also be called by the user.  */
  99.   void terminate() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__noreturn__));
  100.  
  101.   /// Takes a new handler function as an argument, returns the old function.
  102.   unexpected_handler set_unexpected(unexpected_handler) _GLIBCXX_USE_NOEXCEPT;
  103.  
  104.   /** The runtime will call this function if an %exception is thrown which
  105.    *  violates the function's %exception specification.  */
  106.   void unexpected() __attribute__ ((__noreturn__));
  107.  
  108.   /** [18.6.4]/1:  'Returns true after completing evaluation of a
  109.    *  throw-expression until either completing initialization of the
  110.    *  exception-declaration in the matching handler or entering @c unexpected()
  111.    *  due to the throw; or after entering @c terminate() for any reason
  112.    *  other than an explicit call to @c terminate().  [Note: This includes
  113.    *  stack unwinding [15.2].  end note]'
  114.    *
  115.    *  2: 'When @c uncaught_exception() is true, throwing an
  116.    *  %exception can result in a call of @c terminate()
  117.    *  (15.5.1).'
  118.    */
  119.   bool uncaught_exception() _GLIBCXX_USE_NOEXCEPT __attribute__ ((__pure__));
  120.  
  121.   // @} group exceptions
  122. } // namespace std
  123.  
  124. namespace __gnu_cxx
  125. {
  126. _GLIBCXX_BEGIN_NAMESPACE_VERSION
  127.  
  128.   /**
  129.    *  @brief A replacement for the standard terminate_handler which
  130.    *  prints more information about the terminating exception (if any)
  131.    *  on stderr.
  132.    *
  133.    *  @ingroup exceptions
  134.    *
  135.    *  Call
  136.    *   @code
  137.    *     std::set_terminate(__gnu_cxx::__verbose_terminate_handler)
  138.    *   @endcode
  139.    *  to use.  For more info, see
  140.    *  http://gcc.gnu.org/onlinedocs/libstdc++/manual/bk01pt02ch06s02.html
  141.    *
  142.    *  In 3.4 and later, this is on by default.
  143.    */
  144.   void __verbose_terminate_handler();
  145.  
  146. _GLIBCXX_END_NAMESPACE_VERSION
  147. } // namespace
  148.  
  149. } // extern "C++"
  150.  
  151. #pragma GCC visibility pop
  152.  
  153. #if defined(__GXX_EXPERIMENTAL_CXX0X__) && (ATOMIC_INT_LOCK_FREE > 1)
  154. #include <bits/exception_ptr.h>
  155. #include <bits/nested_exception.h>
  156. #endif
  157.  
  158. #endif
  159.