@@ -22651,14 +22651,14 @@ LUALIB_API void luaL_checkversion_ (lua_State *L, lua_Number ver, size_t sz) {
22651
22651
#define PRIVATE_LUA_CEMBED_MAIN_META_TABLE "private_lua_c_embed_main_meta_table"
22652
22652
22653
22653
22654
- #define PRIVATE_LUA_CEMBE_SUB_ARG_TABLE "private_lua_c_embed_table_arg_%s_%d"
22655
22654
#define PRIVATE_LUA_CEMBED_ANONYMOUS_TABLE "private_lua_c_embed_anononymous_table_%ld"
22656
22655
#define PRIVATE_LUA_CEMBED_ANONYMOUS_FUNC_TABLE "private_lua_c_embed_anononymous_func_table_%ld"
22657
22656
22658
22657
#define PRIVATE_LUA_CEMBED_SELFNAME "private_lua_c_embed_self"
22659
22658
#define PRIVATE_LUA_CEMBED_MULTIRETURN "private_lua_c_embed_multi_return%d"
22660
22659
#define PRIVATE_LUA_CEMBED_STAGE_AREA_TABLE "private_lua_c_embed_stage_area_table"
22661
22660
#define PRIVATE_LUA_CEMBED_ARGS "private_lua_c_embed_args%d"
22661
+ #define PRIVATE_LUA_CEMBED_TABLE_RETURN "private_lua_embed_table_return"
22662
22662
22663
22663
22664
22664
@@ -22815,6 +22815,8 @@ int private_lua_cEmbed_unpack(LuaCEmbedTable *self,const char * previews_functi
22815
22815
22816
22816
void privateLuaCEmbedTable_free(LuaCEmbedTable *self);
22817
22817
22818
+ void privateLuaCEmbedTable_free_setting_nill(LuaCEmbedTable *self);
22819
+
22818
22820
22819
22821
22820
22822
@@ -23483,14 +23485,16 @@ LuaCEmbedResponse * LuaCEmbed_send_error(const char *text){
23483
23485
LuaCEmbedResponse * LuaCEmbed_send_multi_return(LuaCEmbedTable *table){
23484
23486
LuaCEmbedResponse * self= private_LuaCEmbedReturn_raw();
23485
23487
self->type = PRIVATE_LUA_CEMBED_MULTI_RESPONSE;
23486
- self->string_val = strdup(table->global_name);
23488
+ lua_getglobal(table->main_object->state,table->global_name);
23489
+ lua_setglobal(table->main_object->state,PRIVATE_LUA_CEMBED_TABLE_RETURN);
23487
23490
return self;
23488
23491
}
23489
23492
23490
23493
LuaCEmbedResponse * LuaCEmbed_send_table(LuaCEmbedTable *table){
23491
23494
LuaCEmbedResponse * self= private_LuaCEmbedReturn_raw();
23492
23495
self->type = PRIVATE_LUA_CEMBED_TABLE_RESPONSE;
23493
- self->string_val = strdup(table->global_name);
23496
+ lua_getglobal(table->main_object->state,table->global_name);
23497
+ lua_setglobal(table->main_object->state,PRIVATE_LUA_CEMBED_TABLE_RETURN);
23494
23498
return self;
23495
23499
}
23496
23500
@@ -24071,10 +24075,8 @@ LuaCEmbedTable * private_newLuaCembedTable(LuaCEmbed *main_embed, const char *fo
24071
24075
24072
24076
return (int)size;
24073
24077
}
24074
-
24075
24078
void privateLuaCEmbedTable_free(LuaCEmbedTable *self){
24076
24079
24077
-
24078
24080
free(self->global_name);
24079
24081
24080
24082
if(self->prop_name){
@@ -24085,6 +24087,13 @@ void privateLuaCEmbedTable_free(LuaCEmbedTable *self){
24085
24087
free(self);
24086
24088
}
24087
24089
24090
+ void privateLuaCEmbedTable_free_setting_nill(LuaCEmbedTable *self){
24091
+
24092
+ lua_getglobal(self->main_object->state,self->global_name);
24093
+ lua_pushnil(self->main_object->state);
24094
+ privateLuaCEmbedTable_free(self);
24095
+ }
24096
+
24088
24097
24089
24098
24090
24099
@@ -25265,7 +25274,7 @@ void privateLuaCEmbedTableArray_free(privateLuaCEmbedTableArray *self){
25265
25274
25266
25275
for(int i = 0; i < self->size;i++){
25267
25276
LuaCEmbedTable *current_table = self->tables[i];
25268
- privateLuaCEmbedTable_free (current_table);
25277
+ privateLuaCEmbedTable_free_setting_nill (current_table);
25269
25278
25270
25279
}
25271
25280
@@ -25520,7 +25529,7 @@ int privateLuaCEmbed_main_callback_handler(lua_State *L){
25520
25529
const char *func_name = lua_tostring(L,lua_upvalueindex(3));
25521
25530
self->current_function = func_name;
25522
25531
bool func_tables_created_in_these_scope = false;
25523
-
25532
+ //these its nescessary for function clojures like map, filter, where the stack will be increased
25524
25533
if(self->func_tables == NULL) {
25525
25534
self->func_tables = (void*)newprivateLuaCEmbedTableArray();
25526
25535
func_tables_created_in_these_scope = true;
@@ -25537,14 +25546,15 @@ int privateLuaCEmbed_main_callback_handler(lua_State *L){
25537
25546
LuaCEmbedTable *table = private_newLuaCembedTable(self, PRIVATE_LUA_CEMBED_SELFNAME);
25538
25547
method_callback = (LuaCEmbedResponse *(*)(LuaCEmbedTable *tb, LuaCEmbed *self))lua_touserdata(L, lua_upvalueindex(5));
25539
25548
possible_return = method_callback(table,self);
25540
- privateLuaCEmbedTable_free (table);
25549
+ privateLuaCEmbedTable_free_setting_nill (table);
25541
25550
}
25542
25551
25543
25552
if(is_a_function){
25544
25553
LuaCEmbedResponse *(*function_callback)(LuaCEmbed *self);
25545
25554
function_callback = (LuaCEmbedResponse *(*)(LuaCEmbed *self))lua_touserdata(L, lua_upvalueindex(4));
25546
25555
possible_return = function_callback(self);
25547
25556
}
25557
+
25548
25558
if(func_tables_created_in_these_scope) {
25549
25559
privateLuaCEmbedTableArray_free((privateLuaCEmbedTableArray*)self->func_tables);
25550
25560
self->func_tables = NULL;
@@ -25598,14 +25608,14 @@ int privateLuaCEmbed_main_callback_handler(lua_State *L){
25598
25608
}
25599
25609
25600
25610
if(possible_return->type == PRIVATE_LUA_CEMBED_TABLE_RESPONSE){
25601
- lua_getglobal(self->state, possible_return->string_val );
25611
+ lua_getglobal(self->state, PRIVATE_LUA_CEMBED_TABLE_RETURN );
25602
25612
lua_pushvalue(self->state,-1);
25603
25613
private_LuaCEmbedResponse_free(possible_return);
25604
25614
return PRIVATE_LUACEMBED_ONE_RETURN;
25605
25615
}
25606
25616
25607
25617
if(possible_return->type == PRIVATE_LUA_CEMBED_MULTI_RESPONSE){
25608
- LuaCEmbedTable *table = private_newLuaCembedTable(self, possible_return->string_val );
25618
+ LuaCEmbedTable *table = private_newLuaCembedTable(self, PRIVATE_LUA_CEMBED_TABLE_RETURN );
25609
25619
int size =private_lua_cEmbed_unpack(table,NULL);
25610
25620
private_LuaCEmbedResponse_free(possible_return);
25611
25621
privateLuaCEmbedTable_free(table);
0 commit comments