blob: d7300e4ee8cd011c78e823c516c976d4a4c23e23 [file]
/*
* Copyright 2010-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
* that can be found in the LICENSE file.
*/
#include "Memory.h"
#include "ExternalRCRef.hpp"
using namespace kotlin;
namespace {
class ExceptionObjHolderImpl : public ExceptionObjHolder, private Pinned {
public:
explicit ExceptionObjHolderImpl(ObjHeader* obj) noexcept : ref_(obj) {}
ObjHeader* obj() noexcept { return *ref_; }
private:
mm::OwningExternalRCRef ref_;
};
} // namespace
// static
RUNTIME_NORETURN void ExceptionObjHolder::Throw(ObjHeader* exception) {
throw ExceptionObjHolderImpl(exception);
}
ObjHeader* ExceptionObjHolder::GetExceptionObject() noexcept {
return static_cast<ExceptionObjHolderImpl*>(this)->obj();
}