diff --git a/script/vm/sign.lua b/script/vm/sign.lua
index 3cd6bc5d77d49a9122f6ce7816253667777fe491..38cb2242b30e7c947fc6e11562411e77cc76bc01 100644
--- a/script/vm/sign.lua
+++ b/script/vm/sign.lua
@@ -142,13 +142,15 @@ function mt:resolve(uri, args)
         end
         if object.type == 'doc.type.function' then
             for i, arg in ipairs(object.args) do
-                for n in node:eachObject() do
-                    if n.type == 'function'
-                    or n.type == 'doc.type.function' then
-                        ---@cast n parser.object
-                        local farg = n.args and n.args[i]
-                        if farg then
-                            resolve(arg.extends, vm.compileNode(farg))
+                if arg.extends then
+                    for n in node:eachObject() do
+                        if n.type == 'function'
+                        or n.type == 'doc.type.function' then
+                            ---@cast n parser.object
+                            local farg = n.args and n.args[i]
+                            if farg then
+                                resolve(arg.extends, vm.compileNode(farg))
+                            end
                         end
                     end
                 end