@@ -247,7 +247,7 @@ write_double(struct bson *b, lua_Number d) {
247
247
}
248
248
}
249
249
250
- static void pack_dict (lua_State * L , struct bson * b );
250
+ static void pack_dict (lua_State * L , struct bson * b , bool array );
251
251
252
252
static inline void
253
253
append_key (struct bson * bs , int type , const char * key , size_t sz ) {
@@ -291,7 +291,7 @@ append_table(struct bson *bs, lua_State *L, const char *key, size_t sz) {
291
291
} else {
292
292
append_key (bs , BSON_DOCUMENT , key , sz );
293
293
}
294
- pack_dict (L , bs );
294
+ pack_dict (L , bs , isarray );
295
295
}
296
296
297
297
static void
@@ -414,7 +414,8 @@ bson_numstr( char *str, int i ) {
414
414
}
415
415
416
416
static void
417
- pack_dict (lua_State * L , struct bson * b ) {
417
+ pack_dict (lua_State * L , struct bson * b , bool isarray ) {
418
+ int arraydec = isarray ? 1 : 0 ;
418
419
int length = reserve_length (b );
419
420
lua_pushnil (L );
420
421
while (lua_next (L ,-2 ) != 0 ) {
@@ -424,7 +425,7 @@ pack_dict(lua_State *L, struct bson *b) {
424
425
size_t sz ;
425
426
switch (kt ) {
426
427
case LUA_TNUMBER :
427
- sz = bson_numstr (numberkey , lua_tointeger (L ,-2 )- 1 );
428
+ sz = bson_numstr (numberkey , lua_tointeger (L ,-2 )- arraydec );
428
429
key = numberkey ;
429
430
break ;
430
431
case LUA_TSTRING :
@@ -794,7 +795,7 @@ lencode(lua_State *L) {
794
795
bson_create (& b );
795
796
lua_settop (L ,1 );
796
797
luaL_checktype (L , 1 , LUA_TTABLE );
797
- pack_dict (L ,& b );
798
+ pack_dict (L , & b , false );
798
799
void * ud = lua_newuserdata (L , b .size );
799
800
memcpy (ud , b .ptr , b .size );
800
801
bson_destroy (& b );
@@ -1132,4 +1133,3 @@ luaopen_bson(lua_State *L) {
1132
1133
1133
1134
return 1 ;
1134
1135
}
1135
-
0 commit comments