---------------------------------------------------------------------------*/
| 698 | |
| 699 | /*---------------------------------------------------------------------------*/ |
| 700 | int 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 | /*---------------------------------------------------------------------------*/ |
| 742 | void lua_tinker::push_meta(lua_State *L, const char* name) |
| 743 | { |
nothing calls this directly
no test coverage detected