summaryrefslogtreecommitdiff
path: root/script-beta/without-check-nil.lua
diff options
context:
space:
mode:
Diffstat (limited to 'script-beta/without-check-nil.lua')
-rw-r--r--script-beta/without-check-nil.lua126
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