Patch 7.4.2071
Problem:    The return value of type() is difficult to use.
Solution:   Define v:t_ constants. (Ken Takata)
Files:      runtime/doc/eval.txt, src/eval.c, src/evalfunc.c,
            src/testdir/test_channel.vim, src/testdir/test_viml.vim, src/vim.h


*** ../vim-7.4.2070/runtime/doc/eval.txt        2016-07-16 14:46:51.119240709 
+0200
--- runtime/doc/eval.txt        2016-07-19 17:18:42.434204673 +0200
***************
*** 1810,1815 ****
--- 1827,1853 ----
                example, when jumping to a tag the value is ":tag tagname\r".
                For ":edit +cmd file" the value is ":cmd\r".
  
+                               *v:t_TYPE* *v:t_bool* *t_bool-varialble*
+ v:t_bool      Value of Boolean type.  Read-only.  See: |type()|
+                                       *v:t_channel* *t_channel-varialble*
+ v:t_channel   Value of Channel type.  Read-only.  See: |type()|
+                                       *v:t_dict* *t_dict-varialble*
+ v:t_dict      Value of Dictionary type.  Read-only.  See: |type()|
+                                       *v:t_float* *t_float-varialble*
+ v:t_float     Value of Float type.  Read-only.  See: |type()|
+                                       *v:t_func* *t_func-varialble*
+ v:t_func      Value of Funcref type.  Read-only.  See: |type()|
+                                       *v:t_job* *t_job-varialble*
+ v:t_job               Value of Job type.  Read-only.  See: |type()|
+                                       *v:t_list* *t_list-varialble*
+ v:t_list      Value of List type.  Read-only.  See: |type()|
+                                       *v:t_none* *t_none-varialble*
+ v:t_none      Value of None type.  Read-only.  See: |type()|
+                                       *v:t_number* *t_number-varialble*
+ v:t_number    Value of Number type.  Read-only.  See: |type()|
+                                       *v:t_string* *t_string-varialble*
+ v:t_string    Value of String type.  Read-only.  See: |type()|
+ 
                                *v:termresponse* *termresponse-variable*
  v:termresponse        The escape sequence returned by the terminal for the 
|t_RV|
                termcap entry.  It is set when Vim receives an escape sequence
***************
*** 7403,7422 ****
                {only available when compiled with the |+float| feature}
                
                                                        *type()*
! type({expr})  The result is a Number, depending on the type of {expr}:
!                       Number:     0
!                       String:     1
!                       Funcref:    2
!                       List:       3
!                       Dictionary: 4
!                       Float:      5
!               To avoid the magic numbers it should be used this way: >
                        :if type(myvar) == type(0)
                        :if type(myvar) == type("")
                        :if type(myvar) == type(function("tr"))
                        :if type(myvar) == type([])
                        :if type(myvar) == type({})
                        :if type(myvar) == type(0.0)
  
  undofile({name})                                      *undofile()*
                Return the name of the undo file that would be used for a file
--- 7546,7575 ----
                {only available when compiled with the |+float| feature}
                
                                                        *type()*
! type({expr})  The result is a Number representing the type of {expr}.
!               Instead of using the number directly, it is better to use the
!               v:t_ variable that has the value:
!                       Number:     0  |v:t_number|
!                       String:     1  |v:t_string|
!                       Funcref:    2  |v:t_func|
!                       List:       3  |v:t_list|
!                       Dictionary: 4  |v:t_dict|
!                       Float:      5  |v:t_float|
!                       Boolean:    6  |v:t_bool| (v:false and v:true)
!                       None        7  |v:t_none| (v:null and v:none)
!                       Job         8  |v:t_job|
!                       Channel     9  |v:t_channel|
!               For backward compatibility, this method can be used: >
                        :if type(myvar) == type(0)
                        :if type(myvar) == type("")
                        :if type(myvar) == type(function("tr"))
                        :if type(myvar) == type([])
                        :if type(myvar) == type({})
                        :if type(myvar) == type(0.0)
+                       :if type(myvar) == type(v:false)
+                       :if type(myvar) == type(v:none)
+ <             To check if the v:t_ variables exist use this: >
+                       :if exists('v:t_number')
  
  undofile({name})                                      *undofile()*
                Return the name of the undo file that would be used for a file
***************
*** 7510,7515 ****
--- 7663,7672 ----
                            plus one)
                    'x      position of mark x (if the mark is not set, 0 is
                            returned)
+                   v       In Visual mode: the start of the Visual area (the
+                           cursor is the end).  When not in Visual mode
+                           returns the cursor position.  Differs from |'<| in
+                           that it's updated right away.
                Note that only marks in the current file can be used.
                Examples: >
    virtcol(".")           with text "foo^Lbar", with cursor on the "^L", 
returns 5
*** ../vim-7.4.2070/src/eval.c  2016-07-17 22:13:26.805095373 +0200
--- src/eval.c  2016-07-19 17:11:58.058396906 +0200
***************
*** 177,182 ****
--- 177,192 ----
      {VV_NAME("none",           VAR_SPECIAL), VV_RO},
      {VV_NAME("vim_did_enter",  VAR_NUMBER), VV_RO},
      {VV_NAME("testing",                VAR_NUMBER), 0},
+     {VV_NAME("t_number",       VAR_NUMBER), VV_RO},
+     {VV_NAME("t_string",       VAR_NUMBER), VV_RO},
+     {VV_NAME("t_func",                 VAR_NUMBER), VV_RO},
+     {VV_NAME("t_list",                 VAR_NUMBER), VV_RO},
+     {VV_NAME("t_dict",                 VAR_NUMBER), VV_RO},
+     {VV_NAME("t_float",                VAR_NUMBER), VV_RO},
+     {VV_NAME("t_bool",                 VAR_NUMBER), VV_RO},
+     {VV_NAME("t_none",                 VAR_NUMBER), VV_RO},
+     {VV_NAME("t_job",          VAR_NUMBER), VV_RO},
+     {VV_NAME("t_channel",      VAR_NUMBER), VV_RO},
  };
  
  /* shorthand */
***************
*** 292,297 ****
--- 302,318 ----
      set_vim_var_nr(VV_NONE, VVAL_NONE);
      set_vim_var_nr(VV_NULL, VVAL_NULL);
  
+     set_vim_var_nr(VV_TYPE_NUMBER,  VAR_TYPE_NUMBER);
+     set_vim_var_nr(VV_TYPE_STRING,  VAR_TYPE_STRING);
+     set_vim_var_nr(VV_TYPE_FUNC,    VAR_TYPE_FUNC);
+     set_vim_var_nr(VV_TYPE_LIST,    VAR_TYPE_LIST);
+     set_vim_var_nr(VV_TYPE_DICT,    VAR_TYPE_DICT);
+     set_vim_var_nr(VV_TYPE_FLOAT,   VAR_TYPE_FLOAT);
+     set_vim_var_nr(VV_TYPE_BOOL,    VAR_TYPE_BOOL);
+     set_vim_var_nr(VV_TYPE_NONE,    VAR_TYPE_NONE);
+     set_vim_var_nr(VV_TYPE_JOB,     VAR_TYPE_JOB);
+     set_vim_var_nr(VV_TYPE_CHANNEL, VAR_TYPE_CHANNEL);
+ 
      set_reg_var(0);  /* default for v:register is not 0 but '"' */
  
  #ifdef EBCDIC
*** ../vim-7.4.2070/src/evalfunc.c      2016-07-17 22:33:48.668907497 +0200
--- src/evalfunc.c      2016-07-19 17:11:58.058396906 +0200
***************
*** 12136,12157 ****
  
      switch (argvars[0].v_type)
      {
!       case VAR_NUMBER: n = 0; break;
!       case VAR_STRING: n = 1; break;
        case VAR_PARTIAL:
!       case VAR_FUNC:   n = 2; break;
!       case VAR_LIST:   n = 3; break;
!       case VAR_DICT:   n = 4; break;
!       case VAR_FLOAT:  n = 5; break;
        case VAR_SPECIAL:
             if (argvars[0].vval.v_number == VVAL_FALSE
                     || argvars[0].vval.v_number == VVAL_TRUE)
!                n = 6;
             else
!                n = 7;
             break;
!       case VAR_JOB:     n = 8; break;
!       case VAR_CHANNEL: n = 9; break;
        case VAR_UNKNOWN:
             EMSG2(_(e_intern2), "f_type(UNKNOWN)");
             n = -1;
--- 12136,12157 ----
  
      switch (argvars[0].v_type)
      {
!       case VAR_NUMBER: n = VAR_TYPE_NUMBER; break;
!       case VAR_STRING: n = VAR_TYPE_STRING; break;
        case VAR_PARTIAL:
!       case VAR_FUNC:   n = VAR_TYPE_FUNC; break;
!       case VAR_LIST:   n = VAR_TYPE_LIST; break;
!       case VAR_DICT:   n = VAR_TYPE_DICT; break;
!       case VAR_FLOAT:  n = VAR_TYPE_FLOAT; break;
        case VAR_SPECIAL:
             if (argvars[0].vval.v_number == VVAL_FALSE
                     || argvars[0].vval.v_number == VVAL_TRUE)
!                n = VAR_TYPE_BOOL;
             else
!                n = VAR_TYPE_NONE;
             break;
!       case VAR_JOB:     n = VAR_TYPE_JOB; break;
!       case VAR_CHANNEL: n = VAR_TYPE_CHANNEL; break;
        case VAR_UNKNOWN:
             EMSG2(_(e_intern2), "f_type(UNKNOWN)");
             n = -1;
*** ../vim-7.4.2070/src/testdir/test_channel.vim        2016-07-15 
21:24:41.197452549 +0200
--- src/testdir/test_channel.vim        2016-07-19 17:11:58.058396906 +0200
***************
*** 188,193 ****
--- 188,194 ----
  " Test that we can open two channels.
  func Ch_two_channels(port)
    let handle = ch_open('localhost:' . a:port, s:chopt)
+   call assert_equal(v:t_channel, type(handle))
    if ch_status(handle) == "fail"
      call assert_false(1, "Can't open channel")
      return
***************
*** 420,425 ****
--- 421,427 ----
    endif
    call ch_log('Test_raw_pipe()')
    let job = job_start(s:python . " test_channel_pipe.py", {'mode': 'raw'})
+   call assert_equal(v:t_job, type(job))
    call assert_equal("run", job_status(job))
    try
      " For a change use the job where a channel is expected.
*** ../vim-7.4.2070/src/testdir/test_viml.vim   2016-07-01 18:16:47.497936191 
+0200
--- src/testdir/test_viml.vim   2016-07-19 17:11:58.058396906 +0200
***************
*** 950,955 ****
--- 950,969 ----
      call assert_equal(6, type(v:true))
      call assert_equal(7, type(v:none))
      call assert_equal(7, type(v:null))
+     call assert_equal(8, v:t_job)
+     call assert_equal(9, v:t_channel)
+     call assert_equal(v:t_number, type(0))
+     call assert_equal(v:t_string, type(""))
+     call assert_equal(v:t_func, type(function("tr")))
+     call assert_equal(v:t_func, type(function("tr", [8])))
+     call assert_equal(v:t_list, type([]))
+     call assert_equal(v:t_dict, type({}))
+     call assert_equal(v:t_float, type(0.0))
+     call assert_equal(v:t_bool, type(v:false))
+     call assert_equal(v:t_bool, type(v:true))
+     call assert_equal(v:t_none, type(v:none))
+     call assert_equal(v:t_none, type(v:null))
+ 
  
      call assert_equal(0, 0 + v:false)
      call assert_equal(1, 0 + v:true)
*** ../vim-7.4.2070/src/vim.h   2016-07-19 17:01:20.341019259 +0200
--- src/vim.h   2016-07-19 17:11:58.062396864 +0200
***************
*** 1968,1974 ****
  #define VV_NONE               68
  #define VV_VIM_DID_ENTER 69
  #define VV_TESTING    70
! #define VV_LEN                71      /* number of v: vars */
  
  /* used for v_number in VAR_SPECIAL */
  #define VVAL_FALSE    0L
--- 1968,1984 ----
  #define VV_NONE               68
  #define VV_VIM_DID_ENTER 69
  #define VV_TESTING    70
! #define VV_TYPE_NUMBER        71
! #define VV_TYPE_STRING        72
! #define VV_TYPE_FUNC  73
! #define VV_TYPE_LIST  74
! #define VV_TYPE_DICT  75
! #define VV_TYPE_FLOAT 76
! #define VV_TYPE_BOOL  77
! #define VV_TYPE_NONE  78
! #define VV_TYPE_JOB   79
! #define VV_TYPE_CHANNEL       80
! #define VV_LEN                81      /* number of v: vars */
  
  /* used for v_number in VAR_SPECIAL */
  #define VVAL_FALSE    0L
***************
*** 1976,1981 ****
--- 1986,2003 ----
  #define VVAL_NONE     2L
  #define VVAL_NULL     3L
  
+ /* Type values for type(). */
+ #define VAR_TYPE_NUMBER           0
+ #define VAR_TYPE_STRING           1
+ #define VAR_TYPE_FUNC     2
+ #define VAR_TYPE_LIST     3
+ #define VAR_TYPE_DICT     4
+ #define VAR_TYPE_FLOAT            5
+ #define VAR_TYPE_BOOL     6
+ #define VAR_TYPE_NONE     7
+ #define VAR_TYPE_JOB      8
+ #define VAR_TYPE_CHANNEL    9
+ 
  #ifdef FEAT_CLIPBOARD
  
  /* VIM_ATOM_NAME is the older Vim-specific selection type for X11.  Still
*** ../vim-7.4.2070/src/version.c       2016-07-19 17:01:20.345019217 +0200
--- src/version.c       2016-07-19 17:10:31.799291839 +0200
***************
*** 760,761 ****
--- 760,763 ----
  {   /* Add new patch number below this line */
+ /**/
+     2071,
  /**/

-- 
ARTHUR:  I did say sorry about the `old woman,' but from the behind you
         looked--
DENNIS:  What I object to is you automatically treat me like an inferior!
ARTHUR:  Well, I AM king...
                                  The Quest for the Holy Grail (Monty Python)

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