diff options
Diffstat (limited to 'bridges/source/cpp_uno/gcc3_linux_intel/except.cxx')
-rw-r--r-- | bridges/source/cpp_uno/gcc3_linux_intel/except.cxx | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/bridges/source/cpp_uno/gcc3_linux_intel/except.cxx b/bridges/source/cpp_uno/gcc3_linux_intel/except.cxx index 1438312d90ff..3a8e5753b053 100644 --- a/bridges/source/cpp_uno/gcc3_linux_intel/except.cxx +++ b/bridges/source/cpp_uno/gcc3_linux_intel/except.cxx @@ -90,7 +90,9 @@ class RTTI t_rtti_map m_rttis; t_rtti_map m_generatedRttis; +#if defined ANDROID void * m_hApp; +#endif public: RTTI(); @@ -100,13 +102,17 @@ public: }; RTTI::RTTI() +#if !defined ANDROID : m_hApp( dlopen(nullptr, RTLD_LAZY) ) +#endif { } RTTI::~RTTI() { +#if !defined ANDROID dlclose( m_hApp ); +#endif } @@ -135,7 +141,11 @@ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) buf.append( 'E' ); OString symName( buf.makeStringAndClear() ); +#if !defined ANDROID rtti = static_cast<type_info *>(dlsym( m_hApp, symName.getStr() )); +#else + rtti = static_cast<type_info *>(dlsym( RTLD_DEFAULT, symName.getStr() )); +#endif if (rtti) { @@ -156,9 +166,6 @@ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) #if OSL_DEBUG_LEVEL > 1 fprintf( stderr,"generated rtti for %s\n", rttiName ); #endif -// TODO: incompatible with llvm-c++ in ndk16 - no __si_class_type_info or __class_type_info -// either do as iOS one and inline thing or find another way -#if !defined(ANDROID) if (pTypeDescr->pBaseTypeDescription) { // ensure availability of base @@ -176,9 +183,6 @@ type_info * RTTI::getRTTI( typelib_CompoundTypeDescription *pTypeDescr ) pair< t_rtti_map::iterator, bool > insertion( m_generatedRttis.insert( t_rtti_map::value_type( unoName, rtti ) ) ); SAL_WARN_IF( !insertion.second, "bridges", "### inserting new generated rtti failed?!" ); -#else - (void) rttiName; // silence -Wunused-variable -#endif } else // taking already generated rtti { @@ -244,9 +248,7 @@ void raiseException( uno_Any * pUnoExc, uno_Mapping * pUno2Cpp ) static RTTI rtti_data; rtti = rtti_data.getRTTI(reinterpret_cast<typelib_CompoundTypeDescription*>(pTypeDescr)); TYPELIB_DANGER_RELEASE( pTypeDescr ); -#if !defined(ANDROID) // see TODO above assert(rtti && "### no rtti for throwing exception!"); -#endif if (! rtti) { throw RuntimeException( |