feat(library/compiler/builtin,frontends/lean/vm_elaborator): add temporary expr.local primitive

This makes it possible (or at least much easier) to interface with old
parser/elaborator code using local_consts for e.g. `def` parameters.
This commit is contained in:
Sebastian Ullrich 2019-01-12 14:14:52 +01:00
parent da865fc33a
commit 49f580f190
3 changed files with 13 additions and 4 deletions

View file

@ -17,6 +17,9 @@ constant environment : Type
constant environment.empty : environment
constant environment.contains : environment → name → bool
-- deprecated constructor
constant expr.local : name → name → expr → binder_info → expr
namespace elaborator
-- TODO(Sebastian): move
-- TODO(Sebastian): should be its own monad?

View file

@ -297,7 +297,7 @@ expr to_expr(vm_obj const & o) {
case 0:
return mk_bvar(nat(vm_nat_to_mpz1(cfield(o, 0))));
case 1:
return mk_local(to_name(cfield(o, 0)), to_name(cfield(o, 0)), expr(), mk_binder_info());
return mk_local(to_name(cfield(o, 0)), to_name(cfield(o, 1)), to_expr(cfield(o, 2)), to_binder_info(cfield(o, 3)));
case 2:
return mk_metavar(to_name(cfield(o, 0)), to_expr(cfield(o, 1)));
case 3:
@ -465,7 +465,12 @@ vm_obj vm_elaborate_command(vm_obj const & vm_filename, vm_obj const & vm_cmd, v
return mk_vm_constructor(0, vm_out, to_obj(log));
}
vm_obj vm_expr_local(vm_obj const & vm_pp_name, vm_obj const & vm_name, vm_obj const & vm_type, vm_obj const & vm_binder_info) {
return mk_vm_constructor(1, vm_pp_name, vm_name, vm_type, vm_binder_info);
}
void initialize_vm_elaborator() {
DECLARE_VM_BUILTIN(name({"lean", "expr", "local"}), vm_expr_local);
DECLARE_VM_BUILTIN(name({"lean", "environment", "empty"}), vm_environment_empty);
DECLARE_VM_BUILTIN(name({"lean", "environment", "contains"}), vm_environment_contains);
DECLARE_VM_BUILTIN(name({"lean", "elaborator", "elaborate_command"}), vm_elaborate_command);

View file

@ -162,9 +162,10 @@ void initialize_builtin() {
register_builtin(name({"io", "prim", "handle", "get_line"}), o_o_o, "io_prim_handle_get_line", bc);
// interface to old elaborator
register_builtin(name({"lean", "environment", "empty"}), o, "lean_environment_empty", {});
register_builtin(name({"lean", "environment", "contains"}), o_o_o, "lean_environment_contains", bb);
register_builtin(name({"lean", "elaborator", "elaborate_command"}), o_o_o_o, "lean_elaborator_elaborate_command", bbb);
register_builtin(name({"lean", "expr", "local"}), mk_arrow(o, o_o_o_o), "lean_expr_local");
register_builtin(name({"lean", "environment", "empty"}), o, "lean_environment_empty");
register_builtin(name({"lean", "environment", "contains"}), o_o_o, "lean_environment_contains");
register_builtin(name({"lean", "elaborator", "elaborate_command"}), o_o_o_o, "lean_elaborator_elaborate_command");
}
void finalize_builtin() {