diff options
author | 最萌小汐 <sumneko@hotmail.com> | 2022-06-28 15:29:18 +0800 |
---|---|---|
committer | 最萌小汐 <sumneko@hotmail.com> | 2022-06-28 15:29:18 +0800 |
commit | 75b8b11130cb3baae68082eaa49ecef9a8570e3a (patch) | |
tree | 495771883c3077f3a9a309297ebbbc77e1ff546b | |
parent | 599b44716801aea385e5726a37c788cdf674f78a (diff) | |
download | lua-language-server-75b8b11130cb3baae68082eaa49ecef9a8570e3a.zip |
special treat `local x; x = function() end`
-rw-r--r-- | script/vm/compiler.lua | 11 | ||||
-rw-r--r-- | test/type_inference/init.lua | 8 |
2 files changed, 19 insertions, 0 deletions
diff --git a/script/vm/compiler.lua b/script/vm/compiler.lua index c249b44d..b2cdb1be 100644 --- a/script/vm/compiler.lua +++ b/script/vm/compiler.lua @@ -1008,6 +1008,17 @@ local function compileLocal(source) vm.setNode(source, vm.compileNode(source.value)) end end + if not hasMarkValue and not hasMarkValue then + if source.ref then + for _, ref in ipairs(source.ref) do + if ref.type == 'setlocal' + and ref.value + and ref.value.type == 'function' then + vm.setNode(source, vm.compileNode(ref.value)) + end + end + end + end -- function x.y(self, ...) --> function x:y(...) if source[1] == 'self' and not hasMarkDoc diff --git a/test/type_inference/init.lua b/test/type_inference/init.lua index b5814e29..6d81e640 100644 --- a/test/type_inference/init.lua +++ b/test/type_inference/init.lua @@ -3167,3 +3167,11 @@ TEST 'number' [[ local function f() end local x, y, <?z?> = 1, 2, f() ]] + +TEST 'function' [[ +local f + +print(<?f?>) + +function f() end +]] |