|
----- Original Message ----- From: Joshua Jensen Date: 12/10/2009 11:12 AM
Another thought with this... existing Lua modules can continue to compile like so:----- Original Message ----- From: Roberto Ierusalimschy Date: 12/10/2009 10:50 AMI prefer the exports table being available in the lua_State. I was just trying to be explicit about my example for discussion's purposes.What I would like to see (and experimented with once) is for Lua to loadthe Lua module and call the luaopen_ function by passing in a structure of pointers to all the exported Lua functions. struct lua_Exports { ... void (*lua_pushvalue) (lua_State *L, int idx); }; int luaopen_mymodule(lua_State *L, lua_Exports *exports);A variation of that idea is to have lua_Exports accessible via lua_State, so that it does not need to be passed as an extra argument to luaopen. (E.g., it may be the first pointer in lua_State.)
lua.h: #if LUA_BUILD_AS_DLL && LUA_LIB #if LUA_EXPORTS_GLOBALS_TABLE extern void (*lua_pushvalue)(lua_State *L, int idx); #else /* !LUA_EXPORTS_GLOBALS_TABLE */ #define lua_pushvalue(L) (lua_exports((L))->lua_pushvalue((L))) #endif /* LUA_EXPORTS_GLOBALS_TABLE */ #else /* !(LUA_BUILD_AS_DLL && LUA_LIB) */ /* the standard lua.h */ #endifIf people use the new #define for their modules, they can take advantage of the "high performance" globals (one dereference less). Otherwise, the existing modules just work as they have done with a minor performance decrease.
Josh