lean4-htt/src/library/scope_pos_info_provider.cpp
2018-06-07 16:28:54 -07:00

35 lines
1.1 KiB
C++

/*
Copyright (c) 2016 Microsoft Corporation. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Author: Leonardo de Moura
*/
#include <string>
#include "runtime/sstream.h"
#include "library/scope_pos_info_provider.h"
namespace lean {
LEAN_THREAD_PTR(pos_info_provider, g_p);
scope_pos_info_provider::scope_pos_info_provider(pos_info_provider & p):m_old_p(g_p) { g_p = &p; }
scope_pos_info_provider::~scope_pos_info_provider() { g_p = m_old_p; }
pos_info_provider * get_pos_info_provider() {
return g_p;
}
optional<pos_info> get_pos_info(expr const & e) {
return get_pos_info_provider() ? get_pos_info_provider()->get_pos_info(e) : optional<pos_info>();
}
optional<pos_info> get_pos_info(optional<expr> const & e) {
return e ? get_pos_info(*e) : optional<pos_info>();
}
std::string pos_string_for(expr const & e) {
pos_info_provider * provider = get_pos_info_provider();
if (!provider) return "'unknown'";
pos_info pos = provider->get_pos_info_or_some(e);
sstream s;
s << provider->get_file_name() << ":" << pos.first << ":" << pos.second << ":";
return s.str();
}
}