To: vim_dev@googlegroups.com Subject: Patch 8.2.2762 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 8.2.2762 Problem: Vim9: function line truncated when compiling. Solution: Copy the line before processing it. (closes #8101) Files: src/vim9compile.c, src/testdir/test_vim9_disassemble.vim *** ../vim-8.2.2761/src/vim9compile.c 2021-04-13 21:47:59.544306690 +0200 --- src/vim9compile.c 2021-04-14 12:34:52.565554528 +0200 *************** *** 8486,8491 **** --- 8486,8492 ---- 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,8652 **** --- 8648,8661 ---- #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,9100 **** --- 9104,9110 ---- if (do_estack_push) estack_pop(); + vim_free(line_to_free); free_imported(&cctx); free_locals(&cctx); ga_clear(&cctx.ctx_type_stack); *** ../vim-8.2.2761/src/testdir/test_vim9_disassemble.vim 2021-04-11 18:24:40.498508499 +0200 --- src/testdir/test_vim9_disassemble.vim 2021-04-14 12:37:52.960893966 +0200 *************** *** 386,391 **** --- 386,418 ---- 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,2022 **** --- 2045,2061 ---- 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 *** ../vim-8.2.2761/src/version.c 2021-04-14 11:15:05.336785013 +0200 --- src/version.c 2021-04-14 12:38:34.408745669 +0200 *************** *** 752,753 **** --- 752,755 ---- { /* Add new patch number below this line */ + /**/ + 2762, /**/ -- From "know your smileys": <|-) Chinese <|-( Chinese and doesn't like these kind of jokes /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// \\\ \\\ sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///