diff --git a/7.3.1004 b/7.3.1004 new file mode 100644 index 0000000..2498fe1 --- /dev/null +++ b/7.3.1004 @@ -0,0 +1,364 @@ +To: vim_dev@googlegroups.com +Subject: Patch 7.3.1004 +Fcc: outbox +From: Bram Moolenaar +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 7.3.1004 +Problem: No error when option could not be set. +Solution: Report an error. (ZyX) +Files: src/if_py_both.h, src/option.c, src/proto/option.pro, + src/testdir/test86.ok, src/testdir/test87.ok + + +*** ../vim-7.3.1003/src/if_py_both.h 2013-05-21 22:23:50.000000000 +0200 +--- src/if_py_both.h 2013-05-21 22:34:04.000000000 +0200 +*************** +*** 1521,1526 **** +--- 1521,1545 ---- + } + + static int ++ set_option_value_err(key, numval, stringval, opt_flags) ++ char_u *key; ++ int numval; ++ char_u *stringval; ++ int opt_flags; ++ { ++ char_u *errmsg; ++ ++ if ((errmsg = set_option_value(key, numval, stringval, opt_flags))) ++ { ++ if (VimTryEnd()) ++ return FAIL; ++ PyErr_SetVim((char *)errmsg); ++ return FAIL; ++ } ++ return OK; ++ } ++ ++ static int + set_option_value_for(key, numval, stringval, opt_flags, opt_type, from) + char_u *key; + int numval; +*************** +*** 1532,1537 **** +--- 1551,1557 ---- + win_T *save_curwin = NULL; + tabpage_T *save_curtab = NULL; + buf_T *save_curbuf = NULL; ++ int r = 0; + + VimTryStart(); + switch (opt_type) +*************** +*** 1545,1560 **** + PyErr_SetVim("Problem while switching windows."); + return -1; + } +! set_option_value(key, numval, stringval, opt_flags); + restore_win(save_curwin, save_curtab); + break; + case SREQ_BUF: + switch_buffer(&save_curbuf, (buf_T *)from); +! set_option_value(key, numval, stringval, opt_flags); + restore_buffer(save_curbuf); + break; + case SREQ_GLOBAL: +! set_option_value(key, numval, stringval, opt_flags); + break; + } + return VimTryEnd(); +--- 1565,1586 ---- + PyErr_SetVim("Problem while switching windows."); + return -1; + } +! r = set_option_value_err(key, numval, stringval, opt_flags); + restore_win(save_curwin, save_curtab); ++ if (r == FAIL) ++ return -1; + break; + case SREQ_BUF: + switch_buffer(&save_curbuf, (buf_T *)from); +! r = set_option_value_err(key, numval, stringval, opt_flags); + restore_buffer(save_curbuf); ++ if (r == FAIL) ++ return -1; + break; + case SREQ_GLOBAL: +! r = set_option_value_err(key, numval, stringval, opt_flags); +! if (r == FAIL) +! return -1; + break; + } + return VimTryEnd(); +*************** +*** 1611,1616 **** +--- 1637,1643 ---- + if (flags & SOPT_BOOL) + { + int istrue = PyObject_IsTrue(valObject); ++ + if (istrue == -1) + return -1; + r = set_option_value_for(key, istrue, NULL, +*** ../vim-7.3.1003/src/option.c 2013-05-19 19:16:25.000000000 +0200 +--- src/option.c 2013-05-21 22:34:41.000000000 +0200 +*************** +*** 3018,3024 **** + # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags) + #endif + static void set_string_option_global __ARGS((int opt_idx, char_u **varp)); +! static void set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags)); + static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags)); + static char_u *set_chars_option __ARGS((char_u **varp)); + #ifdef FEAT_SYN_HL +--- 3018,3024 ---- + # define insecure_flag(opt_idx, opt_flags) (&options[opt_idx].flags) + #endif + static void set_string_option_global __ARGS((int opt_idx, char_u **varp)); +! static char_u *set_string_option __ARGS((int opt_idx, char_u *value, int opt_flags)); + static char_u *did_set_string_option __ARGS((int opt_idx, char_u **varp, int new_value_alloced, char_u *oldval, char_u *errbuf, int opt_flags)); + static char_u *set_chars_option __ARGS((char_u **varp)); + #ifdef FEAT_SYN_HL +*************** +*** 5600,5607 **** + + /* + * Set a string option to a new value, and handle the effects. + */ +! static void + set_string_option(opt_idx, value, opt_flags) + int opt_idx; + char_u *value; +--- 5600,5609 ---- + + /* + * Set a string option to a new value, and handle the effects. ++ * ++ * Returns NULL on success or error message on error. + */ +! static char_u * + set_string_option(opt_idx, value, opt_flags) + int opt_idx; + char_u *value; +*************** +*** 5610,5618 **** + char_u *s; + char_u **varp; + char_u *oldval; + + if (options[opt_idx].var == NULL) /* don't set hidden option */ +! return; + + s = vim_strsave(value); + if (s != NULL) +--- 5612,5621 ---- + char_u *s; + char_u **varp; + char_u *oldval; ++ char_u *r = NULL; + + if (options[opt_idx].var == NULL) /* don't set hidden option */ +! return NULL; + + s = vim_strsave(value); + if (s != NULL) +*************** +*** 5624,5633 **** + : opt_flags); + oldval = *varp; + *varp = s; +! if (did_set_string_option(opt_idx, varp, TRUE, oldval, NULL, +! opt_flags) == NULL) + did_set_option(opt_idx, opt_flags, TRUE); + } + } + + /* +--- 5627,5637 ---- + : opt_flags); + oldval = *varp; + *varp = s; +! if ((r = did_set_string_option(opt_idx, varp, TRUE, oldval, NULL, +! opt_flags)) == NULL) + did_set_option(opt_idx, opt_flags, TRUE); + } ++ return r; + } + + /* +*************** +*** 8969,8976 **** + /* + * Set the value of option "name". + * Use "string" for string options, use "number" for other options. + */ +! void + set_option_value(name, number, string, opt_flags) + char_u *name; + long number; +--- 8973,8982 ---- + /* + * Set the value of option "name". + * Use "string" for string options, use "number" for other options. ++ * ++ * Returns NULL on success or error message on error. + */ +! char_u * + set_option_value(name, number, string, opt_flags) + char_u *name; + long number; +*************** +*** 8992,9002 **** + if (sandbox > 0 && (flags & P_SECURE)) + { + EMSG(_(e_sandbox)); +! return; + } + #endif + if (flags & P_STRING) +! set_string_option(opt_idx, string, opt_flags); + else + { + varp = get_varp_scope(&(options[opt_idx]), opt_flags); +--- 8998,9008 ---- + if (sandbox > 0 && (flags & P_SECURE)) + { + EMSG(_(e_sandbox)); +! return NULL; + } + #endif + if (flags & P_STRING) +! return set_string_option(opt_idx, string, opt_flags); + else + { + varp = get_varp_scope(&(options[opt_idx]), opt_flags); +*************** +*** 9017,9035 **** + * num option using a string. */ + EMSG3(_("E521: Number required: &%s = '%s'"), + name, string); +! return; /* do nothing as we hit an error */ + + } + } + if (flags & P_NUM) +! (void)set_num_option(opt_idx, varp, number, + NULL, 0, opt_flags); + else +! (void)set_bool_option(opt_idx, varp, (int)number, + opt_flags); + } + } + } + } + + /* +--- 9023,9042 ---- + * num option using a string. */ + EMSG3(_("E521: Number required: &%s = '%s'"), + name, string); +! return NULL; /* do nothing as we hit an error */ + + } + } + if (flags & P_NUM) +! return set_num_option(opt_idx, varp, number, + NULL, 0, opt_flags); + else +! return set_bool_option(opt_idx, varp, (int)number, + opt_flags); + } + } + } ++ return NULL; + } + + /* +*** ../vim-7.3.1003/src/proto/option.pro 2013-05-06 03:52:44.000000000 +0200 +--- src/proto/option.pro 2013-05-21 22:27:50.000000000 +0200 +*************** +*** 23,29 **** + char_u *check_stl_option __ARGS((char_u *s)); + int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags)); + int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from)); +! void set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags)); + char_u *get_term_code __ARGS((char_u *tname)); + char_u *get_highlight_default __ARGS((void)); + char_u *get_encoding_default __ARGS((void)); +--- 23,29 ---- + char_u *check_stl_option __ARGS((char_u *s)); + int get_option_value __ARGS((char_u *name, long *numval, char_u **stringval, int opt_flags)); + int get_option_value_strict __ARGS((char_u *name, long *numval, char_u **stringval, int opt_type, void *from)); +! char_u *set_option_value __ARGS((char_u *name, long number, char_u *string, int opt_flags)); + char_u *get_term_code __ARGS((char_u *tname)); + char_u *get_highlight_default __ARGS((void)); + char_u *get_encoding_default __ARGS((void)); +*** ../vim-7.3.1003/src/testdir/test86.ok 2013-05-21 22:23:51.000000000 +0200 +--- src/testdir/test86.ok 2013-05-21 22:27:50.000000000 +0200 +*************** +*** 166,171 **** +--- 166,172 ---- + inv: -100! KeyError + gopts1! KeyError + p/wopts1: 8 ++ inv: -100! error + p/bopts1! KeyError + inv: -100! KeyError + bopts1! KeyError +*************** +*** 184,189 **** +--- 185,191 ---- + inv: 'abc'! KeyError + gopts1! KeyError + p/wopts1: '' ++ inv: 'abc'! error + p/bopts1! KeyError + inv: 'abc'! KeyError + bopts1! KeyError +*** ../vim-7.3.1003/src/testdir/test87.ok 2013-05-21 22:23:51.000000000 +0200 +--- src/testdir/test87.ok 2013-05-21 22:27:50.000000000 +0200 +*************** +*** 155,160 **** +--- 155,161 ---- + inv: -100! KeyError + gopts1! KeyError + p/wopts1: 8 ++ inv: -100! error + p/bopts1! KeyError + inv: -100! KeyError + bopts1! KeyError +*************** +*** 173,178 **** +--- 174,180 ---- + inv: 'abc'! KeyError + gopts1! KeyError + p/wopts1: b'' ++ inv: 'abc'! error + p/bopts1! KeyError + inv: 'abc'! KeyError + bopts1! KeyError +*** ../vim-7.3.1003/src/version.c 2013-05-21 22:23:51.000000000 +0200 +--- src/version.c 2013-05-21 22:37:33.000000000 +0200 +*************** +*** 730,731 **** +--- 730,733 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 1004, + /**/ + +-- +FIRST SOLDIER: So they wouldn't be able to bring a coconut back anyway. +SECOND SOLDIER: Wait a minute! Suppose two swallows carried it together? +FIRST SOLDIER: No, they'd have to have it on a line. + "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 ///