/* Copyright (c) 2014 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Author: Leonardo de Moura */ #include #include "library/exception.h" namespace lean { static pp_fn mk_pp_fn(char const * msg) { std::string msg_str = msg; return [=](formatter const &) { return format(msg_str); }; // NOLINT } generic_exception::generic_exception(optional const & m, char const * msg): generic_exception(msg, m, mk_pp_fn(msg)) {} optional nested_exception::get_pos() const { if (m_pos) return m_pos; try { std::rethrow_exception(m_exception); } catch (ext_exception & ex) { return ex.get_pos(); } catch (...) { return optional(); } } format nested_exception::pp(formatter const & fmt) const { format r = m_pp_fn(fmt); r += line() + format("nested exception message:") + line(); try { std::rethrow_exception(m_exception); } catch (ext_exception & ex) { r += ex.pp(fmt); } catch (std::exception & ex) { r += format(ex.what()); } catch (...) { } return r; } }