On Thu, Aug 20, 2015 at 07:05:22PM -0300, Roberto Ierusalimschy wrote:
Maybe I am missing something, but if we want to put some extra bits in
'TValue' to good use and solve the OP problem, maybe a better idea would
be to introduce metatables for light userdata.
There would be a limit on the number of different metatables that light
userdata can have, but it would be a reasonable high limit [2^25] for
typical uses of metatables. If we adopt this limit for all metatables in
the system, we could gain some space in tables and full userdata, too.
(We could even gain individual metatables for numbers :-)
Yes, that sounds like a genius idea! It took me awhile to think through all
the implications. IIUC, the OP could just generate a single unique metatable
for each full userdata object he wants to clone. He stores a reference to
the full userdata object in the metatable; the lightuserdata value becomes
the index into the full userdata (or some other object it references).