@@ -108,6 +108,19 @@ Array LuaTable::to_array() const {
108108 return luagdextension::to_array (lua_object);
109109}
110110
111+ Ref<LuaTable> LuaTable::get_metatable () const {
112+ if (sol::optional<sol::table> metatable = lua_object[sol::metatable_key]) {
113+ return LuaObject::wrap_object<LuaTable>(*metatable);
114+ }
115+ else {
116+ return nullptr ;
117+ }
118+ }
119+
120+ void LuaTable::set_metatable (LuaTable *metatable) {
121+ lua_object[sol::metatable_key] = metatable ? metatable->get_table () : sol::nil;
122+ }
123+
111124bool LuaTable::_iter_init (const Variant& iter) const {
112125 StackTopChecker topcheck (lua_object.lua_state ());
113126 lua_State *L = lua_object.lua_state ();
@@ -172,6 +185,9 @@ void LuaTable::_bind_methods() {
172185 ClassDB::bind_method (D_METHOD (" to_dictionary" ), &LuaTable::to_dictionary);
173186 ClassDB::bind_method (D_METHOD (" to_array" ), &LuaTable::to_array);
174187
188+ ClassDB::bind_method (D_METHOD (" get_metatable" ), &LuaTable::get_metatable);
189+ ClassDB::bind_method (D_METHOD (" set_metatable" , " metatable" ), &LuaTable::set_metatable);
190+
175191 ClassDB::bind_method (D_METHOD (" _iter_init" , " iter" ), &LuaTable::_iter_init);
176192 ClassDB::bind_method (D_METHOD (" _iter_next" , " iter" ), &LuaTable::_iter_next);
177193 ClassDB::bind_method (D_METHOD (" _iter_get" , " iter" ), &LuaTable::_iter_get);
0 commit comments