patch 8.2.0683: Vim9: parsing type does not always work

Problem:    Vim9: parsing type does not always work.
Solution:   Handle func type without return value.  Test more closures.
            Fix type check offset.  Fix garbage collection.
diff --git a/src/userfunc.c b/src/userfunc.c
index 2493dfe..6aee377 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -4392,6 +4392,8 @@
 	    fp = HI2UF(hi);
 	    if (!func_name_refcount(fp->uf_name))
 		abort = abort || set_ref_in_func(NULL, fp, copyID);
+	    else if (fp->uf_dfunc_idx >= 0)
+		abort = abort || set_ref_in_dfunc(fp, copyID);
 	}
     }
     return abort;
@@ -4439,7 +4441,10 @@
     {
 	for (fc = fp->uf_scoped; fc != NULL; fc = fc->func->uf_scoped)
 	    abort = abort || set_ref_in_funccal(fc, copyID);
+	if (fp->uf_dfunc_idx >= 0)
+	    abort = abort || set_ref_in_dfunc(fp, copyID);
     }
+
     vim_free(tofree);
     return abort;
 }