diff options
Diffstat (limited to 'script-beta/without-check-nil.lua')
-rw-r--r-- | script-beta/without-check-nil.lua | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/script-beta/without-check-nil.lua b/script-beta/without-check-nil.lua new file mode 100644 index 00000000..cc7da9d4 --- /dev/null +++ b/script-beta/without-check-nil.lua @@ -0,0 +1,126 @@ +local m = {} + +local mt = {} +mt.__add = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a + b +end +mt.__sub = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a - b +end +mt.__mul = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a * b +end +mt.__div = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a / b +end +mt.__mod = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a % b +end +mt.__pow = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a ^ b +end +mt.__unm = function () + return 0 +end +mt.__concat = function (a, b) + if a == nil then a = '' end + if b == nil then b = '' end + return a .. b +end +mt.__len = function () + return 0 +end +mt.__lt = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a < b +end +mt.__le = function (a, b) + if a == nil then a = 0 end + if b == nil then b = 0 end + return a <= b +end +mt.__index = function () end +mt.__newindex = function () end +mt.__call = function () end +mt.__pairs = function () end +mt.__ipairs = function () end +if _VERSION == 'Lua 5.3' or _VERSION == 'Lua 5.4' then + mt.__idiv = load[[ + local a, b = ... + if a == nil then a = 0 end + if b == nil then b = 0 end + return a // b + ]] + mt.__band = load[[ + local a, b = ... + if a == nil then a = 0 end + if b == nil then b = 0 end + return a & b + ]] + mt.__bor = load[[ + local a, b = ... + if a == nil then a = 0 end + if b == nil then b = 0 end + return a | b + ]] + mt.__bxor = load[[ + local a, b = ... + if a == nil then a = 0 end + if b == nil then b = 0 end + return a ~ b + ]] + mt.__bnot = load[[ + return ~ 0 + ]] + mt.__shl = load[[ + local a, b = ... + if a == nil then a = 0 end + if b == nil then b = 0 end + return a << b + ]] + mt.__shr = load[[ + local a, b = ... + if a == nil then a = 0 end + if b == nil then b = 0 end + return a >> b + ]] +end + +for event, func in pairs(mt) do + mt[event] = function (...) + local watch = m.watch + if not watch then + return func(...) + end + local care, result = watch(event, ...) + if not care then + return func(...) + end + return result + end +end + +function m.enable() + debug.setmetatable(nil, mt) +end + +function m.disable() + if debug.getmetatable(nil) == mt then + debug.setmetatable(nil, nil) + end +end + +return m |