Patch 7.4.327
Problem:    When 'verbose' is set to display the return value of a function,
            may get E724 repeatedly.
Solution:   Do not give an error for verbose messages. Abort conversion to
            string after an error.
Files:      src/eval.c


*** ../vim-7.4.326/src/eval.c   2014-06-12 18:39:16.828400409 +0200
--- src/eval.c  2014-06-17 12:48:12.083946675 +0200
***************
*** 134,139 ****
--- 134,142 ----
  #define COPYID_INC 2
  #define COPYID_MASK (~0x1)
  
+ /* Abort conversion to string after a recursion error. */
+ static int  did_echo_string_emsg = FALSE;
+ 
  /*
   * Array to hold the hashtab with variables local to each sourced script.
   * Each item holds a variable (nameless) that points to the dict_T.
***************
*** 6686,6691 ****
--- 6689,6696 ----
        }
  
        line_breakcheck();
+       if (did_echo_string_emsg)  /* recursion error, bail out */
+           break;
      }
  
      /* Allocate result buffer with its total size, avoid re-allocation and
***************
*** 7460,7467 ****
            if (s != NULL)
                ga_concat(&ga, s);
            vim_free(tofree);
!           if (s == NULL)
                break;
        }
      }
      if (todo > 0)
--- 7465,7474 ----
            if (s != NULL)
                ga_concat(&ga, s);
            vim_free(tofree);
!           if (s == NULL || did_echo_string_emsg)
                break;
+           line_breakcheck();
+ 
        }
      }
      if (todo > 0)
***************
*** 7619,7627 ****
  
      if (recurse >= DICT_MAXNEST)
      {
!       EMSG(_("E724: variable nested too deep for displaying"));
        *tofree = NULL;
!       return NULL;
      }
      ++recurse;
  
--- 7626,7641 ----
  
      if (recurse >= DICT_MAXNEST)
      {
!       if (!did_echo_string_emsg)
!       {
!           /* Only give this message once for a recursive call to avoid
!            * flooding the user with errors.  And stop iterating over lists
!            * and dicts. */
!           did_echo_string_emsg = TRUE;
!           EMSG(_("E724: variable nested too deep for displaying"));
!       }
        *tofree = NULL;
!       return (char_u *)"{E724}";
      }
      ++recurse;
  
***************
*** 7689,7695 ****
            *tofree = NULL;
      }
  
!     --recurse;
      return r;
  }
  
--- 7703,7710 ----
            *tofree = NULL;
      }
  
!     if (--recurse == 0)
!       did_echo_string_emsg = FALSE;
      return r;
  }
  
***************
*** 23303,23309 ****
--- 23318,23327 ----
                        msg_outnum((long)argvars[i].vval.v_number);
                    else
                    {
+                       /* Do not want errors such as E724 here. */
+                       ++emsg_off;
                        s = tv2string(&argvars[i], &tofree, numbuf2, 0);
+                       --emsg_off;
                        if (s != NULL)
                        {
                            if (vim_strsize(s) > MSG_BUF_CLEN)
***************
*** 23395,23402 ****
  
            /* The value may be very long.  Skip the middle part, so that we
             * have some idea how it starts and ends. smsg() would always
!            * truncate it at the end. */
            s = tv2string(fc->rettv, &tofree, numbuf2, 0);
            if (s != NULL)
            {
                if (vim_strsize(s) > MSG_BUF_CLEN)
--- 23413,23422 ----
  
            /* The value may be very long.  Skip the middle part, so that we
             * have some idea how it starts and ends. smsg() would always
!            * truncate it at the end. Don't want errors such as E724 here. */
!           ++emsg_off;
            s = tv2string(fc->rettv, &tofree, numbuf2, 0);
+           --emsg_off;
            if (s != NULL)
            {
                if (vim_strsize(s) > MSG_BUF_CLEN)
*** ../vim-7.4.326/src/version.c        2014-06-14 12:53:27.394152699 +0200
--- src/version.c       2014-06-17 12:41:45.019932032 +0200
***************
*** 736,737 ****
--- 736,739 ----
  {   /* Add new patch number below this line */
+ /**/
+     327,
  /**/

-- 
TALL KNIGHT: We shall say Ni! again to you if you do not appease us.
ARTHUR:      All right!  What do you want?
TALL KNIGHT: We want ... a shrubbery!
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// 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