Skip to content
Snippets Groups Projects
Commit 3c6c1cc9 authored by Serge Petrenko's avatar Serge Petrenko Committed by Vladimir Davydov
Browse files

lua: fix decimal comparison with nil

Previously decimal comparison with nil failed with following error:
`expected decimal, number or string as 2 argument`.
Fix this. Throw a more verbose error in case of '>', '<', '>=', '<='
and fix equality check.

Follow-up #692
parent 7e51aebb
No related branches found
No related tags found
No related merge requests found
......@@ -69,6 +69,10 @@ ldecimal_##name(struct lua_State *L) { \
static int \
ldecimal_##name(struct lua_State *L) { \
assert(lua_gettop(L) == 2); \
if (lua_isnil(L, 1) || lua_isnil(L, 2)) { \
luaL_error(L, "attempt to compare decimal with nil"); \
return 1; \
} \
decimal_t *lhs = lua_todecimal(L, 1); \
decimal_t *rhs = lua_todecimal(L, 2); \
lua_pushboolean(L, decimal_compare(lhs, rhs) cmp 0); \
......@@ -226,10 +230,23 @@ LDECIMAL_FUNC(exp, exp)
LDECIMAL_FUNC(sqrt, sqrt)
LDECIMAL_FUNC(abs, abs)
LDECIMAL_CMPOP(eq, ==)
LDECIMAL_CMPOP(lt, <)
LDECIMAL_CMPOP(le, <=)
static int
ldecimal_eq(struct lua_State *L)
{
assert(lua_gettop(L) == 2);
if (lua_isnil(L, 1) || lua_isnil(L, 2)) {
lua_pushboolean(L, false);
return 1;
}
decimal_t *lhs = lua_todecimal(L, 1);
decimal_t *rhs = lua_todecimal(L, 2);
lua_pushboolean(L, decimal_compare(lhs, rhs) == 0);
return 1;
}
static int
ldecimal_minus(struct lua_State *L)
{
......
......@@ -223,6 +223,32 @@ b
| - '0.1'
| ...
-- check comparsion with nil
a == nil
| ---
| - false
| ...
a ~= nil
| ---
| - true
| ...
a > nil
| ---
| - error: '[string "return a > nil "]:1: attempt to compare decimal with nil'
| ...
a < nil
| ---
| - error: '[string "return a < nil "]:1: attempt to compare decimal with nil'
| ...
a >= nil
| ---
| - error: '[string "return a >= nil "]:1: attempt to compare decimal with nil'
| ...
a <= nil
| ---
| - error: '[string "return a <= nil "]:1: attempt to compare decimal with nil'
| ...
decimal.sqrt(a)
| ---
| - '3.1622776601683793319988935444327185337'
......
......@@ -62,6 +62,14 @@ a ~= b
a
b
-- check comparsion with nil
a == nil
a ~= nil
a > nil
a < nil
a >= nil
a <= nil
decimal.sqrt(a)
decimal.ln(a)
decimal.log10(a)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment