aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBenoit Germain <bnt.germain@gmail.com>2012-07-10 21:43:32 +0200
committerBenoit Germain <bnt.germain@gmail.com>2012-07-10 21:43:32 +0200
commit0373f863a9dbabbbe3e9aa74bea3e4b778f3a0cd (patch)
tree52dfb987d5ee12ef4668e875d19a70a6c77cebe1 /src
parent4468ec94e354a9f6d8d7ea2859afa757bb934617 (diff)
downloadlanes-3.1.5.tar.gz
lanes-3.1.5.tar.bz2
lanes-3.1.5.zip
one more step toward 5.2 compatibilityv3.1.5
* lua51-lanes renamed lanes.core * keeper state microcode is no longer embedded inside lanes.core, but located and loaded with package.loaders[2] * changed rockspec build type from "make" to "builtin"
Diffstat (limited to 'src')
-rw-r--r--src/Makefile37
-rw-r--r--src/keeper.c27
-rw-r--r--src/lanes-keeper.lua (renamed from src/keeper.lua)0
-rw-r--r--src/lanes.c10
-rw-r--r--src/lanes.lua4
5 files changed, 32 insertions, 46 deletions
diff --git a/src/Makefile b/src/Makefile
index 03f5558..a16acce 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,8 +1,8 @@
1# 1#
2# Lanes/src/Makefile 2# Lanes/src/Makefile
3# 3#
4# make [LUA=... LUAC=...] Manual build 4# make [LUA=...] Manual build
5# make LUAROCKS=1 CFLAGS=... LIBFLAG=... LUA=... LUAC=... LuaRocks automated build 5# make LUAROCKS=1 CFLAGS=... LIBFLAG=... LUA=... LuaRocks automated build
6# 6#
7 7
8MODULE=lanes 8MODULE=lanes
@@ -19,11 +19,10 @@ OPT_FLAGS=-O2
19 # -O0 -g 19 # -O0 -g
20 20
21LUA=lua 21LUA=lua
22LUAC=luac
23 22
24_SO=.so 23_SO=so
25ifeq "$(findstring MINGW32,$(shell uname -s))" "MINGW32" 24ifeq "$(findstring MINGW32,$(shell uname -s))" "MINGW32"
26 _SO=.dll 25 _SO=dll
27endif 26endif
28 27
29ifeq "$(LUAROCKS)" "" 28ifeq "$(LUAROCKS)" ""
@@ -116,32 +115,21 @@ ifeq "$(shell uname -s)" "BSD"
116 LIBS += -lpthread 115 LIBS += -lpthread
117endif 116endif
118 117
118MODULE_DIR=$(MODULE)
119
119#--- 120#---
120all: lua51-$(MODULE)$(_SO) 121all: $(MODULE)/core.$(_SO)
121 122
122%.o: %.c *.h Makefile 123%.o: %.c *.h Makefile
123 124
124# Note: Don't put $(LUA_LIBS) ahead of $^; MSYS will not like that (I think) 125# Note: Don't put $(LUA_LIBS) ahead of $^; MSYS will not like that (I think)
125# 126#
126lua51-$(MODULE)$(_SO): $(OBJ) 127$(MODULE_DIR)/core.$(_SO): $(OBJ)
128 mkdir -p $(MODULE_DIR)
127 $(CC) $(LIBFLAG) $^ $(LIBS) $(LUA_LIBS) -o $@ 129 $(CC) $(LIBFLAG) $^ $(LIBS) $(LUA_LIBS) -o $@
128 130
129clean: 131clean:
130 -rm -rf lua51-$(MODULE)$(_SO) *.lch *.o *.tmp *.map 132 -rm -rf $(MODULE)/core.$(_SO) *.o *.map
131
132lanes.o: keeper.lch
133
134# Note: 'luac -o -' could be used on systems other than Windows (where pipes
135# are binary). We need to support MinGW as well, so a temporary file.
136#
137# mode 1: embed bytecode version
138#%.lch: %.lua
139# $(LUAC) -o $@.tmp $<
140# $(LUA) ../tools/bin2c.lua $@.tmp -o $@
141# -rm $@.tmp
142# mode 2: embed text version (LuaJIT2-compatible)
143%.lch: %.lua
144 $(LUA) ../tools/bin2c.lua $< -o $@
145 133
146#--- 134#---
147# NSLU2 "slug" Linux ARM 135# NSLU2 "slug" Linux ARM
@@ -166,10 +154,9 @@ win32: $(WIN32_LUA51)/include/lua.h
166 $(MAKE) build CC=$(MINGW_GCC) \ 154 $(MAKE) build CC=$(MINGW_GCC) \
167 LUA_FLAGS=-I$(WIN32_LUA51)/include \ 155 LUA_FLAGS=-I$(WIN32_LUA51)/include \
168 LUA_LIBS="-L$(WIN32_LUA51) -llua51" \ 156 LUA_LIBS="-L$(WIN32_LUA51) -llua51" \
169 _SO=.dll \ 157 _SO=dll \
170 SO_FLAGS=-shared \ 158 SO_FLAGS=-shared \
171 LUA=lua51 \ 159 LUA=lua51
172 LUAC=luac51
173 160
174$(WIN32_LUA51)/include/lua.h: 161$(WIN32_LUA51)/include/lua.h:
175 @echo "Usage: make win32 WIN32_LUA51=<path of extracted LuaBinaries dll8 and dev packages>" 162 @echo "Usage: make win32 WIN32_LUA51=<path of extracted LuaBinaries dll8 and dev packages>"
diff --git a/src/keeper.c b/src/keeper.c
index 6f5bd95..2404520 100644
--- a/src/keeper.c
+++ b/src/keeper.c
@@ -64,12 +64,6 @@ static struct s_Keeper *GKeepers = NULL;
64static int GNbKeepers = 0; 64static int GNbKeepers = 0;
65 65
66/* 66/*
67* Lua code for the keeper states (baked in)
68*/
69static char const keeper_chunk[]=
70#include "keeper.lch"
71
72/*
73* Initialize keeper states 67* Initialize keeper states
74* 68*
75* If there is a problem, return an error message (NULL for okay). 69* If there is a problem, return an error message (NULL for okay).
@@ -95,26 +89,31 @@ char const* init_keepers( int const _nbKeepers, lua_CFunction _on_state_create)
95 if (!K) 89 if (!K)
96 return "out of memory"; 90 return "out of memory";
97 91
92 STACK_CHECK( K)
98 // to see VM name in Decoda debugger 93 // to see VM name in Decoda debugger
99 lua_pushliteral( K, "Keeper #"); 94 lua_pushliteral( K, "Keeper #");
100 lua_pushinteger( K, i + 1); 95 lua_pushinteger( K, i + 1);
101 lua_concat( K, 2); 96 lua_concat( K, 2);
102 lua_setglobal( K, "decoda_name"); 97 lua_setglobal( K, "decoda_name");
103 98
104 // Read in the preloaded chunk (and run it) 99 // use package.loaders[2] to find keeper microcode
105 // 100 lua_getfield( K, LUA_GLOBALSINDEX, "package"); // package
106 if( luaL_loadbuffer( K, keeper_chunk, sizeof(keeper_chunk), "@keeper.lua")) 101 lua_getfield( K, -1, "loaders"); // package package.loaders
107 return "luaL_loadbuffer() failed"; // LUA_ERRMEM 102 lua_rawgeti( K, -1, 2); // package package.loaders package.loaders[2]
108 103 lua_pushliteral( K, "lanes-keeper"); // package package.loaders package.loaders[2] "lanes-keeper"
109 if( lua_pcall( K, 0 /*args*/, 0 /*results*/, 0 /*errfunc*/)) 104 STACK_MID( K, 4);
105 // first pcall loads lanes-keeper.lua, second one runs the chunk
106 if( lua_pcall( K, 1 /*args*/, 1 /*results*/, 0 /*errfunc*/) || lua_pcall( K, 0 /*args*/, 0 /*results*/, 0 /*errfunc*/))
110 { 107 {
111 // LUA_ERRRUN / LUA_ERRMEM / LUA_ERRERR 108 // LUA_ERRRUN / LUA_ERRMEM / LUA_ERRERR
112 // 109 //
113 char const* err = lua_tostring( K, -1); 110 char const* err = lua_tostring( K, -1);
114 assert( err); 111 assert( err);
115 return err; 112 return err;
116 } 113 } // package package.loaders
117 114 STACK_MID( K, 2);
115 lua_pop( K, 2);
116 STACK_END( K, 0)
118 MUTEX_INIT( &GKeepers[i].lock_); 117 MUTEX_INIT( &GKeepers[i].lock_);
119 GKeepers[i].L = K; 118 GKeepers[i].L = K;
120 //GKeepers[i].count = 0; 119 //GKeepers[i].count = 0;
diff --git a/src/keeper.lua b/src/lanes-keeper.lua
index 1f17599..1f17599 100644
--- a/src/keeper.lua
+++ b/src/lanes-keeper.lua
diff --git a/src/lanes.c b/src/lanes.c
index 3e906c0..300c924 100644
--- a/src/lanes.c
+++ b/src/lanes.c
@@ -51,7 +51,7 @@
51 * ... 51 * ...
52 */ 52 */
53 53
54char const* VERSION = "3.1.4"; 54char const* VERSION = "3.1.5";
55 55
56/* 56/*
57=============================================================================== 57===============================================================================
@@ -868,7 +868,7 @@ static void linda_id( lua_State *L, char const * const which)
868 // in other words, forever. 868 // in other words, forever.
869 lua_pushnil( L); 869 lua_pushnil( L);
870 // other idfuncs must push a string naming the module they come from 870 // other idfuncs must push a string naming the module they come from
871 //lua_pushliteral( L, "lua51-lanes"); 871 //lua_pushliteral( L, "lanes.core");
872 } 872 }
873} 873}
874 874
@@ -1697,11 +1697,11 @@ LUAG_FUNC( thread_new )
1697 1697
1698 // modules to require in the target lane *before* the function is transfered! 1698 // modules to require in the target lane *before* the function is transfered!
1699 1699
1700 //start by requiring lua51-lanes, since it is a bit special 1700 //start by requiring lanes.core, since it is a bit special
1701 // it is not fatal if 'require' isn't loaded, just ignore (may cause function transfer errors later on if the lane pulls the lanes module itself) 1701 // it is not fatal if 'require' isn't loaded, just ignore (may cause function transfer errors later on if the lane pulls the lanes module itself)
1702 STACK_CHECK(L) 1702 STACK_CHECK(L)
1703 STACK_CHECK(L2) 1703 STACK_CHECK(L2)
1704 lua_pushliteral( L, "lua51-lanes"); 1704 lua_pushliteral( L, "lanes.core");
1705 require_one_module( L, L2, FALSE); 1705 require_one_module( L, L2, FALSE);
1706 lua_pop( L, 1); 1706 lua_pop( L, 1);
1707 STACK_END(L2,0) 1707 STACK_END(L2,0)
@@ -2510,7 +2510,7 @@ int
2510#if (defined PLATFORM_WIN32) || (defined PLATFORM_POCKETPC) 2510#if (defined PLATFORM_WIN32) || (defined PLATFORM_POCKETPC)
2511__declspec(dllexport) 2511__declspec(dllexport)
2512#endif // (defined PLATFORM_WIN32) || (defined PLATFORM_POCKETPC) 2512#endif // (defined PLATFORM_WIN32) || (defined PLATFORM_POCKETPC)
2513luaopen_lanes( lua_State *L ) 2513luaopen_lanes_core( lua_State *L )
2514{ 2514{
2515 // Create main module interface table 2515 // Create main module interface table
2516 // we only have 1 closure, which must be called to configure Lanes 2516 // we only have 1 closure, which must be called to configure Lanes
diff --git a/src/lanes.lua b/src/lanes.lua
index bd66e6c..8cd3737 100644
--- a/src/lanes.lua
+++ b/src/lanes.lua
@@ -55,10 +55,10 @@ if _params.on_state_create and (type( _params.on_state_create) ~= "function") th
55 error( "Bad on_state_create: " .. tostring( _params.on_state_create), 2) 55 error( "Bad on_state_create: " .. tostring( _params.on_state_create), 2)
56end 56end
57 57
58local mm = require "lua51-lanes" 58local mm = require "lanes.core"
59assert( type(mm)=="table" ) 59assert( type(mm)=="table" )
60 60
61-- configure() is available only the first time lua51-lanes is required process-wide, and we *must* call it to have the other functions in the interface 61-- configure() is available only the first time lanes.core is required process-wide, and we *must* call it to have the other functions in the interface
62if mm.configure then mm.configure( _params.nb_keepers, _params.on_state_create) end 62if mm.configure then mm.configure( _params.nb_keepers, _params.on_state_create) end
63 63
64local thread_new = assert(mm.thread_new) 64local thread_new = assert(mm.thread_new)