feat(library/kernel_bindings): improve Fun/Pi Lua APIs
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
eb6807e1d3
commit
4103c85ce3
1 changed files with 18 additions and 11 deletions
|
@ -430,8 +430,12 @@ static int expr_abst(lua_State * L) {
|
||||||
if (nargs < 2)
|
if (nargs < 2)
|
||||||
throw exception("function must have at least 2 arguments");
|
throw exception("function must have at least 2 arguments");
|
||||||
if (nargs == 2) {
|
if (nargs == 2) {
|
||||||
if (!lua_istable(L, 1))
|
if (is_expr(L, 1) && is_local(to_expr(L, 1))) {
|
||||||
throw exception("function expects arg #1 to be of the form '{{expr, expr}, ...}'");
|
if (pi)
|
||||||
|
return push_expr(L, Pi(to_expr(L, 1), to_expr(L, 2)));
|
||||||
|
else
|
||||||
|
return push_expr(L, Fun(to_expr(L, 1), to_expr(L, 2)));
|
||||||
|
} else if (lua_istable(L, 1)) {
|
||||||
int len = objlen(L, 1);
|
int len = objlen(L, 1);
|
||||||
if (len == 0)
|
if (len == 0)
|
||||||
throw exception("function expects arg #1 to be a non-empty table");
|
throw exception("function expects arg #1 to be a non-empty table");
|
||||||
|
@ -444,6 +448,9 @@ static int expr_abst(lua_State * L) {
|
||||||
r = Fun(std::get<0>(p), std::get<1>(p), r, std::get<2>(p));
|
r = Fun(std::get<0>(p), std::get<1>(p), r, std::get<2>(p));
|
||||||
}
|
}
|
||||||
return push_expr(L, r);
|
return push_expr(L, r);
|
||||||
|
} else {
|
||||||
|
throw exception("function expects arg #1 to be a local constant or a table of the form '{{expr, expr}, ...}'");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
if (nargs % 2 == 0)
|
if (nargs % 2 == 0)
|
||||||
throw exception("function must have an odd number of arguments");
|
throw exception("function must have an odd number of arguments");
|
||||||
|
|
Loading…
Reference in a new issue