| 998 | } |
| 999 | |
| 1000 | static int l_cmp(Lua lua, int op) |
| 1001 | { |
| 1002 | nullchk(lua, 1); |
| 1003 | nullchk(lua, 2); |
| 1004 | |
| 1005 | rank_t rank1 = getrank(lua, 1); |
| 1006 | rank_t rank2 = getrank(lua, 2); |
| 1007 | |
| 1008 | rank_t min = rank1 < rank2 ? rank1 : rank2; |
| 1009 | rank_t max = rank1 > rank2 ? rank1 : rank2; |
| 1010 | |
| 1011 | if (min == 0) { // got one nil |
| 1012 | if (op == LUA_OP_EQ) |
| 1013 | lua_pushboolean(lua, 0); // nil compares false in equality |
| 1014 | else |
| 1015 | typecmperr(lua, 1, 2); |
| 1016 | return 0; |
| 1017 | } |
| 1018 | |
| 1019 | switch (max) { |
| 1020 | case RANK_INT: l_int_cmp(lua, op); break; |
| 1021 | case RANK_REAL: l_real_cmp(lua, op); break; |
| 1022 | case RANK_DECIMAL: l_decimal_cmp(lua, op); break; |
| 1023 | case RANK_INTERVALDS: l_intervalds_cmp(lua, op); break; |
| 1024 | case RANK_INTERVALYM: l_intervalym_cmp(lua, op); break; |
| 1025 | case RANK_DATETIME: l_datetime_cmp(lua, op); break; |
| 1026 | default: |
| 1027 | if (op == LUA_OP_EQ) |
| 1028 | lua_pushboolean(lua, 0); |
| 1029 | else |
| 1030 | typecmperr(lua, 1, 2); |
| 1031 | } |
| 1032 | return 0; |
| 1033 | } |
| 1034 | |
| 1035 | static int l_eq(Lua lua) |
| 1036 | { |
no test coverage detected