Skip to content

Commit da9e8fe

Browse files
committed
use lua 5.3 lua_isinteger
1 parent 5c07652 commit da9e8fe

File tree

1 file changed

+12
-14
lines changed

1 file changed

+12
-14
lines changed

lualib-src/lua-bson.c

+12-14
Original file line numberDiff line numberDiff line change
@@ -263,12 +263,8 @@ append_key(struct bson *bs, int type, const char *key, size_t sz) {
263263

264264
static void
265265
append_number(struct bson *bs, lua_State *L, const char *key, size_t sz) {
266-
int64_t i = lua_tointeger(L, -1);
267-
lua_Number d = lua_tonumber(L,-1);
268-
if (i != d) {
269-
append_key(bs, BSON_REAL, key, sz);
270-
write_double(bs, d);
271-
} else {
266+
if (lua_isinteger(L, -1)) {
267+
int64_t i = lua_tointeger(L, -1);
272268
int si = i >> 31;
273269
if (si == 0 || si == -1) {
274270
append_key(bs, BSON_INT32, key, sz);
@@ -277,6 +273,10 @@ append_number(struct bson *bs, lua_State *L, const char *key, size_t sz) {
277273
append_key(bs, BSON_INT64, key, sz);
278274
write_int64(bs, i);
279275
}
276+
} else {
277+
lua_Number d = lua_tonumber(L,-1);
278+
append_key(bs, BSON_REAL, key, sz);
279+
write_double(bs, d);
280280
}
281281
}
282282

@@ -797,20 +797,18 @@ lreplace(lua_State *L) {
797797
replace_object(L, type, &b);
798798
break;
799799
case BSON_INT32: {
800-
double d = luaL_checknumber(L,3);
801-
int32_t i = lua_tointeger(L,3);
802-
if ((int32_t)d != i) {
803-
luaL_error(L, "%f must be a 32bit integer ", d);
800+
if (!lua_isinteger(L, 3)) {
801+
luaL_error(L, "%f must be a 32bit integer ", lua_tonumber(L, 3));
804802
}
803+
int32_t i = lua_tointeger(L,3);
805804
write_int32(&b, i);
806805
break;
807806
}
808807
case BSON_INT64: {
809-
double d = luaL_checknumber(L,3);
810-
lua_Integer i = lua_tointeger(L,3);
811-
if ((lua_Integer)d != i) {
812-
luaL_error(L, "%f must be a 64bit integer ", d);
808+
if (!lua_isinteger(L, 3)) {
809+
luaL_error(L, "%f must be a 64bit integer ", lua_tonumber(L, 3));
813810
}
811+
int64_t i = lua_tointeger(L,3);
814812
write_int64(&b, i);
815813
break;
816814
}

0 commit comments

Comments
 (0)