Mercurial > vim
diff src/vim9compile.c @ 24404:a2a7d2d6e724 v8.2.2742
patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Commit: https://github.com/vim/vim/commit/701cc6ca9e940665a9424541f989bb38c853a498
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Apr 10 13:33:48 2021 +0200
patch 8.2.2742: Vim9: when compiling a function fails it is cleared
Problem: Vim9: when compiling a function fails it is cleared.
Solution: Keep the function lines, prevent execution with a different
status. (closes #8093)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 10 Apr 2021 13:45:05 +0200 |
parents | 009a540f16a6 |
children | a26f0fa12845 |
line wrap: on
line diff
--- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -1791,8 +1791,9 @@ func_needs_compiling(ufunc_T *ufunc, int { switch (ufunc->uf_def_status) { - case UF_NOT_COMPILED: break; - case UF_TO_BE_COMPILED: return TRUE; + case UF_TO_BE_COMPILED: + return TRUE; + case UF_COMPILED: { #ifdef FEAT_PROFILE @@ -1805,7 +1806,11 @@ func_needs_compiling(ufunc_T *ufunc, int break; #endif } - case UF_COMPILING: break; + + case UF_NOT_COMPILED: + case UF_COMPILE_ERROR: + case UF_COMPILING: + break; } return FALSE; } @@ -1834,7 +1839,8 @@ generate_CALL(cctx_T *cctx, ufunc_T *ufu return FAIL; } - if (ufunc->uf_def_status != UF_NOT_COMPILED) + if (ufunc->uf_def_status != UF_NOT_COMPILED + && ufunc->uf_def_status != UF_COMPILE_ERROR) { int i; @@ -9007,14 +9013,11 @@ erret: --def_functions.ga_len; ufunc->uf_dfunc_idx = 0; } - ufunc->uf_def_status = UF_NOT_COMPILED; + ufunc->uf_def_status = UF_COMPILE_ERROR; while (cctx.ctx_scope != NULL) drop_scope(&cctx); - // Don't execute this function body. - ga_clear_strings(&ufunc->uf_lines); - if (errormsg != NULL) emsg(errormsg); else if (did_emsg == did_emsg_before)