/* 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/declaration_index.h" namespace lean { void declaration_index::add_decl(std::string const fname, pos_info const & p, name const & n, name const & k, expr const & t) { m_entries.emplace_back(entry_kind::Declaration, fname, p, n, k, t); } void declaration_index::add_ref(std::string const fname, pos_info const & p, name const & n) { m_entries.emplace_back(entry_kind::Reference, fname, p, n, name(), expr()); } void declaration_index::save(io_state_stream const & out) const { entry_kind k; std::string fname; pos_info p; name n, dk; expr t; for (auto const & e : m_entries) { std::tie(k, fname, p, n, dk, t) = e; out << (k == entry_kind::Declaration ? "d" : "r") << "|" << fname << "|" << p.first << "|" << p.second << "|" << n; if (k == entry_kind::Declaration) { out << "|" << dk << "|"; options const & opts = out.get_options(); out.get_stream() << mk_pair(flatten(out.get_formatter()(t)), opts); } out << endl; } } }