Skip to content

Commit

Permalink
#1091 fix runtime errors
Browse files Browse the repository at this point in the history
  • Loading branch information
sumneko committed Apr 25, 2022
1 parent f4b84ee commit 2c26700
Show file tree
Hide file tree
Showing 5 changed files with 44 additions and 30 deletions.
3 changes: 3 additions & 0 deletions changelog.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# changelog

## 3.2.2
* `FIX` runtime errors reported by telemetry, see [#1091](https://github.com/sumneko/lua-language-server/issues/1091)

## 3.2.1
`2022-4-25`
* `FIX` broken in VSCode
Expand Down
57 changes: 33 additions & 24 deletions script/vm/compiler.lua
Original file line number Diff line number Diff line change
Expand Up @@ -647,7 +647,7 @@ local function selectNode(source, list, index)
if exp.type == 'call' then
result = getReturn(exp.node, index, exp.args)
if not result then
vm.setNode(source, globalMgr.getGlobal('type', 'unknown'))
vm.setNode(source, globalMgr.declareGlobal('type', 'unknown'))
return vm.getNode(source)
end
else
Expand All @@ -673,7 +673,7 @@ local function selectNode(source, list, index)
end
end
if not hasKnownType then
rtnNode:merge(globalMgr.getGlobal('type', 'unknown'))
rtnNode:merge(globalMgr.declareGlobal('type', 'unknown'))
end
vm.setNode(source, rtnNode)
return rtnNode
Expand Down Expand Up @@ -877,7 +877,7 @@ local function compileLocal(source)
end
end
if not hasDocArg then
vm.setNode(source, globalMgr.getGlobal('type', 'any'))
vm.setNode(source, globalMgr.declareGlobal('type', 'any'))
end
end
-- for x in ... do
Expand Down Expand Up @@ -1252,7 +1252,7 @@ local compilerSwitch = util.switch()
: case 'loop'
: call(function (source)
if source.loc then
vm.setNode(source.loc, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source.loc, globalMgr.declareGlobal('type', 'integer'))
end
end)
: case 'doc.type'
Expand All @@ -1278,6 +1278,9 @@ local compilerSwitch = util.switch()
: call(function (source)
local uri = guide.getUri(source)
vm.setNode(source, source)
if not source.node[1] then
return
end
local global = globalMgr.getGlobal('type', source.node[1])
if not global then
return
Expand Down Expand Up @@ -1377,7 +1380,7 @@ local compilerSwitch = util.switch()
if source.extends then
vm.setNode(source, vm.compileNode(source.extends))
else
vm.setNode(source, globalMgr.getGlobal('type', 'any'))
vm.setNode(source, globalMgr.declareGlobal('type', 'any'))
end
if source.optional then
vm.getNode(source):addOptional()
Expand All @@ -1392,10 +1395,13 @@ local compilerSwitch = util.switch()
if bindAs(source) then
return
end
if not source[1] then
return
end
if source.op.type == 'not' then
local result = vm.test(source[1])
if result == nil then
vm.setNode(source, globalMgr.getGlobal('type', 'boolean'))
vm.setNode(source, globalMgr.declareGlobal('type', 'boolean'))
return
else
vm.setNode(source, {
Expand All @@ -1409,13 +1415,13 @@ local compilerSwitch = util.switch()
end
end
if source.op.type == '#' then
vm.setNode(source, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source, globalMgr.declareGlobal('type', 'integer'))
return
end
if source.op.type == '-' then
local v = vm.getNumber(source[1])
if v == nil then
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
else
vm.setNode(source, {
Expand All @@ -1431,7 +1437,7 @@ local compilerSwitch = util.switch()
if source.op.type == '~' then
local v = vm.getInteger(source[1])
if v == nil then
vm.setNode(source, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source, globalMgr.declareGlobal('type', 'integer'))
return
else
vm.setNode(source, {
Expand All @@ -1450,6 +1456,9 @@ local compilerSwitch = util.switch()
if bindAs(source) then
return
end
if not source[1] or not source[2] then
return
end
if source.op.type == 'and' then
local node1 = vm.compileNode(source[1])
local node2 = vm.compileNode(source[2])
Expand Down Expand Up @@ -1479,7 +1488,7 @@ local compilerSwitch = util.switch()
if source.op.type == '==' then
local result = vm.equal(source[1], source[2])
if result == nil then
vm.setNode(source, globalMgr.getGlobal('type', 'boolean'))
vm.setNode(source, globalMgr.declareGlobal('type', 'boolean'))
return
else
vm.setNode(source, {
Expand All @@ -1495,7 +1504,7 @@ local compilerSwitch = util.switch()
if source.op.type == '~=' then
local result = vm.equal(source[1], source[2])
if result == nil then
vm.setNode(source, globalMgr.getGlobal('type', 'boolean'))
vm.setNode(source, globalMgr.declareGlobal('type', 'boolean'))
return
else
vm.setNode(source, {
Expand All @@ -1521,7 +1530,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source, globalMgr.declareGlobal('type', 'integer'))
return
end
end
Expand All @@ -1538,7 +1547,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source, globalMgr.declareGlobal('type', 'integer'))
return
end
end
Expand All @@ -1555,7 +1564,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source, globalMgr.declareGlobal('type', 'integer'))
return
end
end
Expand All @@ -1572,7 +1581,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source, globalMgr.declareGlobal('type', 'integer'))
return
end
end
Expand All @@ -1589,7 +1598,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'integer'))
vm.setNode(source, globalMgr.declareGlobal('type', 'integer'))
return
end
end
Expand All @@ -1607,7 +1616,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
end
end
Expand All @@ -1625,7 +1634,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
end
end
Expand All @@ -1643,7 +1652,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
end
end
Expand All @@ -1660,7 +1669,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
end
end
Expand All @@ -1678,7 +1687,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
end
end
Expand All @@ -1695,7 +1704,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
end
end
Expand All @@ -1713,7 +1722,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'number'))
vm.setNode(source, globalMgr.declareGlobal('type', 'number'))
return
end
end
Expand Down Expand Up @@ -1750,7 +1759,7 @@ local compilerSwitch = util.switch()
})
return
else
vm.setNode(source, globalMgr.getGlobal('type', 'string'))
vm.setNode(source, globalMgr.declareGlobal('type', 'string'))
return
end
end
Expand Down
6 changes: 4 additions & 2 deletions script/vm/global-manager.lua
Original file line number Diff line number Diff line change
Expand Up @@ -209,11 +209,13 @@ local compilerGlobalSwitch = util.switch()

---@param cate vm.global.cate
---@param name string
---@param uri uri
---@param uri? uri
---@return vm.global
function m.declareGlobal(cate, name, uri)
local key = cate .. '|' .. name
m.globalSubs[uri][key] = true
if uri then
m.globalSubs[uri][key] = true
end
if not m.globals[key] then
m.globals[key] = globalBuilder(name, cate)
end
Expand Down
2 changes: 1 addition & 1 deletion script/vm/sign.lua
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ function mt:resolve(uri, args, removeGeneric)
end
if n.type == 'global' and n.cate == 'type' then
-- ---@field [integer]: number -> T[]
vm.getClassFields(uri, n, globalMgr.getGlobal('type', 'integer'), false, function (field)
vm.getClassFields(uri, n, globalMgr.declareGlobal('type', 'integer'), false, function (field)
resolve(object.node, vm.compileNode(field.extends))
end)
end
Expand Down
6 changes: 3 additions & 3 deletions script/vm/type.lua
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ function vm.getTableKey(uri, tnode, vnode)
end
end
if tn.type == 'doc.type.array' then
result:merge(globalMgr.getGlobal('type', 'integer'))
result:merge(globalMgr.declareGlobal('type', 'integer'))
end
if tn.type == 'table' then
for _, field in ipairs(tn) do
Expand All @@ -144,10 +144,10 @@ function vm.getTableKey(uri, tnode, vnode)
end
end
if field.type == 'tablefield' then
result:merge(globalMgr.getGlobal('type', 'string'))
result:merge(globalMgr.declareGlobal('type', 'string'))
end
if field.type == 'tableexp' then
result:merge(globalMgr.getGlobal('type', 'integer'))
result:merge(globalMgr.declareGlobal('type', 'integer'))
end
end
end
Expand Down

0 comments on commit 2c26700

Please sign in to comment.