Kaydet (Commit) 17f1b0f5 authored tarafından Tor Lillqvist's avatar Tor Lillqvist

Using pre-cached type_infos provided by the typeid operator seems to work now

Apparently there was no problem in this after all. The reason it
seemed not to work earlier was because of the unwinding failure due to
the missing .cfi_startproc and .cfi_endproc thingies in helper.s

The hack in ucbhelper is now not needed after all.

Change-Id: If9fec5c502d4c9d0c44709ad9c2729f812e882e2
üst 8f6a574d
......@@ -35,6 +35,7 @@
#include <com/sun/star/uno/genfunc.hxx>
#include <com/sun/star/uno/RuntimeException.hpp>
#include <com/sun/star/ucb/InteractiveAugmentedIOException.hpp>
#include <com/sun/star/ucb/NameClashException.hpp>
#include <typelib/typedescription.hxx>
#include <uno/any2.h>
......@@ -171,12 +172,21 @@ public:
RTTI::RTTI() SAL_THROW(())
: m_hApp( dlopen( 0, RTLD_LAZY ) )
{
#if 0
// Insert commonly needed type_infos to avoid dlsym() calls
// Ideally we should insert all needed ones
// Ideally we should insert all needed ones, and we actually must,
// for arm64, as the dynamically generated type_infos don't seem
// to work correctly. Luckily it seems that quite few types of
// exceptions are thrown through the C++/UNO bridge at least in
// the TiledLibreOffice test app.
// (As no Java, Basic or Python is supported in LO code on iOS, we
// can know the set of types of exceptions throws a priori, so
// keeping this list complete should be possible.)
m_rttis.insert( t_rtti_map::value_type( "com.sun.star.ucb.InteractiveAugmentedIOException",
(std::type_info*) &typeid( com::sun::star::ucb::InteractiveAugmentedIOException ) ) );
#endif
m_rttis.insert( t_rtti_map::value_type( "com.sun.star.ucb.NameClashException",
(std::type_info*) &typeid( com::sun::star::ucb::NameClashException ) ) );
}
RTTI::~RTTI() SAL_THROW(())
......
......@@ -74,22 +74,6 @@ void cancelCommandExecution( const uno::Any & rException,
}
}
#if defined IOS && defined __arm64
// No Java, Basic, or Python on iOS, so try to throw the exception
// directly. Much simpler. Especially as I haven't managed yet to
// get the C++/UNO bridge to work for arm64, and this
// cppu::throwException thing seems to be the only use for it, at
// least in the test apps...
ucb::NameClashException aNCE;
if ( rException >>= aNCE )
throw aNCE;
lang::IllegalArgumentException aIAE;
if ( rException >>= aIAE )
throw aIAE;
#endif
cppu::throwException( rException );
OSL_FAIL( "Return from cppu::throwException call!!!" );
throw uno::RuntimeException();
......@@ -127,13 +111,6 @@ void cancelCommandExecution( const ucb::IOErrorCode eError,
}
}
#if defined IOS && defined __arm64
// See comment above.
ucb::InteractiveAugmentedIOException aExc;
if ( xRequest->getRequest() >>= aExc )
throw aExc;
#endif
cppu::throwException( xRequest->getRequest() );
OSL_FAIL( "Return from cppu::throwException call!!!" );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment