diff options
-rw-r--r-- | script/vm/compiler.lua | 20 | ||||
-rw-r--r-- | test/type_inference/init.lua | 5 |
2 files changed, 16 insertions, 9 deletions
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua index 173cf7d7..05057e68 100644 --- a/script/vm/compiler.lua +++ b/script/vm/compiler.lua @@ -499,7 +499,9 @@ local function compileByLocalID(source) for _, src in ipairs(sources) do if src.value then if not hasMarkDoc or guide.isLiteral(src.value) then - vm.setNode(source, vm.compileNode(src.value)) + if src.value.type ~= 'nil' then + vm.setNode(source, vm.compileNode(src.value)) + end end end end @@ -727,7 +729,7 @@ local function compileLocalBase(source) hasMarkValue = true if source.value.type == 'table' then vm.setNode(source, source.value) - else + elseif source.value.type ~= 'nil' then vm.setNode(source, vm.compileNode(source.value)) end end @@ -940,12 +942,10 @@ local compilerSwitch = util.switch() if source.value then if not hasMarkDoc or guide.isLiteral(source.value) then - if source.value then - if source.value.type == 'table' then - vm.setNode(source, source.value) - else - vm.setNode(source, vm.compileNode(source.value)) - end + if source.value.type == 'table' then + vm.setNode(source, source.value) + elseif source.value.type ~= 'nil' then + vm.setNode(source, vm.compileNode(source.value)) end end end @@ -1598,7 +1598,9 @@ local function compileByGlobal(source) for _, set in ipairs(global:getSets(uri)) do if set.value then if not hasMarkDoc or guide.isLiteral(set.value) then - globalNode:merge(vm.compileNode(set.value)) + if set.value.type ~= 'nil' then + globalNode:merge(vm.compileNode(set.value)) + end end end end diff --git a/test/type_inference/init.lua b/test/type_inference/init.lua index 4787dd56..7b5fb332 100644 --- a/test/type_inference/init.lua +++ b/test/type_inference/init.lua @@ -1466,3 +1466,8 @@ G = {} <?G?>:A() ]] + +TEST 'A' [[ +---@type A +local <?x?> = nil +]] |