Skip to content

Commit 5e93859

Browse files
att
1 parent b532696 commit 5e93859

File tree

3 files changed

+29
-137
lines changed

3 files changed

+29
-137
lines changed

.idea/editor.xml

Lines changed: 0 additions & 97 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

LuaCEmbed.h

Lines changed: 27 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23088,6 +23088,7 @@ typedef struct LuaCEmbed{
2308823088
int lib_identifier;
2308923089
int stack_leve;
2309023090
char *main_lib_table;
23091+
bool field_protection;
2309123092
}LuaCEmbed;
2309223093

2309323094

@@ -23124,6 +23125,7 @@ bool LuaCEmbed_has_errors(LuaCEmbed *self);
2312423125

2312523126
void LuaCEmbed_clear_errors(LuaCEmbed *self);
2312623127

23128+
void privateLuaCEmbd_get_field_protected(LuaCEmbed *self,const char *name);
2312723129

2312823130
void privateLuaCEmbed_raise_error_not_jumping(LuaCEmbed *self, const char *error, ...);
2312923131

@@ -24117,6 +24119,11 @@ void privata_LuaCEmbed_decrement_stack(LuaCEmbed *self){
2411724119

2411824120
}
2411924121

24122+
void privateLuaCEmbd_get_field_protected(LuaCEmbed *self,const char *name){
24123+
self->field_protection = true;
24124+
lua_getfield(self->state,-1,name);
24125+
self->field_protection = false;
24126+
}
2412024127

2412124128
void LuaCEmbed_free(LuaCEmbed *self){
2412224129
privateLuaCEmbedTableArray_free((privateLuaCEmbedTableArray*)self->global_tables);
@@ -24862,33 +24869,14 @@ bool LuaCEmbedTable_get_bool_by_index(LuaCEmbedTable *self, int index){
2486224869

2486324870
int LuaCEmbedTable_get_type_prop(LuaCEmbedTable *self, const char *name){
2486424871
PRIVATE_LUA_CEMBED_TABLE_PROTECT_NUM
24865-
private_lua_cembed_memory_limit = self->main_object->memory_limit;
24866-
lua_getglobal(self->main_object->state,self->global_name);
24867-
int table_index = lua_gettop(self->main_object->state);
24868-
24869-
lua_pushnil(self->main_object->state);
24870-
while(lua_next(self->main_object->state,table_index)){
24871-
24872-
bool has_key =lua_type(self->main_object->state,-2) == LUA_CEMBED_STRING;
24873-
if(!has_key){
24874-
lua_pop(self->main_object->state,1);
24875-
continue;
24876-
}
24877-
char* key = (char*)lua_tostring(self->main_object->state,-2);
24872+
lua_settop(self->main_object->state,0);
2487824873

24879-
if(strcmp(key,name) != 0){
24880-
lua_pop(self->main_object->state,1);
24881-
continue;
24882-
}
24874+
private_lua_cembed_memory_limit = self->main_object->memory_limit;
2488324875

24884-
int type = lua_type(self->main_object->state,-1);
24885-
lua_pop(self->main_object->state,1);
24886-
PRIVATE_LUA_CEMBED_CLEAR_STACK
24887-
return type;
24888-
}
24876+
lua_getglobal(self->main_object->state,self->global_name);
24877+
privateLuaCEmbd_get_field_protected(self->main_object,name);
24878+
return lua_type(self->main_object->state,-1);
2488924879

24890-
PRIVATE_LUA_CEMBED_CLEAR_STACK
24891-
return LUA_CEMBED_NIL;
2489224880
}
2489324881

2489424882
char* LuaCembedTable_get_string_prop(LuaCEmbedTable *self , const char *name){
@@ -24899,8 +24887,7 @@ char* LuaCembedTable_get_string_prop(LuaCEmbedTable *self , const char *name){
2489924887

2490024888

2490124889
lua_getglobal(self->main_object->state,self->global_name);
24902-
lua_pushstring(self->main_object->state, name);
24903-
lua_gettable(self->main_object->state, -2);
24890+
privateLuaCEmbd_get_field_protected(self->main_object,name);
2490424891
if(privateLuaCEmbedTable_ensure_type_with_key(self, name, LUA_CEMBED_STRING)){
2490524892
return NULL;
2490624893
}
@@ -24917,8 +24904,7 @@ long long LuaCembedTable_get_long_prop(LuaCEmbedTable *self , const char *name
2491724904

2491824905
private_lua_cembed_memory_limit = self->main_object->memory_limit;
2491924906
lua_getglobal(self->main_object->state,self->global_name);
24920-
lua_pushstring(self->main_object->state, name);
24921-
lua_gettable(self->main_object->state, -2);
24907+
privateLuaCEmbd_get_field_protected(self->main_object,name);
2492224908
if(privateLuaCEmbedTable_ensure_type_with_key(self, name, LUA_CEMBED_NUMBER)){
2492324909
return LUA_CEMBED_GENERIC_ERROR;
2492424910
}
@@ -24935,8 +24921,8 @@ double LuaCembedTable_get_double_prop(LuaCEmbedTable *self , const char *name){
2493524921

2493624922

2493724923
lua_getglobal(self->main_object->state,self->global_name);
24938-
lua_pushstring(self->main_object->state, name);
24939-
lua_gettable(self->main_object->state, -2);
24924+
privateLuaCEmbd_get_field_protected(self->main_object,name);
24925+
2494024926
if(privateLuaCEmbedTable_ensure_type_with_key(self, name, LUA_CEMBED_NUMBER)){
2494124927
return LUA_CEMBED_GENERIC_ERROR;
2494224928
}
@@ -24953,8 +24939,7 @@ bool LuaCembedTable_get_bool_prop(LuaCEmbedTable *self , const char *name){
2495324939

2495424940

2495524941
lua_getglobal(self->main_object->state,self->global_name);
24956-
lua_pushstring(self->main_object->state, name);
24957-
lua_gettable(self->main_object->state, -2);
24942+
privateLuaCEmbd_get_field_protected(self->main_object,name);
2495824943
if(privateLuaCEmbedTable_ensure_type_with_key(self, name, LUA_CEMBED_BOOL)){
2495924944
return LUA_CEMBED_GENERIC_ERROR;
2496024945
}
@@ -25424,16 +25409,14 @@ LuaCEmbedTable *LuaCEmbedTable_get_sub_table_by_key(LuaCEmbedTable *self, const
2542425409

2542525410

2542625411
lua_getglobal(self->main_object->state,self->global_name);
25427-
lua_pushstring(self->main_object->state, name);
25428-
lua_gettable(self->main_object->state, -2);
25412+
privateLuaCEmbd_get_field_protected(self->main_object,name);
2542925413
if(privateLuaCEmbedTable_ensure_type_with_key(self, name, LUA_CEMBED_TABLE)){
2543025414
PRIVATE_LUA_CEMBED_CLEAR_STACK
2543125415
return NULL;
2543225416
}
2543325417
//equivalent of full_sub_table_name = table.sub_table
2543425418
lua_getglobal(self->main_object->state,self->global_name);
25435-
lua_pushstring(self->main_object->state, name);
25436-
lua_gettable(self->main_object->state, -2);
25419+
privateLuaCEmbd_get_field_protected(self->main_object,name);
2543725420
char *full_sub_table_name = private_LuaCembed_format("%s_%s", self->global_name, name);
2543825421
lua_setglobal(self->main_object->state,full_sub_table_name);
2543925422

@@ -25479,8 +25462,8 @@ void LuaCEmbedTable_set_sub_table_prop(LuaCEmbedTable *self, const char *name, L
2547925462

2548025463
//equivalent of full_sub_table_name = table.sub_table
2548125464
lua_getglobal(self->main_object->state,self->global_name);
25482-
lua_pushstring(self->main_object->state, name);
25483-
lua_gettable(self->main_object->state, -2);
25465+
privateLuaCEmbd_get_field_protected(self->main_object,name);
25466+
2548425467
char *full_sub_table_name = private_LuaCembed_format("%s_%s", self->global_name, name);
2548525468
lua_setglobal(self->main_object->state,full_sub_table_name);
2548625469
free(full_sub_table_name);
@@ -26139,6 +26122,12 @@ int privateLuaCEmbed_main_callback_handler(lua_State *L){
2613926122
}
2614026123

2614126124
if(possible_return->type == PRIVATE_LUA_CEMBED_ERROR_RESPONSE){
26125+
26126+
if(self->field_protection){
26127+
private_LuaCEmbedResponse_free(possible_return);
26128+
return PRIVATE_LUACEMBED_NO_RETURN;
26129+
}
26130+
2614226131
lua_pushstring(L, possible_return->string_val);
2614326132
privateLuaCEmbed_raise_error_not_jumping(self,possible_return->string_val);
2614426133
private_LuaCEmbedResponse_free(possible_return);

0 commit comments

Comments
 (0)