Mercurial > vim
diff src/vim9compile.c @ 26594:b12d8a5af20e v8.2.3826
patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Commit: https://github.com/vim/vim/commit/b15cf44c1d9c92a2ac07cff415071e31a9ad88fa
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Dec 16 15:49:43 2021 +0000
patch 8.2.3826: Vim9: using "g:Func" as funcref doesn't work in :def function
Problem: Vim9: using "g:Func" as a funcref does not work in a :def
function.
Solution: Include "g:" in the function name. (closes #9336)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 16 Dec 2021 17:00:05 +0100 |
parents | cd452f46085e |
children | fac6673086df |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1281,12 +1281,26 @@ generate_PUSHBLOB(cctx_T *cctx, blob_T * generate_PUSHFUNC(cctx_T *cctx, char_u *name, type_T *type) { isn_T *isn; + char_u *funcname; RETURN_OK_IF_SKIP(cctx); if ((isn = generate_instr_type(cctx, ISN_PUSHFUNC, type)) == NULL) return FAIL; - isn->isn_arg.string = name == NULL ? NULL : vim_strsave(name); - + if (name == NULL) + funcname = NULL; + else if (*name == K_SPECIAL) // script-local + funcname = vim_strsave(name); + else + { + funcname = alloc(STRLEN(name) + 3); + if (funcname != NULL) + { + STRCPY(funcname, "g:"); + STRCPY(funcname + 2, name); + } + } + + isn->isn_arg.string = funcname; return OK; }