diff --git a/core/tarantool_lua.m b/core/tarantool_lua.m index 32790e1001adf2500cc3e87e4326c929e8e8572f..951baf5d8b67b625b34bd53d1deb8a86d694bbfd 100644 --- a/core/tarantool_lua.m +++ b/core/tarantool_lua.m @@ -38,6 +38,7 @@ #include "lj_ctype.h" #include "lj_cdata.h" #include "lj_cconv.h" +#include "lj_state.h" #include "pickle.h" #include "fiber.h" @@ -252,10 +253,10 @@ luaL_pushcdata(struct lua_State *L, CTypeID id, int bits) CTSize sz; lj_ctype_info(cts, id, &sz); GCcdata *cd = lj_cdata_new(cts, id, bits); - TValue *o = L->base + 1; - setcdataV(L, o - 1, cd); + TValue *o = L->top; + setcdataV(L, o, cd); lj_cconv_ct_init(cts, ct, sz, cdataptr(cd), o, 0); - L->top = o; + incr_top(L); return cd; } diff --git a/test/box_big/lua.result b/test/box_big/lua.result index 9b60d8228a1bc77d5bfeeea6eec79c9487253c8f..7824c223facbbab8a642fb92e964a64334222bac 100644 --- a/test/box_big/lua.result +++ b/test/box_big/lua.result @@ -95,3 +95,18 @@ lua num == tonumber64('18446744073709551615') --- - true ... +lua num,num1,num2 = box.unpack('lll', tu[0], tu[0], tu[0]) +--- +... +lua num == tonumber64('18446744073709551615') +--- + - true +... +lua num1 == tonumber64('18446744073709551615') +--- + - true +... +lua num2 == tonumber64('18446744073709551615') +--- + - true +... diff --git a/test/box_big/lua.test b/test/box_big/lua.test index 0c43ab7c6b1cf0d1c50d80587cc1fa8c8102f16c..557f85498b9b7acc86008536441694908eeed1fb 100644 --- a/test/box_big/lua.test +++ b/test/box_big/lua.test @@ -47,3 +47,7 @@ exec admin "lua num = box.unpack('l', tu[0])" exec admin "lua print(num)" exec admin "lua type(num) == 'cdata'" exec admin "lua num == tonumber64('18446744073709551615')" +exec admin "lua num,num1,num2 = box.unpack('lll', tu[0], tu[0], tu[0])" +exec admin "lua num == tonumber64('18446744073709551615')" +exec admin "lua num1 == tonumber64('18446744073709551615')" +exec admin "lua num2 == tonumber64('18446744073709551615')"