[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: toLua 5 errors/questions
- From: lukey@... (Jens Hassler)
- Date: 07 Sep 2003 11:05:00 +0200
Hi,
I've posted this a month ago, but got no answer. Since I couldn't find
any in the meantime, I really would appreciate any help on these issues.
Thank you.
I'm having some difficulties with the new version of toLua.
1. I have these definitions inside my package file:
class gsGlobals {
...
const int activate_extra_bar;
const int activate_extra_bar @ extra_bar;
...
};
The second "extra_bar" is there for compatibility reasons.
toLua wraps "extra_bar" correctly to the "activate_extra_bar"
function:
tolua_variable(tolua_S,"activate_extra_bar", \
tolua_get_gsGlobals_activate_extra_bar,NULL);
tolua_variable(tolua_S,"extra_bar", \
tolua_get_gsGlobals_activate_extra_bar,NULL);
But toLua also creates TWO functions for it:
/* get function: activate_extra_bar of class gsGlobals */
static int tolua_get_gsGlobals_activate_extra_bar(lua_State* tolua_S)
{
...
}
This one is immediately followed by exactly the same function
in the generated C source file causing the compiler to complain
an error.
I have the same problem with another @-function, so I think the
bug has something to do with this.
Or has there something in the .pkg syntax changed from toLua 4
to the new version? toLua 4 worked perfectly.
Note: This only happens in the above case, when two identifiers
relate to the same C function. Other @ declarations work fine.
2. This seems to be a very strange problem. Well, it worked with
Lua 4, so I have to assume there is a "bug"(?) somewhere in Lua or
toLua. Or my code is incorrect, which would be my preferred
solution :)
I have some class instances exported as arrays, such as these
in my .pkg file:
class gsPlayer {
...
};
extern gsPlayer *player[8];
Now, if I do something like...
if player[1] == player[2] then this_never_happens() end
...in my script, there is the following message on stderr:
"attempt to perform operation on an invalid operand"
Well, that would be no problem, cause no one needs to compare two
different user data.
But I have some kind of hook function in my code (nothing to do
with Lua hooks) which is called by the host program when one of
the players die:
function hook_player_dead(pl)
if pl == player[1] then
-- do something with player 1
end
end
This hook function is called by the host program in this way:
lua_pushstring(L, "hook_player_dead");
lua_gettable(L, LUA_GLOBALSINDEX);
tolua_pushusertype(L,(void*)myplayer,"gsPlayer");
lua_call(L, 1, 1);
if (lua_isnumber(L, -1)) ret = (int)lua_tonumber(L, -1);
lua_pop(L, 1);
So "pl" is a valid player structure.
If player[1] dies, the hook function is called and the
if statement seems to work perfectly.
But if player[2] dies, my program just exits without shouting
errors to stderr or somewhere else. Even my debugger says the
program ended correctly, but with errorlevel 1.
All of this worked perfectly with Lua 4.
When using class members in the if statement, e.g. something like...
if pl:get_nr() == player[1]:get_nr() then
end
...everything works perfectly.
So, can anyone point me to the error I hopefully made?
3. How do I find out where an error ocurred when I get a message like:
"Invalid type in variable assignment"? The tolua_Error struct which
is passed only contains an array index and a string containing
"number".
Thank you a lot.
Bye,
Jens