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 -- b...@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    ///

-- 
-- 
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