From c5fbe8af4cd80789f831b78aa44ff0b238138769 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Thu, 24 Mar 2016 21:42:09 +0100 Subject: patch 7.4.1645 Problem: When a dict contains a partial it can't be redefined as a function. (Nikolai Pavlov) Solution: Remove the partial when overwriting with a function. --- src/eval.c | 3 ++- src/testdir/test_partial.vim | 13 +++++++++++++ src/version.c | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/eval.c b/src/eval.c index 453756217..db6ef9d5d 100644 --- a/src/eval.c +++ b/src/eval.c @@ -23455,7 +23455,8 @@ ex_function(exarg_T *eap) else arg = fudi.fd_newkey; if (arg != NULL && (fudi.fd_di == NULL - || fudi.fd_di->di_tv.v_type != VAR_FUNC)) + || (fudi.fd_di->di_tv.v_type != VAR_FUNC + && fudi.fd_di->di_tv.v_type != VAR_PARTIAL))) { if (*arg == K_SPECIAL) j = 3; diff --git a/src/testdir/test_partial.vim b/src/testdir/test_partial.vim index 75cc49251..1fe67eabc 100644 --- a/src/testdir/test_partial.vim +++ b/src/testdir/test_partial.vim @@ -193,3 +193,16 @@ func Test_tostring() call assert_true(v:false, v:exception) endtry endfunc + +func Test_redefine_dict_func() + let d = {} + function d.test4() + endfunction + let d.test4 = d.test4 + try + function! d.test4(name) + endfunction + catch + call assert_true(v:errmsg, v:exception) + endtry +endfunc diff --git a/src/version.c b/src/version.c index b90a0d0a9..dd9b5c285 100644 --- a/src/version.c +++ b/src/version.c @@ -748,6 +748,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1645, /**/ 1644, /**/ -- cgit v1.2.1