1
0
Fork 0
libreoffice/bridges/source/cpp_uno/gcc3_wasm/abi.hxx
Daniel Baumann 8e63e14cf6
Adding upstream version 4:25.2.3.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-22 16:20:04 +02:00

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: */