fix(frontends/lean): replay exported decls in imported files

This commit is contained in:
Leonardo de Moura 2016-06-25 12:13:36 -07:00
parent aa1dbccf26
commit 77286e6abb
3 changed files with 11 additions and 3 deletions

View file

@ -61,7 +61,7 @@ environment section_cmd(parser & p) {
// Execute open command
environment execute_open(environment env, io_state const & ios, export_decl const & edecl);
environment replay_export_decls(environment env, io_state const & ios, unsigned old_sz) {
environment replay_export_decls_core(environment env, io_state const & ios, unsigned old_sz) {
list<export_decl> new_export_decls = get_export_decls(env);
unsigned new_sz = length(new_export_decls);
lean_assert(new_sz >= old_sz);
@ -75,6 +75,10 @@ environment replay_export_decls(environment env, io_state const & ios, unsigned
return env;
}
environment replay_export_decls_core(environment env, io_state const & ios) {
return replay_export_decls_core(env, ios, 0);
}
environment execute_open(environment env, io_state const & ios, export_decl const & edecl) {
unsigned fingerprint = 0;
for (name const & n : edecl.m_metacls)
@ -102,7 +106,7 @@ environment execute_open(environment env, io_state const & ios, export_decl cons
}
}
env = update_fingerprint(env, fingerprint);
return replay_export_decls(env, ios, old_export_decls_sz);
return replay_export_decls_core(env, ios, old_export_decls_sz);
}
environment namespace_cmd(parser & p) {
@ -110,7 +114,7 @@ environment namespace_cmd(parser & p) {
p.push_local_scope();
unsigned old_export_decls_sz = length(get_export_decls(p.env()));
environment env = push_scope(p.env(), p.ios(), scope_kind::Namespace, n);
return replay_export_decls(env, p.ios(), old_export_decls_sz);
return replay_export_decls_core(env, p.ios(), old_export_decls_sz);
}
static environment redeclare_aliases(environment env, parser & p,

View file

@ -11,6 +11,9 @@ bool print_id_info(parser & p, name const & id, bool show_value, pos_info const
bool print_token_info(parser const & p, name const & tk);
cmd_table get_builtin_cmds();
/* \brief Replay export declarations in the top-level of imported files */
environment replay_export_decls_core(environment env, io_state const & ios);
void initialize_builtin_cmds();
void finalize_builtin_cmds();
}

View file

@ -1907,6 +1907,7 @@ void parser::parse_imports() {
m_env = import_modules(m_env, base, olean_files.size(), olean_files.data(), num_threads,
keep_imported_thms, m_ios);
m_env = update_fingerprint(m_env, fingerprint);
m_env = replay_export_decls_core(m_env, m_ios);
if (imported)
commit_info(1, 0);
}