To: vim_dev@googlegroups.com
Subject: Patch 7.3.1004
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
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 ///