blob: aee29f0bc2b8b27c7785784493e54733bb0839c7 [file]
/*
* Copyright 2010-2020 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 "Cleaner.h"
#include "ExternalRCRef.hpp"
#include "Memory.h"
using namespace kotlin;
// Defined in RuntimeUtils.kt
extern "C" void Kotlin_internal_executeAndRelease(mm::RawExternalRCRef* cleanerAction);
namespace {
struct CleanerImpl {
ObjHeader header;
mm::RawExternalRCRef* cleanerStablePtr;
};
} // namespace
RUNTIME_NOTHROW void DisposeCleaner(KRef thiz) {
try {
mm::RawExternalRCRef* cleanerAction = reinterpret_cast<CleanerImpl*>(thiz)->cleanerStablePtr;
Kotlin_internal_executeAndRelease(cleanerAction);
} catch (...) {
// A trick to terminate with unhandled exception. This will print a stack trace
// and write to iOS crash log.
std::terminate();
}
}