1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 28 #include "uno/mapping.h" 29 30 #include <typeinfo> 31 #include <exception> 32 #include <cstddef> 33 34 namespace CPPU_CURRENT_NAMESPACE 35 { 36 37 bool isSimpleReturnType(typelib_TypeDescription * pTD, bool recursive = false); 38 39 void dummy_can_throw_anything( char const * ); 40 41 // ----- following decl from libstdc++-v3/libsupc++/unwind-cxx.h and unwind.h 42 43 struct _Unwind_Exception 44 { 45 unsigned exception_class __attribute__((__mode__(__DI__))); 46 void * exception_cleanup; 47 unsigned private_1 __attribute__((__mode__(__word__))); 48 unsigned private_2 __attribute__((__mode__(__word__))); 49 } __attribute__((__aligned__)); 50 51 struct __cxa_exception 52 { 53 ::std::type_info *exceptionType; 54 void (*exceptionDestructor)(void *); 55 56 ::std::unexpected_handler unexpectedHandler; 57 ::std::terminate_handler terminateHandler; 58 59 __cxa_exception *nextException; 60 61 int handlerCount; 62 63 int handlerSwitchValue; 64 const unsigned char *actionRecord; 65 const unsigned char *languageSpecificData; 66 void *catchTemp; 67 void *adjustedPtr; 68 69 _Unwind_Exception unwindHeader; 70 }; 71 72 extern "C" void *__cxa_allocate_exception( 73 std::size_t thrown_size ) throw(); 74 extern "C" void __cxa_throw ( 75 void *thrown_exception, std::type_info *tinfo, void (*dest) (void *) ) __attribute__((noreturn)); 76 77 struct __cxa_eh_globals 78 { 79 __cxa_exception *caughtExceptions; 80 unsigned int uncaughtExceptions; 81 }; 82 extern "C" __cxa_eh_globals *__cxa_get_globals () throw(); 83 84 // ----- 85 86 //================================================================================================== 87 void raiseException( 88 uno_Any * pUnoExc, uno_Mapping * pUno2Cpp ); 89 //================================================================================================== 90 void fillUnoException( 91 __cxa_exception * header, uno_Any *, uno_Mapping * pCpp2Uno ); 92 } 93