@@ -263,12 +263,8 @@ append_key(struct bson *bs, int type, const char *key, size_t sz) {
263
263
264
264
static void
265
265
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 );
272
268
int si = i >> 31 ;
273
269
if (si == 0 || si == -1 ) {
274
270
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) {
277
273
append_key (bs , BSON_INT64 , key , sz );
278
274
write_int64 (bs , i );
279
275
}
276
+ } else {
277
+ lua_Number d = lua_tonumber (L ,-1 );
278
+ append_key (bs , BSON_REAL , key , sz );
279
+ write_double (bs , d );
280
280
}
281
281
}
282
282
@@ -797,20 +797,18 @@ lreplace(lua_State *L) {
797
797
replace_object (L , type , & b );
798
798
break ;
799
799
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 ));
804
802
}
803
+ int32_t i = lua_tointeger (L ,3 );
805
804
write_int32 (& b , i );
806
805
break ;
807
806
}
808
807
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 ));
813
810
}
811
+ int64_t i = lua_tointeger (L ,3 );
814
812
write_int64 (& b , i );
815
813
break ;
816
814
}
0 commit comments