diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2020-11-20 21:57:09 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2020-11-20 21:57:09 +0800 |
commit | 4ca61ec457822dd14966afa0752340ae8ce180a1 (patch) | |
tree | ae8adb1ad82c717868e551e699fd3cf3bb290089 /script/without-check-nil.lua | |
parent | c63b2e404d8d2bb984afe3678a5ba2b2836380cc (diff) | |
download | lua-language-server-4ca61ec457822dd14966afa0752340ae8ce180a1.zip |
no longer beta
Diffstat (limited to 'script/without-check-nil.lua')
-rw-r--r-- | script/without-check-nil.lua | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/script/without-check-nil.lua b/script/without-check-nil.lua new file mode 100644 index 00000000..cc7da9d4 --- /dev/null +++ b/script/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 |