[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: Parsing to byte code
- From: Roberto Ierusalimschy <rieru@...>
- Date: Mon, 10 Sep 2001 16:42:38 -0500 (CDT)
On Mon, 10 Sep 2001, Josh Jensen wrote:
> [...] The most
> annoying thing about 4.1 Alpha was the change from lua_pushuserdata() to
> lua_newuserdatabox(). I couldn't figure out why the Amped frame rates
> went to pot after integrating it. It was because lua_newuserdatabox()
> allocates memory for the same pointer EVERY time it is called, resulting
> in many, many new allocations per frame. The whole point was just to
> pass a C pointer to Lua so a callback could be made to a C function with
> that pointer. The 4.1 Alpha behavior must have been different than
> 4.0's lua_pushuserdata(), because I am positive this didn't occur then.
I thought that was discussed in the list. Until Lua 3.2, lua_pushuserdata
coalesced equal pointers into a single userdata. Although that was
frequently the "correct" behavior, sometimes it was not. Moreover, it
could lead to inconsistencies when you changed the tag of a userdata (this
flaw was pointed out by ET). So, we decided to simplify Lua, and provide
only the more primitive lua_newuserdatabox, that always creates a new
userdata when it is called. It is up to the C code to avoid calling it
everty time. (E.g. it can use lua_pushvalue, if the pointer came from
Lua; or it can use a table to hash pointers to userdata.)
-- Roberto