[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: LuaJIT FFI: pointer<->lightuserdata ?
- From: Mike Pall <mikelu-1102@...>
- Date: Wed, 16 Feb 2011 15:09:26 +0100
Javier Guerra Giraldez wrote:
> >> in the FFI reference, the lightuserdata->(void *) conversion is
> >> automatic; but i don't see how to do the converse.
> >
> > Well, nobody asked for it. :-)
>
> i can haz?
Only if I find a good place for it in the API. Maybe a special
type for ffi.cast.
> >> am i missing some downside of a (void *)->lightuserdata conversion?
> >
> > Lightuserdata is generally only needed for the classic Lua/C API,
> > so it would be a bit backwards to suggest its use for new stuff.
>
> in my eyes, a lightuserdata value is a useful opaque value; just like
> pointers without arithmetic. while a number can do the same, the
> implied semantics are different.
If you're already using the FFI, then a void pointer is exactly
what you want. You can't dereference a void pointer or do pointer
arithmetic with it.
> also, FFI does cast the lightuserdata back to the same pointer. how
> could i do it with a number? i would have to store the boxed pointer
> somewhere, right? (update: i see there's a conversion between C
> number and pointer, i'll play a little with the uintptr_t cast)
See the tutorial. And use intptr_t, the conversion is faster.
> finally, wouldn't it be easier for the JIT optimizer to recognize that
> a lightuserdata value have a lot less possible codepaths? since it can
> only be passed around...
No.
--Mike