# HG changeset patch # User Christian Brabandt # Date 1458852307 -3600 # Node ID 65130a9d3386b4dbb1eb3c0ba03c4f77c20b3dbe # Parent 0579053e54099730ed36ebfcb623bba1770f870c commit https://github.com/vim/vim/commit/c5fbe8af4cd80789f831b78aa44ff0b238138769 Author: Bram Moolenaar Date: Thu Mar 24 21:42:09 2016 +0100 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. diff --git a/src/eval.c b/src/eval.c --- 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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -749,6 +749,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1645, +/**/ 1644, /**/ 1643,