To: vim_dev@googlegroups.com Subject: Patch 7.4.327 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 -- Bram@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 ///