private void V_SetTable(StkId t, StkId key, StkId val) { for (int loop = 0; loop < MAXTAGLOOP; ++loop) { StkId tmObj; if (t.V.TtIsTable()) { var tbl = t.V.HValue(); var oldval = tbl.Get(ref key.V); if (!oldval.V.TtIsNil()) { tbl.Set(ref key.V, ref val.V); return; } // check meta method tmObj = FastTM(tbl.MetaTable, TMS.TM_NEWINDEX); if (tmObj == null) { tbl.Set(ref key.V, ref val.V); return; } } else if (t.V.Tt == (int)LuaType.LUA_TLIGHTUSERDATA) { if (!Utl.SetLightUserDataPropValue(t.V, key.V, ref val.V)) { G_RunError(val.V.SValue()); } return; // else will try the tag method } else { tmObj = T_GetTMByObj(ref t.V, TMS.TM_NEWINDEX); if (tmObj.V.TtIsNil()) { G_SimpleTypeError(ref t.V, "index"); } } if (tmObj.V.TtIsFunction()) { CallTM(ref tmObj.V, ref t.V, ref key.V, val, false); return; } t = tmObj; } G_RunError("loop in settable"); }