Patch 8.0.0654
Problem:    Text found after :endfunction is silently ignored.
Solution:   Give a warning if 'verbose' is set.  When | or \n are used,
            execute the text as a command.
Files:      src/testdir/test_vimscript.vim, src/userfunc.c,
            runtime/doc/eval.txt


*** ../vim-8.0.0653/src/testdir/test_vimscript.vim      2017-06-04 
20:29:56.585724971 +0200
--- src/testdir/test_vimscript.vim      2017-06-22 18:54:40.411532954 +0200
***************
*** 1363,1368 ****
--- 1363,1395 ----
      call assert_fails("call invert({})", 'E728:')
  endfunc
  
+ " Test trailing text after :endfunction                                   {{{1
+ func Test_endfunction_trailing()
+     call assert_false(exists('*Xtest'))
+ 
+     exe "func Xtest()\necho 'hello'\nendfunc\nlet done = 'yes'"
+     call assert_true(exists('*Xtest'))
+     call assert_equal('yes', done)
+     delfunc Xtest
+     unlet done
+ 
+     exe "func Xtest()\necho 'hello'\nendfunc|let done = 'yes'"
+     call assert_true(exists('*Xtest'))
+     call assert_equal('yes', done)
+     delfunc Xtest
+     unlet done
+ 
+     set verbose=1
+     exe "func Xtest()\necho 'hello'\nendfunc \" garbage"
+     call assert_true(exists('*Xtest'))
+     delfunc Xtest
+ 
+     call assert_fails("func Xtest()\necho 'hello'\nendfunc garbage", 'E946')
+     call assert_true(exists('*Xtest'))
+     delfunc Xtest
+     set verbose=0
+ endfunc
+ 
  
"-------------------------------------------------------------------------------
  " Modelines                                                               {{{1
  " vim: ts=8 sw=4 tw=80 fdm=marker
*** ../vim-8.0.0653/src/userfunc.c      2017-04-07 19:50:08.691049319 +0200
--- src/userfunc.c      2017-06-22 18:40:56.814037821 +0200
***************
*** 2130,2135 ****
--- 2130,2143 ----
            /* Check for "endfunction". */
            if (checkforcmd(&p, "endfunction", 4) && nesting-- == 0)
            {
+               if (*p == '|')
+                   /* Another command follows. */
+                   eap->nextcmd = vim_strsave(p + 1);
+               else if (line_arg != NULL && *skipwhite(line_arg) != NUL)
+                   /* Another command follows. */
+                   eap->nextcmd = line_arg;
+               else if (*p != NUL && *p != '"' && p_verbose > 0)
+                   EMSG2((char_u *)_("E946: Text found after :endfunction: 
%s"), p);
                if (line_arg == NULL)
                    vim_free(theline);
                break;
*** ../vim-8.0.0653/runtime/doc/eval.txt        2017-06-11 16:07:20.702719866 
+0200
--- runtime/doc/eval.txt        2017-06-22 19:08:52.484740712 +0200
***************
*** 8756,8773 ****
                        implies that the effect of |:nohlsearch| is undone
                        when the function returns.
  
!                                       *:endf* *:endfunction* *E126* *E193*
! :endf[unction]                The end of a function definition.  Must be on a 
line
!                       by its own, without other commands.
  
                                *:delf* *:delfunction* *E130* *E131* *E933*
! :delf[unction] {name} Delete function {name}.
                        {name} can also be a |Dictionary| entry that is a
                        |Funcref|: >
                                :delfunc dict.init
  <                     This will remove the "init" entry from "dict".  The
                        function is deleted if there are no more references to
                        it.
                                                        *:retu* *:return* *E133*
  :retu[rn] [expr]      Return from a function.  When "[expr]" is given, it is
                        evaluated and returned as the result of the function.
--- 8764,8795 ----
                        implies that the effect of |:nohlsearch| is undone
                        when the function returns.
  
!                               *:endf* *:endfunction* *E126* *E193* *E946*
! :endf[unction] [argument]
!                       The end of a function definition.  Best is to put it
!                       on a line by its own, without [argument].
! 
!                       [argument] can be:
!                               | command       command to execute next
!                               \n command      command to execute next
!                               " comment       always ignored
!                               anything else   ignored, unless 'verbose' is
!                                               non-zero
!                       The support for a following command was added in Vim
!                       8.0.0654, before that any argument was silently
!                       ignored.
  
                                *:delf* *:delfunction* *E130* *E131* *E933*
! :delf[unction][!] {name}
!                       Delete function {name}.
                        {name} can also be a |Dictionary| entry that is a
                        |Funcref|: >
                                :delfunc dict.init
  <                     This will remove the "init" entry from "dict".  The
                        function is deleted if there are no more references to
                        it.
+                       With the ! there is no error if the function does not
+                       exist.
                                                        *:retu* *:return* *E133*
  :retu[rn] [expr]      Return from a function.  When "[expr]" is given, it is
                        evaluated and returned as the result of the function.
*** ../vim-8.0.0653/src/version.c       2017-06-22 16:04:23.809432669 +0200
--- src/version.c       2017-06-22 19:09:15.772554124 +0200
***************
*** 766,767 ****
--- 766,769 ----
  {   /* Add new patch number below this line */
+ /**/
+     654,
  /**/

-- 
I'm trying to be an optimist, but I don't think it'll work.

 /// Bram Moolenaar -- [email protected] -- 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    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui