lua-users home
lua-l archive

Re: tolua bug?

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


Unfortunately, tolua++ seems to fix one bug in tolua, but introduces another. Take the following package for example:
module Test {
enum {
	POINT = 100,
	LINE = 101,
	POLYGON = 102
};
class Vector2D {
	float	x;
	float	y;
};
class Vector3D {
	Vector2D *GetSomething(int id);
	float	x;
	float	y;
	float	z;
};
}
tolua++ provides correct access to the x and y member variables, whereas tolua creates overlapping function names. Unfortunately, tolua++ creates an invalid wrapper for the GetSomething function. A couple lines of generated code look like this:
Vector3D* self = (Vector3D*) tolua_tousertype(tolua_S,1,0);
id = *(( *) (int) tolua_tousertype(tolua_S,2,0));
Vector2D* tolua_ret = (Vector2D*) self->GetSomething(id);
This problem seems to be related to the enums in the package definition. If I change the enums to #defines as below, then the problem goes away:
#define POINT	100
#define LINE	101
#define POLYGON	102
Now, the generated code looks like this:
Vector3D* self = (Vector3D*) tolua_tousertype(tolua_S,1,0);
int id = ((int) tolua_tonumber(tolua_S,2,0));
Vector2D* tolua_ret = (Vector2D*) self->GetSomething(id);
So, maybe the answer is simple:
1. If you want to use structs with similarly-named fields, don't use tolua.
2. If you want to use enums, don't use tolua++.
Is this enum thing a known problem in tolua++? Before I go switching everything over to use tolua++, I'd like to know that it's a bit more solid than tolua, and I can't decide which one works better.
Waldemar Celes wrote:
Ariel Manzur has been doing a great job fixing bugs and extending tolua.
See tolua++ (http://www.codenix.com/~tolua/).
-- Waldemar
At 15:43 20/1/2004 -0800, you wrote:
There are a number of bugs in tolua5a. There are also problems with
renaming (@) objects and name conflicts. You could look back through the
lua-l archives for more details. It would be nice if someone were to fix
these problems as tolua's author seems to have gone AWOL.
Nick

AltStyle によって変換されたページ (->オリジナル) /