summaryrefslogtreecommitdiffstats
path: root/src/eval.c
diff options
context:
space:
mode:
authorYegappan Lakshmanan <yegappan@yahoo.com>2023-10-14 11:18:50 +0200
committerChristian Brabandt <cb@256bit.org>2023-10-14 11:18:50 +0200
commit29bb67f1beefc7fd393dbfd9ee77d92f1db3a3c0 (patch)
treeedaeb40abcb04a2d89e2886cd583ef497f2ad469 /src/eval.c
parent69fb5afb3bc9da24c2fb0eafb0027ba9c6502fc2 (diff)
patch 9.0.2019: Vim9: no support for funcrefsv9.0.2019
Problem: Vim9: no support for funcrefs Solution: Add support for object/class funcref members closes: #11981 #12417 #12960 #12324 #13333 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/eval.c b/src/eval.c
index 4da6246ace..80ff5a3cba 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -5256,6 +5256,7 @@ partial_free(partial_T *pt)
}
else
func_ptr_unref(pt->pt_func);
+ object_unref(pt->pt_obj);
// "out_up" is no longer used, decrement refcount on partial that owns it.
partial_unref(pt->pt_outer.out_up_partial);
@@ -5578,6 +5579,7 @@ free_unref_items(int copyID)
/*
* PASS 2: free the items themselves.
*/
+ object_free_items(copyID);
dict_free_items(copyID);
list_free_items(copyID);
@@ -5818,6 +5820,15 @@ set_ref_in_item_partial(
set_ref_in_item(&dtv, copyID, ht_stack, list_stack);
}
+ if (pt->pt_obj != NULL)
+ {
+ typval_T objtv;
+
+ objtv.v_type = VAR_OBJECT;
+ objtv.vval.v_object = pt->pt_obj;
+ set_ref_in_item(&objtv, copyID, ht_stack, list_stack);
+ }
+
for (int i = 0; i < pt->pt_argc; ++i)
abort = abort || set_ref_in_item(&pt->pt_argv[i], copyID,
ht_stack, list_stack);