141 lines
4.6 KiB
C++
141 lines
4.6 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <sal/config.h>
|
|
|
|
#include <typeinfo>
|
|
|
|
#define __USING_WASM_EXCEPTIONS__
|
|
#include <cxxabi.h>
|
|
|
|
#include <bridges/emscriptencxxabi/cxxabi.hxx>
|
|
#include <config_cxxabi.h>
|
|
#include <typelib/typedescription.h>
|
|
#include <uno/any2.h>
|
|
#include <uno/mapping.h>
|
|
|
|
// <https://github.com/emscripten-core/emscripten/>, system/lib/libcxxabi/src/private_typeinfo.h:
|
|
namespace __cxxabiv1
|
|
{
|
|
class _LIBCXXABI_TYPE_VIS __shim_type_info : public std::type_info
|
|
{
|
|
public:
|
|
/*MODIFIED:*/ __shim_type_info(char const* name)
|
|
: type_info(name)
|
|
{
|
|
}
|
|
_LIBCXXABI_HIDDEN virtual ~__shim_type_info();
|
|
|
|
_LIBCXXABI_HIDDEN virtual void noop1() const;
|
|
_LIBCXXABI_HIDDEN virtual void noop2() const;
|
|
_LIBCXXABI_HIDDEN virtual bool can_catch(const __shim_type_info* thrown_type,
|
|
void*& adjustedPtr) const = 0;
|
|
};
|
|
}
|
|
|
|
#if !HAVE_CXXABI_H_CLASS_TYPE_INFO
|
|
// <https://github.com/emscripten-core/emscripten/>, system/lib/libcxxabi/src/private_typeinfo.h:
|
|
namespace __cxxabiv1
|
|
{
|
|
class _LIBCXXABI_TYPE_VIS __class_type_info : public __shim_type_info
|
|
{
|
|
public:
|
|
/*MODIFIED:*/ __class_type_info(char const* name)
|
|
: __shim_type_info(name)
|
|
{
|
|
}
|
|
_LIBCXXABI_HIDDEN virtual ~__class_type_info();
|
|
|
|
_LIBCXXABI_HIDDEN void process_static_type_above_dst(void /*MODIFIED: __dynamic_cast_info*/*,
|
|
const void*, const void*, int) const;
|
|
_LIBCXXABI_HIDDEN void process_static_type_below_dst(void /*MODIFIED: __dynamic_cast_info*/*,
|
|
const void*, int) const;
|
|
_LIBCXXABI_HIDDEN void process_found_base_class(void /*MODIFIED: __dynamic_cast_info*/*, void*,
|
|
int) const;
|
|
_LIBCXXABI_HIDDEN virtual void search_above_dst(void /*MODIFIED: __dynamic_cast_info*/*,
|
|
const void*, const void*, int, bool) const;
|
|
_LIBCXXABI_HIDDEN virtual void search_below_dst(void /*MODIFIED: __dynamic_cast_info*/*,
|
|
const void*, int, bool) const;
|
|
_LIBCXXABI_HIDDEN virtual bool can_catch(const __shim_type_info*, void*&) const;
|
|
_LIBCXXABI_HIDDEN virtual void
|
|
has_unambiguous_public_base(void /*MODIFIED: __dynamic_cast_info*/*, void*, int) const;
|
|
};
|
|
}
|
|
#endif
|
|
|
|
#if !HAVE_CXXABI_H_SI_CLASS_TYPE_INFO
|
|
// <https://mentorembedded.github.io/cxx-abi/abi.html>,
|
|
// libstdc++-v3/libsupc++/cxxabi.h:
|
|
namespace __cxxabiv1
|
|
{
|
|
class _LIBCXXABI_TYPE_VIS __si_class_type_info : public __class_type_info
|
|
{
|
|
public:
|
|
const __class_type_info* __base_type;
|
|
|
|
/*MODIFIED:*/ __si_class_type_info(char const* name)
|
|
: __class_type_info(name)
|
|
{
|
|
}
|
|
_LIBCXXABI_HIDDEN virtual ~__si_class_type_info();
|
|
|
|
_LIBCXXABI_HIDDEN virtual void search_above_dst(void /*MODIFIED: __dynamic_cast_info*/*,
|
|
const void*, const void*, int, bool) const;
|
|
_LIBCXXABI_HIDDEN virtual void search_below_dst(void /*MODIFIED: __dynamic_cast_info*/*,
|
|
const void*, int, bool) const;
|
|
_LIBCXXABI_HIDDEN virtual void
|
|
has_unambiguous_public_base(void /*MODIFIED: __dynamic_cast_info*/*, void*, int) const;
|
|
};
|
|
}
|
|
#endif
|
|
|
|
#if !HAVE_CXXABI_H_CXA_EH_GLOBALS
|
|
// <https://github.com/emscripten-core/emscripten/>, system/lib/libcxxabi/src/cxa_exception.h:
|
|
namespace __cxxabiv1
|
|
{
|
|
struct __cxa_eh_globals
|
|
{
|
|
__cxa_exception* caughtExceptions;
|
|
unsigned int uncaughtExceptions;
|
|
#if defined _LIBCXXABI_ARM_EHABI
|
|
__cxa_exception* propagatingExceptions;
|
|
#endif
|
|
};
|
|
}
|
|
#endif
|
|
|
|
#if !HAVE_CXXABI_H_CXA_GET_GLOBALS
|
|
// <https://github.com/emscripten-core/emscripten/>, system/lib/libcxxabi/src/cxa_exception.h:
|
|
namespace __cxxabiv1
|
|
{
|
|
extern "C" __cxa_eh_globals* __cxa_get_globals();
|
|
}
|
|
#endif
|
|
|
|
namespace abi_wasm
|
|
{
|
|
enum class StructKind
|
|
{
|
|
Empty,
|
|
I32,
|
|
I64,
|
|
F32,
|
|
F64,
|
|
General
|
|
};
|
|
|
|
StructKind getKind(typelib_CompoundTypeDescription const* type);
|
|
|
|
void mapException(__cxxabiv1::__cxa_exception* exception, std::type_info const* type, uno_Any* any,
|
|
uno_Mapping* mapping);
|
|
}
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
|