lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Nothing; the “ud=” assignment is the first thing that use() does.  L is a Lua state and “n” is the index into the stack at which the required userdata can be found.

 

The whole function is:

 

static local_t *_local_use(lua_State *L, int n) {

    void *ud;

 

    ud = lua_touserdata(L, n);

    if (ud != NULL) {

        if (lua_getmetatable(L, n) != 0) {

            lua_getfield(L, LUA_REGISTRYINDEX, xstr_mt);

            if (lua_rawequal(L, -1, -2)) {

                lua_pop(L, 2);

                return ud;

            }

            lua_pop(L, 2);

        }

    }

 

    return NULL;

}

 

Although the thing sitting at index “n” had a metatable assigned to it in the lookup() function, it’s not there now; the second “if” always fails.

 

As for your second question, the “lookup” might verify the existence of a key in a lookup table but not with any associated value.  The point then is to indicate the lookup succeeded, but has no other data to return.

 

From: lua-l-bounces@lists.lua.org [mailto:lua-l-bounces@lists.lua.org] On Behalf Of liam mail
Sent: Thursday, July 21, 2011 4:02 AM
To: Lua mailing list
Subject: Re: Losing metatable reference

 

 

On 21 July 2011 08:06, Murray S. Kucherawy <msk@cloudmark.com> wrote:

use(m, y, n)

 

Can you please post the code for 'use' ie what happens before "ud = lua_touserdata(L, n);", specifically where does 'n' come from. What are m and n which are passed from Lua to 'use'?

 

off topic:

"“lookup” actually is a registered C function that does a hash table lookup.  On a miss, “x” is set to false and “y” to nil; on a hit, “x” is set to true and “y” is set to a new userdata with a metatable assigned to it using:"

 

Why do you use two values to represent the same thing. If y is valid then x is true and I would think 'x' is therefore redundant ?

 

 

Liam