From 75b8b11130cb3baae68082eaa49ecef9a8570e3a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=80=E8=90=8C=E5=B0=8F=E6=B1=90?= Date: Tue, 28 Jun 2022 15:29:18 +0800 Subject: special treat `local x; x = function() end` --- script/vm/compiler.lua | 11 +++++++++++ test/type_inference/init.lua | 8 ++++++++ 2 files changed, 19 insertions(+) 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, = 1, 2, f() ]] + +TEST 'function' [[ +local f + +print() + +function f() end +]] -- cgit v1.2.3