lean2/src/api/exception.cpp

54 lines
1.4 KiB
C++
Raw Normal View History

/*
Copyright (c) 2015 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#include "kernel/kernel_exception.h"
#include "api/exception.h"
#include "api/string.h"
namespace lean {
memout_exception * get_memout_exception() {
static memout_exception g_memout;
return &g_memout;
}
void check_nonnull(void const * ptr) {
if (!ptr)
throw exception("invalid argument, it must be a nonnull pointer");
}
}
void lean_del_exception(lean_exception e) {
lean::throwable * t = lean::to_exception(e);
if (t != lean::get_memout_exception()) {
delete t;
}
}
char const * lean_get_exception_message(lean_exception e) {
if (!e)
return 0;
try {
return lean::mk_string(lean::to_exception(e)->what());
} catch (...) {
return 0;
}
}
lean_exception_kind lean_get_exception_kind(lean_exception e) {
lean::throwable * ex = lean::to_exception(e);
if (!ex)
return LEAN_NULL_EXCEPTION;
if (dynamic_cast<lean::memout_exception*>(ex))
return LEAN_OUT_OF_MEMORY;
if (dynamic_cast<lean::system_exception*>(ex))
return LEAN_SYSTEM_EXCEPTION;
if (dynamic_cast<lean::kernel_exception*>(ex))
return LEAN_KERNEL_EXCEPTION;
if (dynamic_cast<lean::interrupted*>(ex))
return LEAN_INTERRUPTED;
return LEAN_OTHER_EXCEPTION;
}