Patch 8.2.1152

4 views
Skip to first unread message

Bram Moolenaar

unread,
Jul 7, 2020, 4:50:58 PM7/7/20
to vim...@googlegroups.com

Patch 8.2.1152
Problem: Vim9: function reference is missing script prefix.
Solution: Use the actual function name instead of the name searched for in
the script context. (closes #6412)
Files: src/vim9compile.c, src/testdir/test_vim9_script.vim


*** ../vim-8.2.1151/src/vim9compile.c 2020-07-06 23:04:44.829229830 +0200
--- src/vim9compile.c 2020-07-07 22:35:38.042271918 +0200
***************
*** 2676,2682 ****
if (ufunc == NULL)
return FAIL;

! return generate_PUSHFUNC(cctx, vim_strsave(name), ufunc->uf_func_type);
}

/*
--- 2676,2683 ----
if (ufunc == NULL)
return FAIL;

! return generate_PUSHFUNC(cctx, vim_strsave(ufunc->uf_name),
! ufunc->uf_func_type);
}

/*
*** ../vim-8.2.1151/src/testdir/test_vim9_script.vim 2020-07-05 21:38:07.857431843 +0200
--- src/testdir/test_vim9_script.vim 2020-07-07 22:34:29.446459421 +0200
***************
*** 980,985 ****
--- 980,1018 ----
delete('Ximport.vim')
enddef

+ " Not exported function that is referenced needs to be accessed by the
+ " script-local name.
+ def Test_vim9script_funcref()
+ let sortlines =<< trim END
+ vim9script
+ def Compare(i1: number, i2: number): number
+ return 1
+ enddef
+
+ export def FastSort(): list<number>
+ return range(5)->sort(Compare)
+ enddef
+ END
+ writefile(sortlines, 'Xsort.vim')
+
+ let lines =<< trim END
+ vim9script
+ import FastSort from './Xsort.vim'
+ def Test()
+ g:result = FastSort()
+ enddef
+ Test()
+ END
+ writefile(lines, 'Xscript.vim')
+
+ source Xscript.vim
+ assert_equal([4, 3, 2, 1, 0], g:result)
+
+ unlet g:result
+ delete('Xsort.vim')
+ delete('Xscript.vim')
+ enddef
+
def Test_vim9script_reload_delfunc()
let first_lines =<< trim END
vim9script
*** ../vim-8.2.1151/src/version.c 2020-07-07 20:50:35.570759730 +0200
--- src/version.c 2020-07-07 22:29:07.947338232 +0200
***************
*** 756,757 ****
--- 756,759 ----
{ /* Add new patch number below this line */
+ /**/
+ 1152,
/**/

--
For humans, honesty is a matter of degree. Engineers are always honest in
matters of technology and human relationships. That's why it's a good idea
to keep engineers away from customers, romantic interests, and other people
who can't handle the truth.
(Scott Adams - The Dilbert principle)

/// Bram Moolenaar -- Br...@Moolenaar.net -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
Reply all
Reply to author
Forward
0 new messages