MCPcopy Create free account
hub / github.com/SOUI2/soui / meta_set

Method meta_set

components/ScriptModule-LUA/lua_tinker/lua_tinker.cpp:700–740  ·  view source on GitHub ↗

---------------------------------------------------------------------------*/

Source from the content-addressed store, hash-verified

698
699/*---------------------------------------------------------------------------*/
700int lua_tinker::meta_set(lua_State *L)
701{
702 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值
703 lua_getmetatable(L,1);
704 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table)
705 lua_pushvalue(L,2);
706 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.变量(string)
707 lua_rawget(L,-2);
708 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.meta[变量](userdata mem_var指针)
709
710 if(lua_isuserdata(L,-1))
711 {
712 user2type<var_base*>::invoke(L,-1)->set(L);
713 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.meta[变量](userdata mem_var指针)
714 }
715 else if(lua_isnil(L, -1))
716 {
717 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.nil
718 lua_remove(L,-1);
719 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table)
720 lua_pushvalue(L,2);
721 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.变量(string)
722 lua_pushvalue(L,4);
723 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.变量(string) 6.类meta(table)
724 invoke_parent(L);
725 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.变量(string) 6.类meta(table) 7.获取到父类的变量(userdata mem_var指针)
726 if(lua_isuserdata(L,-1))
727 {
728 user2type<var_base*>::invoke(L,-1)->set(L);
729 }
730 else if(lua_isnil(L,-1))
731 {
732 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值 4.类meta(table) 5.变量(string) 6.类meta(table) 7.nil
733 lua_pushfstring(L, "can't find '%s' class variable. (forgot registering class variable ?)", lua_tostring(L, 2));
734 lua_error(L);
735 }
736 }
737 lua_settop(L, 3);
738 // stack: 1.类(userdata) 2.变量(string) 3.要赋的值
739 return 0;
740}
741/*---------------------------------------------------------------------------*/
742void lua_tinker::push_meta(lua_State *L, const char* name)
743{

Callers

nothing calls this directly

Calls 10

lua_getmetatableFunction · 0.85
lua_pushvalueFunction · 0.85
lua_rawgetFunction · 0.85
lua_isuserdataFunction · 0.85
lua_removeFunction · 0.85
invoke_parentFunction · 0.85
lua_pushfstringFunction · 0.85
lua_errorFunction · 0.85
lua_settopFunction · 0.85
setMethod · 0.45

Tested by

no test coverage detected