It seems all of the metamethods retain a strong reference, which is causing me problems trying to use proxy objects. Is there a specific reason they're a strong reference? It seems to be this line that makes them all strong:
ltm.c: 39
for (i=0; i<TM_N; i++) {
G(L)->tmname[i] = luaS_new(L, luaT_eventname[i]);
luaS_fix(G(L)->tmname[i]); /* never collect these names */
What would be the implications of removing this luaS_fix on the metamethods?