aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.md1
-rw-r--r--msvc/llthreads.vcproj12
-rw-r--r--src/l52util.c5
-rw-r--r--src/l52util.h5
-rw-r--r--src/llthread.c24
5 files changed, 29 insertions, 18 deletions
diff --git a/README.md b/README.md
index 3e2661a..2ca6f36 100644
--- a/README.md
+++ b/README.md
@@ -5,6 +5,7 @@ lua-llthreads2
5This is full dropin replacement for [llthreads](https://github.com/Neopallium/lua-llthreads) library. 5This is full dropin replacement for [llthreads](https://github.com/Neopallium/lua-llthreads) library.
6 6
7##Incompatibility list with origin llthreads library 7##Incompatibility list with origin llthreads library
8* does not support Lua 5.0
8* does not support ffi interface (use Lua C API for LuaJIT) 9* does not support ffi interface (use Lua C API for LuaJIT)
9* returns nil instead of false on error 10* returns nil instead of false on error
10* start method returns self instead of true on success 11* start method returns self instead of true on success
diff --git a/msvc/llthreads.vcproj b/msvc/llthreads.vcproj
index 7b2a0e2..6f6c5bd 100644
--- a/msvc/llthreads.vcproj
+++ b/msvc/llthreads.vcproj
@@ -41,7 +41,7 @@
41 <Tool 41 <Tool
42 Name="VCCLCompilerTool" 42 Name="VCCLCompilerTool"
43 Optimization="0" 43 Optimization="0"
44 AdditionalIncludeDirectories="$(LUA_DIR)\include" 44 AdditionalIncludeDirectories="$(LUA_DIR_5_2)\include"
45 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LLTHREADS_EXPORTS" 45 PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;LLTHREADS_EXPORTS"
46 MinimalRebuild="true" 46 MinimalRebuild="true"
47 BasicRuntimeChecks="3" 47 BasicRuntimeChecks="3"
@@ -62,9 +62,9 @@
62 <Tool 62 <Tool
63 Name="VCLinkerTool" 63 Name="VCLinkerTool"
64 AdditionalOptions="/EXPORT:luaopen_llthreads" 64 AdditionalOptions="/EXPORT:luaopen_llthreads"
65 AdditionalDependencies="lua5.1.lib" 65 AdditionalDependencies="lua52.lib"
66 LinkIncremental="2" 66 LinkIncremental="2"
67 AdditionalLibraryDirectories="$(LUA_DIR)\lib" 67 AdditionalLibraryDirectories="$(LUA_DIR_5_2)\lib"
68 GenerateDebugInformation="true" 68 GenerateDebugInformation="true"
69 SubSystem="2" 69 SubSystem="2"
70 TargetMachine="1" 70 TargetMachine="1"
@@ -118,7 +118,7 @@
118 Name="VCCLCompilerTool" 118 Name="VCCLCompilerTool"
119 Optimization="2" 119 Optimization="2"
120 EnableIntrinsicFunctions="true" 120 EnableIntrinsicFunctions="true"
121 AdditionalIncludeDirectories="$(LUA_DIR)\include" 121 AdditionalIncludeDirectories="$(LUA_DIR_5_2)\include"
122 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LLTHREADS_EXPORTS" 122 PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;LLTHREADS_EXPORTS"
123 RuntimeLibrary="2" 123 RuntimeLibrary="2"
124 EnableFunctionLevelLinking="true" 124 EnableFunctionLevelLinking="true"
@@ -137,9 +137,9 @@
137 /> 137 />
138 <Tool 138 <Tool
139 Name="VCLinkerTool" 139 Name="VCLinkerTool"
140 AdditionalDependencies="lua5.1.lib" 140 AdditionalDependencies="lua52.lib"
141 LinkIncremental="1" 141 LinkIncremental="1"
142 AdditionalLibraryDirectories="$(LUA_DIR)\lib" 142 AdditionalLibraryDirectories="$(LUA_DIR_5_2)\lib"
143 GenerateDebugInformation="true" 143 GenerateDebugInformation="true"
144 SubSystem="2" 144 SubSystem="2"
145 OptimizeReferences="2" 145 OptimizeReferences="2"
diff --git a/src/l52util.c b/src/l52util.c
index 592c1d1..0b40c3e 100644
--- a/src/l52util.c
+++ b/src/l52util.c
@@ -43,6 +43,11 @@ void lua_rawsetp (lua_State *L, int index, const void *p){
43 lua_rawset(L, index); 43 lua_rawset(L, index);
44} 44}
45 45
46void lutil_require(lua_State *L, const char* name, lua_CFunction fn, int glb) {
47 // @fixme generate error if we can not load module
48 lua_cpcall(L, fn, NULL);
49}
50
46#endif 51#endif
47 52
48int lutil_newmetatablep (lua_State *L, const void *p) { 53int lutil_newmetatablep (lua_State *L, const void *p) {
diff --git a/src/l52util.h b/src/l52util.h
index f4f0497..94f1bfa 100644
--- a/src/l52util.h
+++ b/src/l52util.h
@@ -18,6 +18,9 @@ int luaL_typerror (lua_State *L, int narg, const char *tname);
18 18
19void luaL_register (lua_State *L, const char *libname, const luaL_Reg *l); 19void luaL_register (lua_State *L, const char *libname, const luaL_Reg *l);
20 20
21
22#define lutil_require luaL_requiref
23
21#else // lua 5.1 24#else // lua 5.1
22 25
23// functions form lua 5.2 26// functions form lua 5.2
@@ -29,6 +32,8 @@ void lua_rawgetp (lua_State *L, int index, const void *p);
29void lua_rawsetp (lua_State *L, int index, const void *p); 32void lua_rawsetp (lua_State *L, int index, const void *p);
30void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup); 33void luaL_setfuncs (lua_State *L, const luaL_Reg *l, int nup);
31 34
35void lutil_require(lua_State *L, const char* name, lua_CFunction fn, int glb);
36
32#endif 37#endif
33 38
34int lutil_newmetatablep (lua_State *L, const void *p); 39int lutil_newmetatablep (lua_State *L, const void *p);
diff --git a/src/llthread.c b/src/llthread.c
index 6cb437b..0449ea9 100644
--- a/src/llthread.c
+++ b/src/llthread.c
@@ -308,26 +308,26 @@ typedef struct llthread_t {
308 308
309static void open_thread_libs(lua_State *L){ 309static void open_thread_libs(lua_State *L){
310#ifdef LLTHREAD_REGISTER_STD_LIBRARY 310#ifdef LLTHREAD_REGISTER_STD_LIBRARY
311# define L_REGLIB(L, name) lua_pushcfunction(L, luaopen_##name); lua_setfield(L, -2, #name) 311# define L_REGLIB(L, name, G) lua_pushcfunction(L, luaopen_##name); lua_setfield(L, -2, #name)
312#else 312#else
313# define L_REGLIB(L, name) lua_cpcall(L, luaopen_##name, 0) 313# define L_REGLIB(L, name, G) lutil_require(L, #name, luaopen_##name, G)
314#endif 314#endif
315 315
316 int top = lua_gettop(L); 316 int top = lua_gettop(L);
317 lua_cpcall(L, luaopen_base, 0); 317 lutil_require(L, "_G", luaopen_base, 1);
318 lua_cpcall(L, luaopen_package, 0); 318 lutil_require(L, "package", luaopen_package, 1);
319 lua_settop(L, top); 319 lua_settop(L, top);
320 320
321 /* get package.preload */ 321 /* get package.preload */
322 lua_getglobal(L, "package"); lua_getfield(L, -1, "preload"); lua_remove(L, -2); 322 lua_getglobal(L, "package"); lua_getfield(L, -1, "preload"); lua_remove(L, -2);
323 323
324 L_REGLIB(L, io ); 324 L_REGLIB(L, io, 1);
325 L_REGLIB(L, os ); 325 L_REGLIB(L, os, 1);
326 L_REGLIB(L, math ); 326 L_REGLIB(L, math, 1);
327 L_REGLIB(L, table ); 327 L_REGLIB(L, table, 1);
328 L_REGLIB(L, debug ); 328 L_REGLIB(L, debug, 1);
329 L_REGLIB(L, string ); 329 L_REGLIB(L, string, 1);
330 L_REGLIB(L, llthreads ); 330 L_REGLIB(L, llthreads, 0);
331 331
332 lua_settop(L, top); 332 lua_settop(L, top);
333#undef L_REGLIB 333#undef L_REGLIB
@@ -446,7 +446,7 @@ static int llthread_start(llthread_t *this, int start_detached) {
446#ifndef USE_PTHREAD 446#ifndef USE_PTHREAD
447 this->thread = (HANDLE)_beginthreadex(NULL, 0, llthread_child_thread_run, child, 0, NULL); 447 this->thread = (HANDLE)_beginthreadex(NULL, 0, llthread_child_thread_run, child, 0, NULL);
448 if(INVALID_THREAD == this->thread){ 448 if(INVALID_THREAD == this->thread){
449 rc = -1 449 rc = -1;
450 } 450 }
451#else 451#else
452 rc = pthread_create(&(this->thread), NULL, llthread_child_thread_run, child); 452 rc = pthread_create(&(this->thread), NULL, llthread_child_thread_run, child);