static int get_choice(lua_State * L) { check_choice(L, 1); expr const & c = to_expr(L, 1); int i = lua_tointeger(L, 2); if (i < 0 || static_cast<unsigned>(i) >= get_num_choices(c)) throw exception("arg #2 is an invalid choice index"); return push_expr(L, get_choice(c, i)); }
list<list<name>> collect_choice_symbols(expr const & e) { buffer<list<name>> r; for_each(e, [&](expr const & e, unsigned) { if (is_choice(e)) { buffer<name> cs; for (unsigned i = 0; i < get_num_choices(e); i++) { expr const & c = get_app_fn(get_choice(e, i)); if (is_constant(c)) cs.push_back(const_name(c)); else if (is_local(c)) cs.push_back(mlocal_pp_name(c)); } if (cs.size() > 1) r.push_back(to_list(cs)); } return true; }); return to_list(r); }
static int get_num_choices(lua_State * L) { check_choice(L, 1); return push_integer(L, get_num_choices(to_expr(L, 1))); }