[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: RE: lua_ref problem
- From: "Curt Carpenter" <curtc@...>
- Date: Thu, 6 Nov 2003 10:10:30 -0800
Another possibility: maybe your code is not quite as simple as the repro
steps listed. Try putting:
print(foo==bar)
before (and maybe after) your other print statements.
-----Original Message-----
From: lua-bounces@bazar2.conectiva.com.br
[mailto:lua-bounces@bazar2.conectiva.com.br] On Behalf Of Virgil Smith
Sent: Thursday, November 06, 2003 9:55 AM
To: 'Lua list'
Subject: RE: lua_ref problem
IIRC, a couple of people (myself included) reviewed the implementation
of luaL_ref when you posted this earlier, and no one saw anything
suggestive.
Have you debugged into lua_Lref to see what is going on in your
installation/implementation?
I guess related to that line of thought is the question of how you are
accessing Lua (what distribution/build/statically linked library/direct
source in your program compilation).
luaL_ref really should not be producing the behavior you are seeing, so
something has to be wrong with the environment in which you are seeing
this.
Good Luck!
-----Original Message-----
From: lua-bounces@bazar2.conectiva.com.br
[mailto:lua-bounces@bazar2.conectiva.com.br]On Behalf Of Chris Chapman
Sent: Thursday, November 06, 2003 9:57 AM
To: lua@bazar2.conectiva.com.br
Subject: lua_ref problem
Okay, I'm having to revisit this problem, because my original workaround
is insufficient for the other issues that have arisen because of it. I
hope someone here can see what I'm doing wrong.
Given the script:
do
function foo()
print("foo\n");
end
function bar()
print("bar\n");
end
print (GetFunctionReference(foo) .. "\n");
print (GetFunctionReference(foo) .. "\n");
print (GetFunctionReference(bar) .. "\n");
print (GetFunctionReference(foo) .. "\n"); end
and "GetFunctionReference" being a C function registered with lua which
looks like:
int GetFunctionReference(lua_State* L)
{
//get a reference to the first argument on the stack
//check the argument is a lua function
if (lua_type(L, -1) == LUA_TFUNCTION)
{
int iReference = lua_ref(L, 1);
//1 indicates a locked reference
//return the reference index as a number
lua_pushnumber(L, iReference);
return 1;
}
else
{
return 0;
}
}
Running this script produces the output:
3
3
3
3
I.e. no matter what I try to pass to lua_ref, I always get 3 back as a
reference. Breakpointing the C code indicates that it is indeed 3 being
returned from lua_ref each time. Tracing the lua code follows the same
path each call.
Again, this is a difference between 4.0.1 and 5.0.
Thanks
ChrisC