diff options
author | Benoit Germain <bnt.germain@gmail.com> | 2011-11-05 17:31:02 +0100 |
---|---|---|
committer | Benoit Germain <bnt.germain@gmail.com> | 2011-11-05 17:31:02 +0100 |
commit | 053f7cff3c95acb915e6babfd306971f11bb7986 (patch) | |
tree | ee38c60b1119d34eb96aea1105ef033e851d266e /src/tools.h | |
parent | 717eadee9c3644fabb32c7ee59949f2846143690 (diff) | |
download | lanes-053f7cff3c95acb915e6babfd306971f11bb7986.tar.gz lanes-053f7cff3c95acb915e6babfd306971f11bb7986.tar.bz2 lanes-053f7cff3c95acb915e6babfd306971f11bb7986.zip |
* process exit change: close everything at GC when main state closes, not when atexit() handlers are processed
* Lua 5.2-style module:
* module() is no longer used to implement lanes.lua
* a global "lanes" variable is no longer created when the module is required
* the Lanes module table is returned instead
* Lanes must be initialized before used:
* the first occurence of 'require "lanes"' produces a minimal interface that only contains a configure() function
* the remainder of the interface is made available once this function is called
* subsequent calls to configure() do nothing
* configure() controls the number of keeper states and the startup of timers
* LuaJIT 2 compatibility
* non-Lua functions are no longer copied by creating a C closure from a C pointer, but through 2-way lookup tables
* this means that if a lane function body pulls non-Lua functions, the lane generator description must contain the list of libraries and modules that exports them
* introduces a change in configuration .globals management: contents are copied *after* std libs are loaded
* new .required configuration entry to list modules that must be require()'ed before lane body is transferred
* lane:cancel() wakes up waiting lindas like what is done at lane shutdown
Diffstat (limited to 'src/tools.h')
-rw-r--r-- | src/tools.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/tools.h b/src/tools.h index a080257..1c9b00a 100644 --- a/src/tools.h +++ b/src/tools.h | |||
@@ -10,10 +10,10 @@ | |||
10 | 10 | ||
11 | #include <assert.h> | 11 | #include <assert.h> |
12 | 12 | ||
13 | // Note: The < -10000 test is to leave registry/global/upvalue indices untouched | 13 | // Note: The < LUA_REGISTRYINDEX test is to leave registry/global/upvalue indices untouched |
14 | // | 14 | // |
15 | #define /*int*/ STACK_ABS(L,n) \ | 15 | #define /*int*/ STACK_ABS(L,n) \ |
16 | ( ((n) >= 0 || (n) <= -10000) ? (n) : lua_gettop(L) +(n) +1 ) | 16 | ( ((n) >= 0 || (n) <= LUA_REGISTRYINDEX) ? (n) : lua_gettop(L) +(n) +1 ) |
17 | 17 | ||
18 | #ifdef NDEBUG | 18 | #ifdef NDEBUG |
19 | #define _ASSERT_L(lua,c) /*nothing*/ | 19 | #define _ASSERT_L(lua,c) /*nothing*/ |
@@ -24,7 +24,7 @@ | |||
24 | #define DEBUG() /*nothing*/ | 24 | #define DEBUG() /*nothing*/ |
25 | #define DEBUGEXEC(_code) {} /*nothing*/ | 25 | #define DEBUGEXEC(_code) {} /*nothing*/ |
26 | #else | 26 | #else |
27 | #define _ASSERT_L(lua,c) { if (!(c)) luaL_error( lua, "ASSERT failed: %s:%d '%s'", __FILE__, __LINE__, #c ); } | 27 | #define _ASSERT_L(lua,c) do { if (!(c)) luaL_error( lua, "ASSERT failed: %s:%d '%s'", __FILE__, __LINE__, #c ); } while( 0) |
28 | // | 28 | // |
29 | #define STACK_CHECK(L) { int _oldtop_##L = lua_gettop(L); | 29 | #define STACK_CHECK(L) { int _oldtop_##L = lua_gettop(L); |
30 | #define STACK_MID(L,change) { int a= lua_gettop(L)-_oldtop_##L; int b= (change); \ | 30 | #define STACK_MID(L,change) { int a= lua_gettop(L)-_oldtop_##L; int b= (change); \ |
@@ -37,7 +37,7 @@ | |||
37 | #endif | 37 | #endif |
38 | #define ASSERT_L(c) _ASSERT_L(L,c) | 38 | #define ASSERT_L(c) _ASSERT_L(L,c) |
39 | 39 | ||
40 | #define STACK_GROW(L,n) { if (!lua_checkstack(L,n)) luaL_error( L, "Cannot grow stack!" ); } | 40 | #define STACK_GROW(L,n) do { if (!lua_checkstack(L,n)) luaL_error( L, "Cannot grow stack!" ); } while( 0) |
41 | 41 | ||
42 | #define LUAG_FUNC( func_name ) static int LG_##func_name( lua_State *L ) | 42 | #define LUAG_FUNC( func_name ) static int LG_##func_name( lua_State *L ) |
43 | 43 | ||
@@ -72,6 +72,7 @@ int luaG_inter_move( lua_State *L, lua_State *L2, uint_t n); | |||
72 | extern MUTEX_T deep_lock; | 72 | extern MUTEX_T deep_lock; |
73 | extern MUTEX_T mtid_lock; | 73 | extern MUTEX_T mtid_lock; |
74 | 74 | ||
75 | void populate_func_lookup_table( lua_State *L, int _i, char const *_name); | ||
75 | void serialize_require( lua_State *L); | 76 | void serialize_require( lua_State *L); |
76 | extern MUTEX_T require_cs; | 77 | extern MUTEX_T require_cs; |
77 | 78 | ||