From f62d73933af7830301989eb8162ce94a80e61fbf Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Wed, 14 Apr 2021 12:40:00 +0200 Subject: patch 8.2.2762: Vim9: function line truncated when compiling Problem: Vim9: function line truncated when compiling. Solution: Copy the line before processing it. (closes #8101) --- src/testdir/test_vim9_disassemble.vim | 39 +++++++++++++++++++++++++++++++++++ src/version.c | 2 ++ src/vim9compile.c | 10 +++++++++ 3 files changed, 51 insertions(+) (limited to 'src') diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim index 363aaea356..3ea2ad9a40 100644 --- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -386,6 +386,33 @@ def Test_disassemble_blob_add() res) enddef +def s:BlobIndexSlice() + var b: blob = 0z112233 + echo b[1] + echo b[1 : 2] +enddef + +def Test_disassemble_blob_index_slice() + var res = execute('disass s:BlobIndexSlice') + assert_match('\d*_BlobIndexSlice\_s*' .. + 'var b: blob = 0z112233\_s*' .. + '\d PUSHBLOB 0z112233\_s*' .. + '\d STORE $0\_s*' .. + 'echo b\[1\]\_s*' .. + '\d LOAD $0\_s*' .. + '\d PUSHNR 1\_s*' .. + '\d BLOBINDEX\_s*' .. + '\d ECHO 1\_s*' .. + 'echo b\[1 : 2\]\_s*' .. + '\d LOAD $0\_s*' .. + '\d PUSHNR 1\_s*' .. + '\d\+ PUSHNR 2\_s*' .. + '\d\+ BLOBSLICE\_s*' .. + '\d\+ ECHO 1\_s*' .. + '\d\+ RETURN 0', + res) +enddef + def s:ScriptFuncUnlet() g:somevar = "value" unlet g:somevar @@ -2018,5 +2045,17 @@ def Test_profiled() res) enddef +def s:EchoMessages() + echohl ErrorMsg | echom v:exception | echohl NONE +enddef + +def Test_disassemble_nextcmd() + # splitting commands and removing trailing blanks should not change the line + var res = execute('disass s:EchoMessages') + assert_match('\d*_EchoMessages\_s*' .. + 'echohl ErrorMsg | echom v:exception | echohl NONE', + res) +enddef + " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c index 5372cb46cb..72da5f91ba 100644 --- a/src/version.c +++ b/src/version.c @@ -750,6 +750,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 2762, /**/ 2761, /**/ diff --git a/src/vim9compile.c b/src/vim9compile.c index 4a55f1973b..0ada441a4b 100644 --- a/src/vim9compile.c +++ b/src/vim9compile.c @@ -8486,6 +8486,7 @@ compile_def_function( cctx_T *outer_cctx) { char_u *line = NULL; + char_u *line_to_free = NULL; char_u *p; char *errormsg = NULL; // error message cctx_T cctx; @@ -8647,6 +8648,14 @@ compile_def_function( #endif break; } + // Make a copy, splitting off nextcmd and removing trailing spaces + // may change it. + if (line != NULL) + { + line = vim_strsave(line); + vim_free(line_to_free); + line_to_free = line; + } } CLEAR_FIELD(ea); @@ -9095,6 +9104,7 @@ erret: if (do_estack_push) estack_pop(); + vim_free(line_to_free); free_imported(&cctx); free_locals(&cctx); ga_clear(&cctx.ctx_type_stack); -- cgit v1.2.3