feat(library/kernel_bindings): expose instantiate_levels
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
1c96373c1a
commit
220f94d36e
1 changed files with 25 additions and 15 deletions
|
@ -245,6 +245,26 @@ static void open_level(lua_State * L) {
|
||||||
lua_setglobal(L, "level_kind");
|
lua_setglobal(L, "level_kind");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static list<name> to_level_param_names(lua_State * L, int _idx) {
|
||||||
|
if (is_list_name(L, _idx)) {
|
||||||
|
return to_list_name(L, _idx);
|
||||||
|
} else{
|
||||||
|
return table_to_list<name>(L, _idx, [=](lua_State * L, int idx) -> name {
|
||||||
|
if (is_level(L, idx)) {
|
||||||
|
level const & l = to_level(L, idx);
|
||||||
|
if (is_param(l))
|
||||||
|
return param_id(l);
|
||||||
|
else if (is_global(l))
|
||||||
|
return global_id(l);
|
||||||
|
else
|
||||||
|
throw exception(sstream() << "arg #" << _idx << " contain a level expression that is not a parameter/global");
|
||||||
|
} else {
|
||||||
|
return to_name_ext(L, idx);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Expr_binder_info
|
// Expr_binder_info
|
||||||
DECL_UDATA(binder_info)
|
DECL_UDATA(binder_info)
|
||||||
static int mk_binder_info(lua_State * L) {
|
static int mk_binder_info(lua_State * L) {
|
||||||
|
@ -687,6 +707,10 @@ static int expr_instantiate(lua_State * L) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int expr_instantiate_level_params(lua_State * L) {
|
||||||
|
return push_expr(L, instantiate_params(to_expr(L, 1), to_level_param_names(L, 2), to_list_level_ext(L, 3)));
|
||||||
|
}
|
||||||
|
|
||||||
static int expr_abstract(lua_State * L) {
|
static int expr_abstract(lua_State * L) {
|
||||||
expr const & e = to_expr(L, 1);
|
expr const & e = to_expr(L, 1);
|
||||||
if (is_expr(L, 2)) {
|
if (is_expr(L, 2)) {
|
||||||
|
@ -779,6 +803,7 @@ static const struct luaL_Reg expr_m[] = {
|
||||||
{"lift_free_vars", safe_function<expr_lift_free_vars>},
|
{"lift_free_vars", safe_function<expr_lift_free_vars>},
|
||||||
{"lower_free_vars", safe_function<expr_lower_free_vars>},
|
{"lower_free_vars", safe_function<expr_lower_free_vars>},
|
||||||
{"instantiate", safe_function<expr_instantiate>},
|
{"instantiate", safe_function<expr_instantiate>},
|
||||||
|
{"instantiate_levels", safe_function<expr_instantiate_level_params>},
|
||||||
{"abstract", safe_function<expr_abstract>},
|
{"abstract", safe_function<expr_abstract>},
|
||||||
{"occurs", safe_function<expr_occurs>},
|
{"occurs", safe_function<expr_occurs>},
|
||||||
{"is_eqp", safe_function<expr_is_eqp>},
|
{"is_eqp", safe_function<expr_is_eqp>},
|
||||||
|
@ -897,21 +922,6 @@ static int declaration_get_value(lua_State * L) {
|
||||||
throw exception("arg #1 must be a definition");
|
throw exception("arg #1 must be a definition");
|
||||||
}
|
}
|
||||||
static int declaration_get_weight(lua_State * L) { return push_integer(L, to_declaration(L, 1).get_weight()); }
|
static int declaration_get_weight(lua_State * L) { return push_integer(L, to_declaration(L, 1).get_weight()); }
|
||||||
static list<name> to_level_param_names(lua_State * L, int _idx) {
|
|
||||||
return table_to_list<name>(L, _idx, [=](lua_State * L, int idx) -> name {
|
|
||||||
if (is_level(L, idx)) {
|
|
||||||
level const & l = to_level(L, idx);
|
|
||||||
if (is_param(l))
|
|
||||||
return param_id(l);
|
|
||||||
else if (is_global(l))
|
|
||||||
return global_id(l);
|
|
||||||
else
|
|
||||||
throw exception(sstream() << "arg #" << _idx << " contain a level expression that is not a parameter/global");
|
|
||||||
} else {
|
|
||||||
return to_name_ext(L, idx);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static int declaration_get_module_idx(lua_State * L) { return push_integer(L, to_declaration(L, 1).get_module_idx()); }
|
static int declaration_get_module_idx(lua_State * L) { return push_integer(L, to_declaration(L, 1).get_module_idx()); }
|
||||||
static int mk_var_decl(lua_State * L) {
|
static int mk_var_decl(lua_State * L) {
|
||||||
int nargs = lua_gettop(L);
|
int nargs = lua_gettop(L);
|
||||||
|
|
Loading…
Reference in a new issue