summaryrefslogtreecommitdiff
path: root/script/parser
diff options
context:
space:
mode:
author最萌小汐 <sumneko@hotmail.com>2020-12-23 10:54:06 +0800
committer最萌小汐 <sumneko@hotmail.com>2020-12-23 10:54:06 +0800
commit2ee2233df6d8bfc6c6ed60cb6ab0051a6f41e219 (patch)
treed3eb0661a8e62c70e209768c215157324755b6bd /script/parser
parenta51d5f625faa63fa10770743a8f1a0e1693a43a3 (diff)
downloadlua-language-server-2ee2233df6d8bfc6c6ed60cb6ab0051a6f41e219.zip
fix
Diffstat (limited to 'script/parser')
-rw-r--r--script/parser/guide.lua25
1 files changed, 25 insertions, 0 deletions
diff --git a/script/parser/guide.lua b/script/parser/guide.lua
index 0d5775e6..b07a301e 100644
--- a/script/parser/guide.lua
+++ b/script/parser/guide.lua
@@ -18,6 +18,7 @@ local assert = assert
local select = select
local osClock = os.clock
local tonumber = tonumber
+local tointeger = math.tointeger
local DEVELOP = _G.DEVELOP
local log = log
local _G = _G
@@ -3411,6 +3412,8 @@ function m.inferCheckBinary(status, source)
or m.getInferLiteral(status, source[1], 'number')
local v2 = m.getInferLiteral(status, source[2], 'integer')
or m.getInferLiteral(status, source[2], 'number')
+ v1 = tonumber(v1)
+ v2 = tonumber(v2)
local v
if v1 and v2 then
v = v1 <= v2
@@ -3427,6 +3430,8 @@ function m.inferCheckBinary(status, source)
or m.getInferLiteral(status, source[1], 'number')
local v2 = m.getInferLiteral(status, source[2], 'integer')
or m.getInferLiteral(status, source[2], 'number')
+ v1 = tonumber(v1)
+ v2 = tonumber(v2)
local v
if v1 and v2 then
v = v1 >= v2
@@ -3443,6 +3448,8 @@ function m.inferCheckBinary(status, source)
or m.getInferLiteral(status, source[1], 'number')
local v2 = m.getInferLiteral(status, source[2], 'integer')
or m.getInferLiteral(status, source[2], 'number')
+ v1 = tonumber(v1)
+ v2 = tonumber(v2)
local v
if v1 and v2 then
v = v1 < v2
@@ -3459,6 +3466,8 @@ function m.inferCheckBinary(status, source)
or m.getInferLiteral(status, source[1], 'number')
local v2 = m.getInferLiteral(status, source[2], 'integer')
or m.getInferLiteral(status, source[2], 'number')
+ v1 = tonumber(v1)
+ v2 = tonumber(v2)
local v
if v1 and v2 then
v = v1 > v2
@@ -3473,6 +3482,8 @@ function m.inferCheckBinary(status, source)
elseif op.type == '|' then
local v1 = m.getInferLiteral(status, source[1], 'integer')
local v2 = m.getInferLiteral(status, source[2], 'integer')
+ v1 = tointeger(v1)
+ v2 = tointeger(v2)
local v
if v1 and v2 then
v = v1 | v2
@@ -3487,6 +3498,8 @@ function m.inferCheckBinary(status, source)
elseif op.type == '~' then
local v1 = m.getInferLiteral(status, source[1], 'integer')
local v2 = m.getInferLiteral(status, source[2], 'integer')
+ v1 = tointeger(v1)
+ v2 = tointeger(v2)
local v
if v1 and v2 then
v = v1 ~ v2
@@ -3501,6 +3514,8 @@ function m.inferCheckBinary(status, source)
elseif op.type == '&' then
local v1 = m.getInferLiteral(status, source[1], 'integer')
local v2 = m.getInferLiteral(status, source[2], 'integer')
+ v1 = tointeger(v1)
+ v2 = tointeger(v2)
local v
if v1 and v2 then
v = v1 & v2
@@ -3515,6 +3530,8 @@ function m.inferCheckBinary(status, source)
elseif op.type == '<<' then
local v1 = m.getInferLiteral(status, source[1], 'integer')
local v2 = m.getInferLiteral(status, source[2], 'integer')
+ v1 = tointeger(v1)
+ v2 = tointeger(v2)
local v
if v1 and v2 then
v = v1 << v2
@@ -3529,6 +3546,8 @@ function m.inferCheckBinary(status, source)
elseif op.type == '>>' then
local v1 = m.getInferLiteral(status, source[1], 'integer')
local v2 = m.getInferLiteral(status, source[2], 'integer')
+ v1 = tointeger(v1)
+ v2 = tointeger(v2)
local v
if v1 and v2 then
v = v1 >> v2
@@ -3543,6 +3562,8 @@ function m.inferCheckBinary(status, source)
elseif op.type == '..' then
local v1 = m.getInferLiteral(status, source[1], 'string')
local v2 = m.getInferLiteral(status, source[2], 'string')
+ v1 = type(v1) == 'string' and v1 or nil
+ v2 = type(v2) == 'string' and v2 or nil
local v
if v1 and v2 then
v = v1 .. v2
@@ -3559,6 +3580,8 @@ function m.inferCheckBinary(status, source)
or m.getInferLiteral(status, source[1], 'number')
local v2 = m.getInferLiteral(status, source[2], 'integer')
or m.getInferLiteral(status, source[2], 'number')
+ v1 = tonumber(v1)
+ v2 = tonumber(v2)
local v
if v1 and v2 then
v = v1 ^ v2
@@ -3575,6 +3598,8 @@ function m.inferCheckBinary(status, source)
or m.getInferLiteral(status, source[1], 'number')
local v2 = m.getInferLiteral(status, source[2], 'integer')
or m.getInferLiteral(status, source[2], 'number')
+ v1 = tonumber(v1)
+ v2 = tonumber(v2)
local v
if v1 and v2 and v2 ~= 0 then
v = v1 / v2