diff options
author | Benoit Germain <benoit.germain@ubisoft.com> | 2024-03-25 10:43:25 +0100 |
---|---|---|
committer | Benoit Germain <benoit.germain@ubisoft.com> | 2024-03-25 10:43:25 +0100 |
commit | 0c060e6e4b9f99dc887b5dfebdae76fcde9524f1 (patch) | |
tree | 2ba9a1923e3e983375e33aa5f41d9fbc21451832 /src/keeper.cpp | |
parent | dad1d5fbf7c7a30caea00694de608c6036789aa5 (diff) | |
download | lanes-0c060e6e4b9f99dc887b5dfebdae76fcde9524f1.tar.gz lanes-0c060e6e4b9f99dc887b5dfebdae76fcde9524f1.tar.bz2 lanes-0c060e6e4b9f99dc887b5dfebdae76fcde9524f1.zip |
C++ migration: revamped stack checking macros
Diffstat (limited to 'src/keeper.cpp')
-rw-r--r-- | src/keeper.cpp | 46 |
1 files changed, 23 insertions, 23 deletions
diff --git a/src/keeper.cpp b/src/keeper.cpp index 0cb1a94..19f6ae1 100644 --- a/src/keeper.cpp +++ b/src/keeper.cpp | |||
@@ -170,12 +170,12 @@ static constexpr UniqueKey FIFOS_KEY{ 0xdce50bbc351cd465ull }; | |||
170 | static void push_table(lua_State* L, int idx_) | 170 | static void push_table(lua_State* L, int idx_) |
171 | { | 171 | { |
172 | STACK_GROW(L, 4); | 172 | STACK_GROW(L, 4); |
173 | STACK_CHECK(L, 0); | 173 | STACK_CHECK_START_REL(L, 0); |
174 | idx_ = lua_absindex(L, idx_); | 174 | idx_ = lua_absindex(L, idx_); |
175 | FIFOS_KEY.query_registry(L); // ud fifos | 175 | FIFOS_KEY.query_registry(L); // ud fifos |
176 | lua_pushvalue(L, idx_); // ud fifos ud | 176 | lua_pushvalue(L, idx_); // ud fifos ud |
177 | lua_rawget(L, -2); // ud fifos fifos[ud] | 177 | lua_rawget(L, -2); // ud fifos fifos[ud] |
178 | STACK_MID(L, 2); | 178 | STACK_CHECK(L, 2); |
179 | if (lua_isnil(L, -1)) | 179 | if (lua_isnil(L, -1)) |
180 | { | 180 | { |
181 | lua_pop(L, 1); // ud fifos | 181 | lua_pop(L, 1); // ud fifos |
@@ -186,7 +186,7 @@ static void push_table(lua_State* L, int idx_) | |||
186 | lua_rawset(L, -4); // ud fifos fifos[ud] | 186 | lua_rawset(L, -4); // ud fifos fifos[ud] |
187 | } | 187 | } |
188 | lua_remove(L, -2); // ud fifos[ud] | 188 | lua_remove(L, -2); // ud fifos[ud] |
189 | STACK_END(L, 1); | 189 | STACK_CHECK(L, 1); |
190 | } | 190 | } |
191 | 191 | ||
192 | // ################################################################################################## | 192 | // ################################################################################################## |
@@ -197,7 +197,7 @@ int keeper_push_linda_storage(Universe* U, lua_State* L, void* ptr_, ptrdiff_t m | |||
197 | lua_State* const KL = K ? K->L : nullptr; | 197 | lua_State* const KL = K ? K->L : nullptr; |
198 | if( KL == nullptr) return 0; | 198 | if( KL == nullptr) return 0; |
199 | STACK_GROW(KL, 4); | 199 | STACK_GROW(KL, 4); |
200 | STACK_CHECK(KL, 0); | 200 | STACK_CHECK_START_REL(KL, 0); |
201 | FIFOS_KEY.query_registry(KL); // fifos | 201 | FIFOS_KEY.query_registry(KL); // fifos |
202 | lua_pushlightuserdata(KL, ptr_); // fifos ud | 202 | lua_pushlightuserdata(KL, ptr_); // fifos ud |
203 | lua_rawget(KL, -2); // fifos storage | 203 | lua_rawget(KL, -2); // fifos storage |
@@ -205,38 +205,38 @@ int keeper_push_linda_storage(Universe* U, lua_State* L, void* ptr_, ptrdiff_t m | |||
205 | if( !lua_istable(KL, -1)) | 205 | if( !lua_istable(KL, -1)) |
206 | { | 206 | { |
207 | lua_pop(KL, 1); // | 207 | lua_pop(KL, 1); // |
208 | STACK_MID(KL, 0); | 208 | STACK_CHECK(KL, 0); |
209 | return 0; | 209 | return 0; |
210 | } | 210 | } |
211 | // move data from keeper to destination state KEEPER MAIN | 211 | // move data from keeper to destination state KEEPER MAIN |
212 | lua_pushnil(KL); // storage nil | 212 | lua_pushnil(KL); // storage nil |
213 | STACK_GROW(L, 5); | 213 | STACK_GROW(L, 5); |
214 | STACK_CHECK(L, 0); | 214 | STACK_CHECK_START_REL(L, 0); |
215 | lua_newtable(L); // out | 215 | lua_newtable(L); // out |
216 | while( lua_next(KL, -2)) // storage key fifo | 216 | while( lua_next(KL, -2)) // storage key fifo |
217 | { | 217 | { |
218 | keeper_fifo* fifo = prepare_fifo_access(KL, -1); // storage key fifo | 218 | keeper_fifo* fifo = prepare_fifo_access(KL, -1); // storage key fifo |
219 | lua_pushvalue(KL, -2); // storage key fifo key | 219 | lua_pushvalue(KL, -2); // storage key fifo key |
220 | luaG_inter_move(U, KL, L, 1, eLM_FromKeeper); // storage key fifo // out key | 220 | luaG_inter_move(U, KL, L, 1, eLM_FromKeeper); // storage key fifo // out key |
221 | STACK_MID(L, 2); | 221 | STACK_CHECK(L, 2); |
222 | lua_newtable(L); // out key keyout | 222 | lua_newtable(L); // out key keyout |
223 | luaG_inter_move(U, KL, L, 1, eLM_FromKeeper); // storage key // out key keyout fifo | 223 | luaG_inter_move(U, KL, L, 1, eLM_FromKeeper); // storage key // out key keyout fifo |
224 | lua_pushinteger(L, fifo->first); // out key keyout fifo first | 224 | lua_pushinteger(L, fifo->first); // out key keyout fifo first |
225 | STACK_MID(L, 5); | 225 | STACK_CHECK(L, 5); |
226 | lua_setfield(L, -3, "first"); // out key keyout fifo | 226 | lua_setfield(L, -3, "first"); // out key keyout fifo |
227 | lua_pushinteger(L, fifo->count); // out key keyout fifo count | 227 | lua_pushinteger(L, fifo->count); // out key keyout fifo count |
228 | STACK_MID(L, 5); | 228 | STACK_CHECK(L, 5); |
229 | lua_setfield(L, -3, "count"); // out key keyout fifo | 229 | lua_setfield(L, -3, "count"); // out key keyout fifo |
230 | lua_pushinteger(L, fifo->limit); // out key keyout fifo limit | 230 | lua_pushinteger(L, fifo->limit); // out key keyout fifo limit |
231 | STACK_MID(L, 5); | 231 | STACK_CHECK(L, 5); |
232 | lua_setfield(L, -3, "limit"); // out key keyout fifo | 232 | lua_setfield(L, -3, "limit"); // out key keyout fifo |
233 | lua_setfield(L, -2, "fifo"); // out key keyout | 233 | lua_setfield(L, -2, "fifo"); // out key keyout |
234 | lua_rawset(L, -3); // out | 234 | lua_rawset(L, -3); // out |
235 | STACK_MID(L, 1); | 235 | STACK_CHECK(L, 1); |
236 | } | 236 | } |
237 | STACK_END(L, 1); | 237 | STACK_CHECK(L, 1); |
238 | lua_pop(KL, 1); // | 238 | lua_pop(KL, 1); // |
239 | STACK_END(KL, 0); | 239 | STACK_CHECK(KL, 0); |
240 | return 1; | 240 | return 1; |
241 | } | 241 | } |
242 | 242 | ||
@@ -246,13 +246,13 @@ int keeper_push_linda_storage(Universe* U, lua_State* L, void* ptr_, ptrdiff_t m | |||
246 | int keepercall_clear(lua_State* L) | 246 | int keepercall_clear(lua_State* L) |
247 | { | 247 | { |
248 | STACK_GROW(L, 3); | 248 | STACK_GROW(L, 3); |
249 | STACK_CHECK(L, 0); | 249 | STACK_CHECK_START_REL(L, 0); |
250 | FIFOS_KEY.query_registry(L); // ud fifos | 250 | FIFOS_KEY.query_registry(L); // ud fifos |
251 | lua_pushvalue(L, 1); // ud fifos ud | 251 | lua_pushvalue(L, 1); // ud fifos ud |
252 | lua_pushnil(L); // ud fifos ud nil | 252 | lua_pushnil(L); // ud fifos ud nil |
253 | lua_rawset(L, -3); // ud fifos | 253 | lua_rawset(L, -3); // ud fifos |
254 | lua_pop(L, 1); // ud | 254 | lua_pop(L, 1); // ud |
255 | STACK_END(L, 0); | 255 | STACK_CHECK(L, 0); |
256 | return 0; | 256 | return 0; |
257 | } | 257 | } |
258 | 258 | ||
@@ -637,7 +637,7 @@ void close_keepers(Universe* U) | |||
637 | */ | 637 | */ |
638 | void init_keepers(Universe* U, lua_State* L) | 638 | void init_keepers(Universe* U, lua_State* L) |
639 | { | 639 | { |
640 | STACK_CHECK(L, 0); // L K | 640 | STACK_CHECK_START_REL(L, 0); // L K |
641 | lua_getfield(L, 1, "nb_keepers"); // nb_keepers | 641 | lua_getfield(L, 1, "nb_keepers"); // nb_keepers |
642 | int nb_keepers{ static_cast<int>(lua_tointeger(L, -1)) }; | 642 | int nb_keepers{ static_cast<int>(lua_tointeger(L, -1)) }; |
643 | lua_pop(L, 1); // | 643 | lua_pop(L, 1); // |
@@ -677,19 +677,19 @@ void init_keepers(Universe* U, lua_State* L) | |||
677 | // therefore, we need a recursive mutex. | 677 | // therefore, we need a recursive mutex. |
678 | MUTEX_RECURSIVE_INIT(&U->keepers->keeper_array[i].keeper_cs); | 678 | MUTEX_RECURSIVE_INIT(&U->keepers->keeper_array[i].keeper_cs); |
679 | 679 | ||
680 | STACK_CHECK(K, 0); | 680 | STACK_CHECK_START_ABS(K, 0); |
681 | 681 | ||
682 | // copy the universe pointer in the keeper itself | 682 | // copy the universe pointer in the keeper itself |
683 | universe_store(K, U); | 683 | universe_store(K, U); |
684 | STACK_MID(K, 0); | 684 | STACK_CHECK(K, 0); |
685 | 685 | ||
686 | // make sure 'package' is initialized in keeper states, so that we have require() | 686 | // make sure 'package' is initialized in keeper states, so that we have require() |
687 | // this because this is needed when transferring deep userdata object | 687 | // this because this is needed when transferring deep userdata object |
688 | luaL_requiref(K, "package", luaopen_package, 1); // package | 688 | luaL_requiref(K, "package", luaopen_package, 1); // package |
689 | lua_pop(K, 1); // | 689 | lua_pop(K, 1); // |
690 | STACK_MID(K, 0); | 690 | STACK_CHECK(K, 0); |
691 | serialize_require(DEBUGSPEW_PARAM_COMMA(U) K); | 691 | serialize_require(DEBUGSPEW_PARAM_COMMA(U) K); |
692 | STACK_MID(K, 0); | 692 | STACK_CHECK(K, 0); |
693 | 693 | ||
694 | // copy package.path and package.cpath from the source state | 694 | // copy package.path and package.cpath from the source state |
695 | lua_getglobal(L, "package"); // "..." keepersUD package | 695 | lua_getglobal(L, "package"); // "..." keepersUD package |
@@ -705,7 +705,7 @@ void init_keepers(Universe* U, lua_State* L) | |||
705 | } | 705 | } |
706 | } | 706 | } |
707 | lua_pop(L, 1); // | 707 | lua_pop(L, 1); // |
708 | STACK_MID(L, 0); | 708 | STACK_CHECK(L, 0); |
709 | 709 | ||
710 | // attempt to call on_state_create(), if we have one and it is a C function | 710 | // attempt to call on_state_create(), if we have one and it is a C function |
711 | // (only support a C function because we can't transfer executable Lua code in keepers) | 711 | // (only support a C function because we can't transfer executable Lua code in keepers) |
@@ -717,9 +717,9 @@ void init_keepers(Universe* U, lua_State* L) | |||
717 | lua_setglobal(K, "decoda_name"); // | 717 | lua_setglobal(K, "decoda_name"); // |
718 | // create the fifos table in the keeper state | 718 | // create the fifos table in the keeper state |
719 | FIFOS_KEY.set_registry(K, [](lua_State* L) { lua_newtable(L); }); | 719 | FIFOS_KEY.set_registry(K, [](lua_State* L) { lua_newtable(L); }); |
720 | STACK_END(K, 0); | 720 | STACK_CHECK(K, 0); |
721 | } | 721 | } |
722 | STACK_END(L, 0); | 722 | STACK_CHECK(L, 0); |
723 | } | 723 | } |
724 | 724 | ||
725 | // ################################################################################################## | 725 | // ################################################################################################## |