It does the job too — but in the end, giving access to miscmap is a workaround to get to a CType metatable, given miscmap contains mostly CType metatables. > On Nov 27, 2014, at 12:14 PM, Karel Tuma <kat@xxxxxx> wrote: > > Excerpts from Ronan Collobert's message of 2014-11-22 00:23:45 +0100: >> Hi, >> >> At this time there is no (easy) way with luajit+ffi to get the metatable of >> a cdata/ctype. I understand the notion of metatable is ambiguous here, as >> the metatable given by the user through ffi.metatype() is not the actual one >> on the cdata (a global ffi-specific metatable that can be obtained by >> debug.getmetatable). >> >> Reading the mailing list, I saw several people encountered the same issue >> (see for e.g. https://github.com/corsix/ffi-reflect and >> reflect.getmetatable). >> >> Do you think it would be reasonable to have a ffi.getmetatable(ctype) >> function, which returns the original “metatable” given by user through >> ffi.metatype? (code in attachment) — If yes, I can work on the compiled >> version. I sincerely feel this is missing in the current ffi lib. > >> --- a/src/lib_ffi.c >> +++ b/src/lib_ffi.c > > Dubious use cases aside, what about: > > assert(ffi.miscmap[-tonumber(ffi.metatype("struct {int > x;}",{test=333}))].test==333) > > Single line change, and JIT tracer friendly: > > https://github.com/katlogic/ljx/commit/af7f5e8726a1d1608a711344a8742cb3873fae1f >
Attachment:
signature.asc
Description: Message signed with OpenPGP using GPGMail