From bc87b892f2a70e9614ea514ec818f8f6fee79004 Mon Sep 17 00:00:00 2001 From: Thomas Harning Jr Date: Tue, 10 Apr 2012 22:43:42 -0400 Subject: [PATCH] base/lua: updates to be compatible with both Lua 5.2 and Lua 5.1 --- CHANGELOG | 4 ++++ include/luaevent.h | 23 ++++++++++++++++++++++- lua/luaevent.lua | 52 ++++++++++++++++++++++++++++------------------------ test/basic.lua | 2 +- test/test.lua | 5 +++-- test/testClient.lua | 5 +++-- test/timertest.lua | 6 +++--- 7 files changed, 64 insertions(+), 33 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 3300516..9fec9e5 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,4 +1,8 @@ 0.4.0 - WIP + * Makes compatible with Lua 5.2 + * Remove use of 'module' in sources + * Remove assumption that luaevent will set globals + - Only 'core' will modify global table (creating luaevent.core) * Fixes bug in merge for receivePartial 0.3.2 - 2011-07-06 * Fixed recorded version in Lua diff --git a/include/luaevent.h b/include/luaevent.h index e419998..c462545 100644 --- a/include/luaevent.h +++ b/include/luaevent.h @@ -1,9 +1,30 @@ -/* LuaEvent - Copyright (C) 2007 Thomas Harning +/* LuaEvent - Copyright (C) 2007,2012 Thomas Harning * Licensed as LGPL - See doc/COPYING for details */ #ifndef LUAEVENT_H #define LUAEVENT_H #include + +/* Workarounds for Lua 5.2 */ +#if (LUA_VERSION_NUM == 502) + +#undef lua_equal +#define lua_equal(L,idx1,idx2) lua_compare(L, (idx1), (idx2), LUA_OPEQ) + +#undef lua_getfenv +#define lua_getfenv lua_getuservalue +#undef lua_setfenv +#define lua_setfenv lua_setuservalue + +#undef lua_objlen +#define lua_objlen lua_rawlen + +#undef luaL_register +#define luaL_register(L, n, f) \ + { if ((n) == NULL) luaL_setfuncs(L, f, 0); else luaL_newlib(L, f); } + +#endif + #include #ifdef _WIN32 #include diff --git a/lua/luaevent.lua b/lua/luaevent.lua index 2947ce9..c532956 100644 --- a/lua/luaevent.lua +++ b/lua/luaevent.lua @@ -2,15 +2,16 @@ LuaEvent - Copyright (C) 2007,2012 Thomas Harning Licensed as LGPL - See doc/COPYING for details. ]] -module("luaevent", package.seeall) -require("luaevent.core") +local _M = {} +local core = require("luaevent.core") -_NAME = "luaevent"; -_VERSION = "0.3.2"; +_M.core = core +_M._NAME = "luaevent" +_M._VERSION = "0.4.0" -local EV_READ = luaevent.core.EV_READ -local EV_WRITE = luaevent.core.EV_WRITE -local base = luaevent.core.new() +local EV_READ = core.EV_READ +local EV_WRITE = core.EV_WRITE +local base = core.new() local function addevent(...) return base:addevent(...) @@ -30,7 +31,7 @@ local function socketWait(sock, event) end -function send(sock, data, start, stop) +function _M.send(sock, data, start, stop) local s, err local from = start or 1 local sent = 0 @@ -41,7 +42,7 @@ function send(sock, data, start, stop) socketWait(sock, EV_WRITE) until false end -function receive(sock, pattern, part) +function _M.receive(sock, pattern, part) local s, err pattern = pattern or '*l' repeat @@ -52,17 +53,18 @@ function receive(sock, pattern, part) end -- same as above but with special treatment when reading chunks, -- unblocks on any data received. -function receivePartial(client, pattern) +function _M.receivePartial(client, pattern) local s, err, part pattern = pattern or "*l" repeat - s, err, part = client:receive(pattern) - if s or ( (type(pattern)=="number") and part~="" and part ~=nil ) or - err ~= "timeout" then return s, err, part end + s, err, part = client:receive(pattern) + if s or ( (type(pattern)=="number") and part~="" and part ~=nil ) or err ~= "timeout" then + return s, err, part + end socketWait(client, EV_READ) until false end -function connect(sock, ...) +function _M.connect(sock, ...) sock:settimeout(0) local ret, err = sock:connect(...) if ret or err ~= "timeout" then return ret, err end @@ -74,7 +76,7 @@ function connect(sock, ...) return ret, err end -- Deprecated.. -function flush(sock) +function _M.flush(sock) end local function clientCoroutine(sock, handler) -- Figure out what to do ...... @@ -96,30 +98,30 @@ local function serverCoroutine(sock, callback) end until false end -function addserver(sock, callback) +function _M.addserver(sock, callback) local coro = coroutine.create(serverCoroutine) assert(coroutine.resume(coro, sock, callback)) end -function addthread(func, ...) +function _M.addthread(func, ...) return coroutine.resume(coroutine.create(func), ...) end local _skt_mt = {__index = { connect = function(self, ...) - return connect(self.socket, ...) + return _M.connect(self.socket, ...) end, send = function (self, data) - return send(self.socket, data) + return _M.send(self.socket, data) end, receive = function (self, pattern) if (self.timeout==0) then - return receivePartial(self.socket, pattern) + return _M.receivePartial(self.socket, pattern) end - return receive(self.socket, pattern) + return _M.receive(self.socket, pattern) end, flush = function (self) - return flush(self.socket) + return _M.flush(self.socket) end, settimeout = function (self,time) @@ -132,7 +134,9 @@ local _skt_mt = {__index = { self.socket:close() end }} -function wrap(sock) +function _M.wrap(sock) return setmetatable({socket = sock}, _skt_mt) end -loop = function(...) base:loop(...) end +_M.loop = function(...) base:loop(...) end + +return _M diff --git a/test/basic.lua b/test/basic.lua index 4ec72c4..7e9773b 100644 --- a/test/basic.lua +++ b/test/basic.lua @@ -1,4 +1,4 @@ -require "luaevent" +local luaevent = require("luaevent") print("Version:", luaevent._NAME.." "..luaevent._VERSION) print("libevent version:", luaevent.core.libevent_version()) diff --git a/test/test.lua b/test/test.lua index 412857e..b748542 100644 --- a/test/test.lua +++ b/test/test.lua @@ -3,8 +3,9 @@ -- Run the test file and the connect to the server by telnet on the used port -- to stop the test just send the command "quit" -require"luaevent" -require"socket" +local luaevent = require("luaevent") +local socket = require("socket") + local oldPrint = print print = function(...) oldPrint("SRV", ...) diff --git a/test/testClient.lua b/test/testClient.lua index 871207a..fcf3b0b 100644 --- a/test/testClient.lua +++ b/test/testClient.lua @@ -1,5 +1,6 @@ -require"luaevent" -require"socket" +local luaevent = require("luaevent") +local socket = require("socket") + local oldPrint = print print = function(...) oldPrint("CLT", ...) diff --git a/test/timertest.lua b/test/timertest.lua index ec1257c..3261013 100644 --- a/test/timertest.lua +++ b/test/timertest.lua @@ -1,9 +1,9 @@ -require("luaevent.core") +local core = require("luaevent.core") -c = luaevent.core.new() +c = core.new() local f = 100 local function createEvent() - return c:addevent(nil, luaevent.core.EV_TIMEOUT, function(ev) io.write(".." .. f) f = f - 1 if f < 0 then return -1 end collectgarbage() end, 0.01) + return c:addevent(nil, core.EV_TIMEOUT, function(ev) io.write(".." .. f) f = f - 1 if f < 0 then return -1 end collectgarbage() end, 0.01) end ev = createEvent() print("TESTING Garbage-collect-safe version") -- 2.11.4.GIT