refactor(library/module): interface to get task dependencies for modifications

This commit is contained in:
Gabriel Ebner 2016-12-20 03:57:19 -05:00 committed by Leonardo de Moura
parent a2bc967fac
commit 370d69de3f
3 changed files with 8 additions and 3 deletions

View file

@ -300,6 +300,11 @@ struct decl_modification : public modification {
static std::shared_ptr<modification const> deserialize(deserializer & d) {
return std::make_shared<decl_modification>(read_declaration(d));
}
void get_task_dependencies(std::vector<generic_task_result> & deps) const override {
if (m_decl.is_theorem())
deps.push_back(m_decl.get_value_task());
}
};
struct inductive_modification : public modification {

View file

@ -91,6 +91,7 @@ public:
virtual const char * get_key() const = 0;
virtual void perform(environment &) const = 0;
virtual void serialize(serializer &) const = 0;
virtual void get_task_dependencies(std::vector<generic_task_result> &) const {}
};
#define LEAN_MODIFICATION(k) \

View file

@ -112,9 +112,8 @@ public:
std::vector<generic_task_result> get_dependencies() override {
if (auto res = m_mod->m_result.peek()) {
std::vector<generic_task_result> deps;
res->m_env->for_each_declaration([&] (declaration const & d) {
if (d.is_theorem()) deps.push_back(d.get_value_task());
});
for (auto & mdf : res->m_loaded_module->m_modifications)
mdf->get_task_dependencies(deps);
return deps;
} else {
return {m_mod->m_result};