aboutsummaryrefslogtreecommitdiff
path: root/src/keeper.cpp
diff options
context:
space:
mode:
authorBenoit Germain <benoit.germain@ubisoft.com>2024-03-25 10:43:25 +0100
committerBenoit Germain <benoit.germain@ubisoft.com>2024-03-25 10:43:25 +0100
commit0c060e6e4b9f99dc887b5dfebdae76fcde9524f1 (patch)
tree2ba9a1923e3e983375e33aa5f41d9fbc21451832 /src/keeper.cpp
parentdad1d5fbf7c7a30caea00694de608c6036789aa5 (diff)
downloadlanes-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.cpp46
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 };
170static void push_table(lua_State* L, int idx_) 170static 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
246int keepercall_clear(lua_State* L) 246int 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 */
638void init_keepers(Universe* U, lua_State* L) 638void 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// ##################################################################################################