lua-users home
lua-l archive

[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