diff --git a/.gitmodules b/.gitmodules index 044283d..80242eb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -10,9 +10,6 @@ [submodule "framework/3rd/glm"] path = framework/3rd/glm url = https://github.com/g-truc/glm.git -[submodule "framework/3rd/moon"] - path = framework/3rd/moon - url = https://github.com/siffiejoe/lua-moon.git [submodule "framework/3rd/termbox"] path = framework/3rd/termbox url = https://github.com/nullgemm/termbox_next.git diff --git a/framework/3rd/moon b/framework/3rd/moon deleted file mode 160000 index 7f1f94b..0000000 --- a/framework/3rd/moon +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7f1f94b66762df19570505219c9031f9a411c649 diff --git a/framework/lualib/3rd/misc/isa.lua b/framework/lualib/3rd/misc/isa.lua new file mode 100644 index 0000000..9d5b2a5 --- /dev/null +++ b/framework/lualib/3rd/misc/isa.lua @@ -0,0 +1,144 @@ +-- https://github.com/mah0x211/lua-isa + +-- constants +local INF_POS = math.huge; +local INF_NEG = -INF_POS; +local type = type; +local floor = math.floor; + +-- type +local function isNil(arg) + return type(arg) == 'nil'; +end + +local function isBoolean(arg) + return type(arg) == 'boolean'; +end + +local function isString(arg) + return type(arg) == 'string'; +end + +local function isNumber(arg) + return type(arg) == 'number'; +end + +local function isFunction(arg) + return type(arg) == 'function'; +end + +local function isTable(arg) + return type(arg) == 'table'; +end + +local function isThread(arg) + return type(arg) == 'thread'; +end + +local function isUserdata(arg) + return type(arg) == 'userdata'; +end + +-- boolean +local function isTrue(arg) + return arg == true; +end + +local function isFalse(arg) + return arg == false; +end + +-- None +local function isNone(arg) + return arg == nil or arg == false or arg == 0 or arg == '' or arg ~= arg; +end + +-- arithmetic +local function isNaN(arg) + return arg ~= arg; +end + +-- integer +local function isFinite(arg) + return type(arg) == 'number' and (arg < INF_POS and arg > INF_NEG); +end + +local function isInt(arg) + return isFinite(arg) and rawequal(floor(arg), arg); +end + +local function isInt8(arg) + return isInt(arg) and arg >= -128 and arg <= 127; +end + +local function isInt16(arg) + return isInt(arg) and arg >= -32768 and arg <= 32767; +end + +local function isInt32(arg) + return isInt(arg) and arg >= -2147483648 and arg <= 2147483647; +end + +-- unsigned integer +local function isUnsigned(arg) + return type(arg) == 'number' and (arg < INF_POS and arg >= 0); +end + +local function isUInt(arg) + return isUnsigned(arg) and rawequal(floor(arg), arg); +end + +local function isUInt8(arg) + return isUInt(arg) and arg <= 255; +end + +local function isUInt16(arg) + return isUInt(arg) and arg <= 65535; +end + +local function isUInt32(arg) + return isUInt(arg) and arg <= 4294967295; +end + +local EXPORTS = {}; + +for k, v in pairs({ + -- type + ['Nil'] = isNil, + ['Boolean'] = isBoolean, + ['String'] = isString, + ['Number'] = isNumber, + ['Function'] = isFunction, + ['Table'] = isTable, + ['Thread'] = isThread, + ['Userdata'] = isUserdata, + + -- boolean + ['True'] = isTrue, + ['False'] = isFalse, + + -- None: nil | false | 0 | '' | nan + ['None'] = isNone, + + -- arithmetic + -- NaN + ['NaN'] = isNaN, + ['Finite'] = isFinite, + + -- integer + ['Int'] = isInt, + ['Int8'] = isInt8, + ['Int16'] = isInt16, + ['Int32'] = isInt32, + + -- unsigned integer + ['Unsigned'] = isUnsigned, + ['UInt'] = isUInt, + ['UInt8'] = isUInt8, + ['UInt16'] = isUInt16, + ['UInt32'] = isUInt32, +}) do + EXPORTS[k], EXPORTS[k:lower()] = v, v; +end + +return EXPORTS; diff --git a/framework/lualib/3rd/misc/loadchunk.lua b/framework/lualib/3rd/misc/loadchunk.lua new file mode 100644 index 0000000..73fd8a0 --- /dev/null +++ b/framework/lualib/3rd/misc/loadchunk.lua @@ -0,0 +1,47 @@ +-- https://github.com/mah0x211/lua-loadchunk +local load = load +local loadstring = loadstring +local loadfile = loadfile +local setfenv = setfenv +--- constants +local LUA_VERSION = tonumber(string.match(_VERSION, 'Lua (.+)$')) + +--- evalstr +-- @param src +-- @param env +-- @param ident +-- @return fn +-- @return err +local function evalstr(src, env, ident) + if LUA_VERSION > 5.1 then + return load(src, ident, nil, env) + else + local fn, err = loadstring(src, ident) + if not err and env ~= nil then + setfenv(fn, env) + end + return fn, err + end +end + +--- evalfile +-- @param file +-- @param env +-- @return fn +-- @return err +local function evalfile(file, env) + if LUA_VERSION > 5.1 then + return loadfile(file, nil, env) + else + local fn, err = loadfile(file) + if not err and env ~= nil then + setfenv(fn, env) + end + return fn, err + end +end + +return { + string = evalstr, + file = evalfile, +}