refactor(frontends/lean/{parser,util}): extract quote functions

Also fixes ``f when f is private
This commit is contained in:
Sebastian Ullrich 2017-02-23 00:58:56 +01:00
parent 1c7ca3f20a
commit dfe1874365
5 changed files with 27 additions and 32 deletions

View file

@ -682,7 +682,7 @@ static expr parse_quoted_name(parser_state & p, unsigned, expr const *, pos_info
}
}
lean_assert(id.is_string());
expr e = quote_name(id);
expr e = quote(id);
return p.rec_save_pos(e, pos);
}

View file

@ -1000,7 +1000,7 @@ static expr mk_opt_param(expr const & t, expr const & val) {
}
static expr mk_auto_param(expr const & t, name const & tac_name) {
return copy_tag(t, mk_app(copy_tag(t, mk_constant(get_auto_param_name())), t, quote_name(tac_name)));
return copy_tag(t, mk_app(copy_tag(t, mk_constant(get_auto_param_name())), t, quote(tac_name)));
}
static bool is_tactic_unit(environment const & env, expr const & c) {
@ -1715,26 +1715,6 @@ struct to_pattern_fn {
}
};
static expr quote(unsigned u) {
return mk_app(mk_constant(get_char_of_nat_name()), mk_prenum(mpz(u)));
}
static expr quote(char const * str) {
return from_string(str);
}
static expr quote(name const & n) {
switch (n.kind()) {
case name_kind::ANONYMOUS:
return mk_constant({"name", "anonymous"});
case name_kind::NUMERAL:
return mk_app(mk_constant({"name", "mk_numeral"}), quote(n.get_numeral()), quote(n.get_prefix()));
case name_kind::STRING:
return mk_app(mk_constant({"name", "mk_string"}), quote(n.get_string()), quote(n.get_prefix()));
}
lean_unreachable();
}
static expr quote(expr const & e) {
switch (e.kind()) {
case expr_kind::Var:

View file

@ -31,6 +31,8 @@ Author: Leonardo de Moura
#include "frontends/lean/parser.h"
#include "frontends/lean/tokens.h"
#include "frontends/lean/decl_util.h" // TODO(Leo): remove
#include "frontends/lean/prenum.h"
namespace lean {
void consume_until_end_or_command(parser & p) {
while (!p.curr_is_command() && !p.curr_is_eof() && !p.curr_is_token(get_period_tk())) {
@ -341,16 +343,24 @@ expr mk_tactic_unit() {
return mk_app(mk_constant(get_tactic_name(), {mk_level_zero()}), mk_constant(get_unit_name()));
}
expr quote_name(name const & n) {
if (n.is_anonymous()) {
return mk_constant(get_name_anonymous_name());
} else if (n.is_string()) {
expr prefix = quote_name(n.get_prefix());
expr str = from_string(n.get_string());
return mk_app(mk_constant(get_name_mk_string_name()), str, prefix);
} else {
lean_unreachable();
expr quote(unsigned u) {
return mk_app(mk_constant(get_char_of_nat_name()), mk_prenum(mpz(u)));
}
expr quote(char const * str) {
return from_string(str);
}
expr quote(name const & n) {
switch (n.kind()) {
case name_kind::ANONYMOUS:
return mk_constant(get_name_anonymous_name());
case name_kind::NUMERAL:
return mk_app(mk_constant(get_name_mk_numeral_name()), quote(n.get_numeral()), quote(n.get_prefix()));
case name_kind::STRING:
return mk_app(mk_constant(get_name_mk_string_name()), quote(n.get_string()), quote(n.get_prefix()));
}
lean_unreachable();
}
static name * g_no_info = nullptr;

View file

@ -106,7 +106,9 @@ pair<name, option_kind> parse_option_name(parser & p, char const * error_msg);
/** Create (tactic unit) type */
expr mk_tactic_unit();
expr quote_name(name const & n);
expr quote(unsigned u);
expr quote(char const * str);
expr quote(name const & n);
expr mk_no_info(expr const & e);
bool is_no_info(expr const & e);

View file

@ -11,3 +11,6 @@ by do
trace t2,
r ← mk_app (`eq.refl) [a],
exact r
private def f := unit
check ``f