diff options
author | Bram Moolenaar <Bram@vim.org> | 2018-12-22 18:59:06 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2018-12-22 18:59:06 +0100 |
commit | 9123c0b31a283f460ed2b6af95080120cf528118 (patch) | |
tree | 275e918901c144e4bfcea65dc761f86f7da27d35 /src/if_py_both.h | |
parent | 4814ccbdf0e99e2d33e1ac926c59f677f5c2afe2 (diff) | |
download | vim-git-9123c0b31a283f460ed2b6af95080120cf528118.tar.gz |
patch 8.1.0627: Python cannot handle function name of script-local functionv8.1.0627
Problem: Python cannot handle function name of script-local function.
Solution: Use <SNR> instead of the special byte code. (Ozaki Kiichi, closes
#3681)
Diffstat (limited to 'src/if_py_both.h')
-rw-r--r-- | src/if_py_both.h | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/src/if_py_both.h b/src/if_py_both.h index cdd746019..1a4ef462e 100644 --- a/src/if_py_both.h +++ b/src/if_py_both.h @@ -2922,8 +2922,7 @@ FunctionNew(PyTypeObject *subtype, char_u *name, int argc, typval_T *argv, { FunctionObject *self; - self = (FunctionObject *) subtype->tp_alloc(subtype, 0); - + self = (FunctionObject *)subtype->tp_alloc(subtype, 0); if (self == NULL) return NULL; @@ -2938,15 +2937,36 @@ FunctionNew(PyTypeObject *subtype, char_u *name, int argc, typval_T *argv, self->name = vim_strsave(name); } else - if ((self->name = get_expanded_name(name, - vim_strchr(name, AUTOLOAD_CHAR) == NULL)) - == NULL) + { + char_u *p; + + if ((p = get_expanded_name(name, + vim_strchr(name, AUTOLOAD_CHAR) == NULL)) == NULL) { PyErr_FORMAT(PyExc_ValueError, N_("function %s does not exist"), name); return NULL; } + if (p[0] == K_SPECIAL && p[1] == KS_EXTRA && p[2] == (int)KE_SNR) + { + char_u *np; + size_t len = STRLEN(p) + 1; + + if ((np = alloc(len + 2)) == NULL) + { + vim_free(p); + return NULL; + } + mch_memmove(np, "<SNR>", 5); + mch_memmove(np + 5, p + 3, len - 3); + vim_free(p); + self->name = np; + } + else + self->name = p; + } + func_ref(self->name); self->argc = argc; self->argv = argv; |