Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. // -*- C++ -*- Exception handling routines for catching.
  2. // Copyright (C) 2001-2015 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.  
  26. #include <typeinfo>
  27. #include <cxxabi.h>
  28. #include "unwind-cxx.h"
  29.  
  30. namespace __cxxabiv1
  31. {
  32.  
  33. // Returns the type_info for the currently handled exception [15.3/8], or
  34. // null if there is none.
  35. extern "C"
  36. std::type_info *__cxa_current_exception_type () _GLIBCXX_NOTHROW
  37. {
  38.   __cxa_eh_globals *globals = __cxa_get_globals ();
  39.   __cxa_exception *header = globals->caughtExceptions;
  40.   if (header)
  41.     {
  42.       if (__is_dependent_exception (header->unwindHeader.exception_class))
  43.         {
  44.           __cxa_dependent_exception *de =
  45.             __get_dependent_exception_from_ue (&header->unwindHeader);
  46.           header = __get_exception_header_from_obj (de->primaryException);
  47.         }
  48.       return header->exceptionType;
  49.     }
  50.   else
  51.     return 0;
  52. }
  53.  
  54. } // namespace __cxxabiv1
  55.