Patch 7.4.1105
Problem:    When using slices there is a mixup of variable name and namespace.
Solution:   Recognize variables that can't be a namespace. (Hirohito Higashi)
Files:      src/eval.c, src/testdir/test_eval.in, src/testdir/test_eval.ok


*** ../vim-7.4.1104/src/eval.c  2016-01-16 15:40:04.698704693 +0100
--- src/eval.c  2016-01-16 16:43:16.634110573 +0100
***************
*** 115,120 ****
--- 115,122 ----
  static char *e_float_as_string = N_("E806: using Float as a String");
  #endif
  
+ #define NAMESPACE_CHAR        (char_u *)"abglstvw"
+ 
  static dictitem_T     globvars_var;           /* variable used for g: */
  #define globvarht globvardict.dv_hashtab
  
***************
*** 20666,20672 ****
  
      /* Find the end of the name. */
      for (p = *arg; eval_isnamec(*p); ++p)
!       ;
      if (p == *arg)        /* no name found */
        return 0;
  
--- 20668,20684 ----
  
      /* Find the end of the name. */
      for (p = *arg; eval_isnamec(*p); ++p)
!     {
!       if (*p == ':')
!       {
!           /* "s:" is start of "s:var", but "n:" is not and can be used in
!            * slice "[n:]".  Also "xx:" is not a namespace. */
!           len = (int)(p - *arg);
!           if ((len == 1 && vim_strchr(NAMESPACE_CHAR, **arg) == NULL)
!                   || len > 1)
!               break;
!       }
!     }
      if (p == *arg)        /* no name found */
        return 0;
  
***************
*** 20766,20771 ****
--- 20778,20784 ----
      int               mb_nest = 0;
      int               br_nest = 0;
      char_u    *p;
+     int               len;
  
      if (expr_start != NULL)
      {
***************
*** 20801,20806 ****
--- 20814,20828 ----
            if (*p == NUL)
                break;
        }
+       else if (br_nest == 0 && mb_nest == 0 && *p == ':')
+       {
+           /* "s:" is start of "s:var", but "n:" is not and can be used in
+            * slice "[n:]".  Also "xx:" is not a namespace. */
+           len = (int)(p - arg);
+           if ((len == 1 && vim_strchr(NAMESPACE_CHAR, *arg) == NULL)
+                   || len > 1)
+               break;
+       }
  
        if (mb_nest == 0)
        {
*** ../vim-7.4.1104/src/testdir/test_eval.in    2015-02-03 16:07:44.193584399 
+0100
--- src/testdir/test_eval.in    2016-01-16 16:28:28.807632920 +0100
***************
*** 218,223 ****
--- 218,241 ----
  0:call setpos('.', sp)
  jyl:$put
  :"
+ :" substring and variable name
+ :let str = 'abcdef'
+ :let n = 3
+ :$put =str[n:]
+ :$put =str[:n]
+ :$put =str[n:n]
+ :unlet n
+ :let nn = 3
+ :$put =str[nn:]
+ :$put =str[:nn]
+ :$put =str[nn:nn]
+ :unlet nn
+ :let b:nn = 4
+ :$put =str[b:nn:]
+ :$put =str[:b:nn]
+ :$put =str[b:nn:b:nn]
+ :unlet b:nn
+ :"
  :/^start:/+1,$wq! test.out
  :" vim: et ts=4 isk-=\: fmr=???,???
  :call getchar()
*** ../vim-7.4.1104/src/testdir/test_eval.ok    2015-02-03 16:07:44.193584399 
+0100
--- src/testdir/test_eval.ok    2016-01-16 16:32:18.677167326 +0100
***************
*** 351,353 ****
--- 351,362 ----
  Vim(call):E116: Invalid arguments for function append
  {{{1 getcurpos/setpos
  6
+ def
+ abcd
+ d
+ def
+ abcd
+ d
+ ef
+ abcde
+ e
*** ../vim-7.4.1104/src/version.c       2016-01-16 16:20:23.716823201 +0100
--- src/version.c       2016-01-16 16:27:31.556247014 +0100
***************
*** 743,744 ****
--- 743,746 ----
  {   /* Add new patch number below this line */
+ /**/
+     1105,
  /**/

-- 
BEDEVERE: Wait.  Wait ... tell me, what also floats on water?
ALL:      Bread?  No, no, no.  Apples .... gravy ... very small rocks ...
ARTHUR:   A duck.
                 "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD

 /// Bram Moolenaar -- [email protected] -- 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 [email protected].
For more options, visit https://groups.google.com/d/optout.

Raspunde prin e-mail lui