Re: ffi.getmetatable

  • From: Ronan Collobert <ronan@xxxxxxxxxxxxx>
  • To: luajit@xxxxxxxxxxxxx
  • Date: Thu, 27 Nov 2014 12:30:17 -0800

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

Other related posts: