]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.1004 v7.3.1004
authorBram Moolenaar <Bram@vim.org>
Tue, 21 May 2013 20:38:18 +0000 (22:38 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 21 May 2013 20:38:18 +0000 (22:38 +0200)
Problem:    No error when option could not be set.
Solution:   Report an error. (ZyX)

src/if_py_both.h
src/option.c
src/proto/option.pro
src/testdir/test86.ok
src/testdir/test87.ok
src/version.c

index b658ce36780dff3aa838f5472aab96bba00d0a4d..777e7dae049abdf318afee56c7c41b6fbaacde9b 100644 (file)
@@ -1520,6 +1520,25 @@ OptionsItem(OptionsObject *self, PyObject *keyObject)
     }
 }
 
+    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;
@@ -1532,6 +1551,7 @@ set_option_value_for(key, numval, stringval, opt_flags, opt_type, from)
     win_T      *save_curwin = NULL;
     tabpage_T  *save_curtab = NULL;
     buf_T      *save_curbuf = NULL;
+    int                r = 0;
 
     VimTryStart();
     switch (opt_type)
@@ -1545,16 +1565,22 @@ set_option_value_for(key, numval, stringval, opt_flags, opt_type, from)
                PyErr_SetVim("Problem while switching windows.");
                return -1;
            }
-           set_option_value(key, numval, stringval, opt_flags);
+           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);
-           set_option_value(key, numval, stringval, opt_flags);
+           r = set_option_value_err(key, numval, stringval, opt_flags);
            restore_buffer(save_curbuf);
+           if (r == FAIL)
+               return -1;
            break;
        case SREQ_GLOBAL:
-           set_option_value(key, numval, stringval, opt_flags);
+           r = set_option_value_err(key, numval, stringval, opt_flags);
+           if (r == FAIL)
+               return -1;
            break;
     }
     return VimTryEnd();
@@ -1611,6 +1637,7 @@ OptionsAssItem(OptionsObject *self, PyObject *keyObject, PyObject *valObject)
     if (flags & SOPT_BOOL)
     {
        int     istrue = PyObject_IsTrue(valObject);
+
        if (istrue == -1)
            return -1;
        r = set_option_value_for(key, istrue, NULL,
index 325f061d9589680a5026843a1b744bc1016e4dbe..a9ee0673cd81bb2a2e816c674579beff42474997 100644 (file)
@@ -3018,7 +3018,7 @@ static long_u *insecure_flag __ARGS((int opt_idx, int opt_flags));
 # 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 *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,8 +5600,10 @@ set_string_option_global(opt_idx, varp)
 
 /*
  * Set a string option to a new value, and handle the effects.
+ *
+ * Returns NULL on success or error message on error.
  */
-    static void
+    static char_u *
 set_string_option(opt_idx, value, opt_flags)
     int                opt_idx;
     char_u     *value;
@@ -5610,9 +5612,10 @@ set_string_option(opt_idx, value, opt_flags)
     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;
+       return NULL;
 
     s = vim_strsave(value);
     if (s != NULL)
@@ -5624,10 +5627,11 @@ set_string_option(opt_idx, value, opt_flags)
                    : opt_flags);
        oldval = *varp;
        *varp = s;
-       if (did_set_string_option(opt_idx, varp, TRUE, oldval, NULL,
-                                                          opt_flags) == NULL)
+       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,8 +8973,10 @@ get_option_value_strict(name, numval, stringval, opt_type, from)
 /*
  * 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.
  */
-    void
+    char_u *
 set_option_value(name, number, string, opt_flags)
     char_u     *name;
     long       number;
@@ -8992,11 +8998,11 @@ set_option_value(name, number, string, opt_flags)
        if (sandbox > 0 && (flags & P_SECURE))
        {
            EMSG(_(e_sandbox));
-           return;
+           return NULL;
        }
 #endif
        if (flags & P_STRING)
-           set_string_option(opt_idx, string, opt_flags);
+           return set_string_option(opt_idx, string, opt_flags);
        else
        {
            varp = get_varp_scope(&(options[opt_idx]), opt_flags);
@@ -9017,19 +9023,20 @@ set_option_value(name, number, string, opt_flags)
                         * num option using a string. */
                        EMSG3(_("E521: Number required: &%s = '%s'"),
                                                                name, string);
-                       return;     /* do nothing as we hit an error */
+                       return NULL;     /* do nothing as we hit an error */
 
                    }
                }
                if (flags & P_NUM)
-                   (void)set_num_option(opt_idx, varp, number,
+                   return set_num_option(opt_idx, varp, number,
                                                          NULL, 0, opt_flags);
                else
-                   (void)set_bool_option(opt_idx, varp, (int)number,
+                   return set_bool_option(opt_idx, varp, (int)number,
                                                                   opt_flags);
            }
        }
     }
+    return NULL;
 }
 
 /*
index 681fa4592a99ba92bc6ac6076732d515a663317b..853a34252834e76884c647eef328c00089aa4b46 100644 (file)
@@ -23,7 +23,7 @@ char_u *check_colorcolumn __ARGS((win_T *wp));
 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 *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));
index d64fa7cf269895f36c717a6dade78096c13dc9b9..bc01816884ac93f56fa9c598d76165faacbe8edc 100644 (file)
@@ -166,6 +166,7 @@ jkl
   inv: -100! KeyError
   gopts1! KeyError
   p/wopts1: 8
+  inv: -100! error
   p/bopts1! KeyError
   inv: -100! KeyError
   bopts1! KeyError
@@ -184,6 +185,7 @@ jkl
   inv: 'abc'! KeyError
   gopts1! KeyError
   p/wopts1: ''
+  inv: 'abc'! error
   p/bopts1! KeyError
   inv: 'abc'! KeyError
   bopts1! KeyError
index 77548d55915bbfa6c90f5c5d9204a514c792efa6..fa663fbf02d292b461f3e43492288ab2fc25886b 100644 (file)
@@ -155,6 +155,7 @@ jkl
   inv: -100! KeyError
   gopts1! KeyError
   p/wopts1: 8
+  inv: -100! error
   p/bopts1! KeyError
   inv: -100! KeyError
   bopts1! KeyError
@@ -173,6 +174,7 @@ jkl
   inv: 'abc'! KeyError
   gopts1! KeyError
   p/wopts1: b''
+  inv: 'abc'! error
   p/bopts1! KeyError
   inv: 'abc'! KeyError
   bopts1! KeyError
index b3c3bff52fdf37cf9b9519b6eab9a2bfca1ea7da..974f5f839ad11c9828fe9261a56c1733f944c73a 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1004,
 /**/
     1003,
 /**/