On 05/21/2013 10:38 PM, Bram Moolenaar wrote:

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


I am able to compile vim 7.3.1004 by cloning the sources via Mercurial.

Mats

--
--
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 vim_dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Raspunde prin e-mail lui