feat(frontends/lean/decl_cmds): closes #791
This commit is contained in:
parent
6443de67d4
commit
0b8f57841a
3 changed files with 30 additions and 2 deletions
|
@ -114,6 +114,12 @@ static void check_parameter_type(parser & p, name const & n, expr const & type,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static environment ensure_decl_namespaces(environment const & env, name const & full_n) {
|
||||||
|
if (full_n.is_atomic())
|
||||||
|
return env;
|
||||||
|
return add_namespace(env, full_n.get_prefix());
|
||||||
|
}
|
||||||
|
|
||||||
static environment declare_var(parser & p, environment env,
|
static environment declare_var(parser & p, environment env,
|
||||||
name const & n, level_param_names const & ls, expr const & type,
|
name const & n, level_param_names const & ls, expr const & type,
|
||||||
variable_kind k, optional<binder_info> const & _bi, pos_info const & pos,
|
variable_kind k, optional<binder_info> const & _bi, pos_info const & pos,
|
||||||
|
@ -155,6 +161,7 @@ static environment declare_var(parser & p, environment env,
|
||||||
}
|
}
|
||||||
if (is_protected)
|
if (is_protected)
|
||||||
env = add_protected(env, full_n);
|
env = add_protected(env, full_n);
|
||||||
|
env = ensure_decl_namespaces(env, full_n);
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -885,8 +892,10 @@ class definition_cmd_fn {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// TODO(Leo): register aux_decls
|
// TODO(Leo): register aux_decls
|
||||||
if (!m_is_private)
|
if (!m_is_private) {
|
||||||
m_p.add_decl_index(real_n, m_pos, m_p.get_cmd_token(), type);
|
m_p.add_decl_index(real_n, m_pos, m_p.get_cmd_token(), type);
|
||||||
|
m_env = ensure_decl_namespaces(m_env, real_n);
|
||||||
|
}
|
||||||
if (m_is_protected)
|
if (m_is_protected)
|
||||||
m_env = add_protected(m_env, real_n);
|
m_env = add_protected(m_env, real_n);
|
||||||
if (n != real_n) {
|
if (n != real_n) {
|
||||||
|
|
|
@ -127,7 +127,11 @@ environment add_namespace(environment const & env, name const & ns) {
|
||||||
if (!ext.m_namespace_set.contains(ns)) {
|
if (!ext.m_namespace_set.contains(ns)) {
|
||||||
ext.m_namespace_set.insert(ns);
|
ext.m_namespace_set.insert(ns);
|
||||||
environment r = update(env, ext);
|
environment r = update(env, ext);
|
||||||
return module::add(r, *g_new_namespace_key, [=](environment const &, serializer & s) { s << ns; });
|
r = module::add(r, *g_new_namespace_key, [=](environment const &, serializer & s) { s << ns; });
|
||||||
|
if (ns.is_atomic())
|
||||||
|
return r;
|
||||||
|
else
|
||||||
|
return add_namespace(r, ns.get_prefix());
|
||||||
} else {
|
} else {
|
||||||
return env;
|
return env;
|
||||||
}
|
}
|
||||||
|
|
15
tests/lean/run/791.lean
Normal file
15
tests/lean/run/791.lean
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
definition foo.bar := 10
|
||||||
|
definition boo.bla.foo := 20
|
||||||
|
|
||||||
|
open foo
|
||||||
|
open boo.bla
|
||||||
|
|
||||||
|
eval bar
|
||||||
|
eval foo
|
||||||
|
|
||||||
|
constant x.y.z : nat
|
||||||
|
|
||||||
|
open x
|
||||||
|
check y.z
|
||||||
|
open x.y
|
||||||
|
check z
|
Loading…
Add table
Reference in a new issue