Patch 8.2.0069
Problem:    ETYPE_ is used for two different enums.
Solution:   Rename one to use EXPR_.
Files:      src/structs.h, src/eval.c, src/debugger.c


*** ../vim-8.2.0068/src/structs.h       2019-12-29 23:04:20.286639911 +0100
--- src/structs.h       2019-12-31 22:28:55.871687399 +0100
***************
*** 3662,3678 ****
   */
  typedef enum
  {
!     ETYPE_UNKNOWN = 0,
!     ETYPE_EQUAL,      // ==
!     ETYPE_NEQUAL,     // !=
!     ETYPE_GREATER,    // >
!     ETYPE_GEQUAL,     // >=
!     ETYPE_SMALLER,    // <
!     ETYPE_SEQUAL,     // <=
!     ETYPE_MATCH,      // =~
!     ETYPE_NOMATCH,    // !~
!     ETYPE_IS,         // is
!     ETYPE_ISNOT,      // isnot
  } exptype_T;
  
  /*
--- 3662,3678 ----
   */
  typedef enum
  {
!     EXPR_UNKNOWN = 0,
!     EXPR_EQUAL,               // ==
!     EXPR_NEQUAL,      // !=
!     EXPR_GREATER,     // >
!     EXPR_GEQUAL,      // >=
!     EXPR_SMALLER,     // <
!     EXPR_SEQUAL,      // <=
!     EXPR_MATCH,               // =~
!     EXPR_NOMATCH,     // !~
!     EXPR_IS,          // is
!     EXPR_ISNOT,               // isnot
  } exptype_T;
  
  /*
*** ../vim-8.2.0068/src/eval.c  2019-12-30 19:19:48.686098272 +0100
--- src/eval.c  2019-12-31 22:28:44.463734123 +0100
***************
*** 1997,2003 ****
      typval_T  var2;
      char_u    *p;
      int               i;
!     exptype_T type = ETYPE_UNKNOWN;
      int               len = 2;
      int               ic;
  
--- 1997,2003 ----
      typval_T  var2;
      char_u    *p;
      int               i;
!     exptype_T type = EXPR_UNKNOWN;
      int               len = 2;
      int               ic;
  
***************
*** 2011,2040 ****
      switch (p[0])
      {
        case '=':   if (p[1] == '=')
!                       type = ETYPE_EQUAL;
                    else if (p[1] == '~')
!                       type = ETYPE_MATCH;
                    break;
        case '!':   if (p[1] == '=')
!                       type = ETYPE_NEQUAL;
                    else if (p[1] == '~')
!                       type = ETYPE_NOMATCH;
                    break;
        case '>':   if (p[1] != '=')
                    {
!                       type = ETYPE_GREATER;
                        len = 1;
                    }
                    else
!                       type = ETYPE_GEQUAL;
                    break;
        case '<':   if (p[1] != '=')
                    {
!                       type = ETYPE_SMALLER;
                        len = 1;
                    }
                    else
!                       type = ETYPE_SEQUAL;
                    break;
        case 'i':   if (p[1] == 's')
                    {
--- 2011,2040 ----
      switch (p[0])
      {
        case '=':   if (p[1] == '=')
!                       type = EXPR_EQUAL;
                    else if (p[1] == '~')
!                       type = EXPR_MATCH;
                    break;
        case '!':   if (p[1] == '=')
!                       type = EXPR_NEQUAL;
                    else if (p[1] == '~')
!                       type = EXPR_NOMATCH;
                    break;
        case '>':   if (p[1] != '=')
                    {
!                       type = EXPR_GREATER;
                        len = 1;
                    }
                    else
!                       type = EXPR_GEQUAL;
                    break;
        case '<':   if (p[1] != '=')
                    {
!                       type = EXPR_SMALLER;
                        len = 1;
                    }
                    else
!                       type = EXPR_SEQUAL;
                    break;
        case 'i':   if (p[1] == 's')
                    {
***************
*** 2042,2048 ****
                            len = 5;
                        i = p[len];
                        if (!isalnum(i) && i != '_')
!                           type = len == 2 ? ETYPE_IS : ETYPE_ISNOT;
                    }
                    break;
      }
--- 2042,2048 ----
                            len = 5;
                        i = p[len];
                        if (!isalnum(i) && i != '_')
!                           type = len == 2 ? EXPR_IS : EXPR_ISNOT;
                    }
                    break;
      }
***************
*** 2050,2056 ****
      /*
       * If there is a comparative operator, use it.
       */
!     if (type != ETYPE_UNKNOWN)
      {
        // extra question mark appended: ignore case
        if (p[len] == '?')
--- 2050,2056 ----
      /*
       * If there is a comparative operator, use it.
       */
!     if (type != EXPR_UNKNOWN)
      {
        // extra question mark appended: ignore case
        if (p[len] == '?')
***************
*** 6189,6201 ****
      varnumber_T       n1, n2;
      char_u    *s1, *s2;
      char_u    buf1[NUMBUFLEN], buf2[NUMBUFLEN];
!     int               type_is = type == ETYPE_IS || type == ETYPE_ISNOT;
  
      if (type_is && typ1->v_type != typ2->v_type)
      {
        // For "is" a different type always means FALSE, for "notis"
        // it means TRUE.
!       n1 = (type == ETYPE_ISNOT);
      }
      else if (typ1->v_type == VAR_BLOB || typ2->v_type == VAR_BLOB)
      {
--- 6189,6201 ----
      varnumber_T       n1, n2;
      char_u    *s1, *s2;
      char_u    buf1[NUMBUFLEN], buf2[NUMBUFLEN];
!     int               type_is = type == EXPR_IS || type == EXPR_ISNOT;
  
      if (type_is && typ1->v_type != typ2->v_type)
      {
        // For "is" a different type always means FALSE, for "notis"
        // it means TRUE.
!       n1 = (type == EXPR_ISNOT);
      }
      else if (typ1->v_type == VAR_BLOB || typ2->v_type == VAR_BLOB)
      {
***************
*** 6203,6213 ****
        {
            n1 = (typ1->v_type == typ2->v_type
                            && typ1->vval.v_blob == typ2->vval.v_blob);
!           if (type == ETYPE_ISNOT)
                n1 = !n1;
        }
        else if (typ1->v_type != typ2->v_type
!               || (type != ETYPE_EQUAL && type != ETYPE_NEQUAL))
        {
            if (typ1->v_type != typ2->v_type)
                emsg(_("E977: Can only compare Blob with Blob"));
--- 6203,6213 ----
        {
            n1 = (typ1->v_type == typ2->v_type
                            && typ1->vval.v_blob == typ2->vval.v_blob);
!           if (type == EXPR_ISNOT)
                n1 = !n1;
        }
        else if (typ1->v_type != typ2->v_type
!               || (type != EXPR_EQUAL && type != EXPR_NEQUAL))
        {
            if (typ1->v_type != typ2->v_type)
                emsg(_("E977: Can only compare Blob with Blob"));
***************
*** 6220,6226 ****
        {
            // Compare two Blobs for being equal or unequal.
            n1 = blob_equal(typ1->vval.v_blob, typ2->vval.v_blob);
!           if (type == ETYPE_NEQUAL)
                n1 = !n1;
        }
      }
--- 6220,6226 ----
        {
            // Compare two Blobs for being equal or unequal.
            n1 = blob_equal(typ1->vval.v_blob, typ2->vval.v_blob);
!           if (type == EXPR_NEQUAL)
                n1 = !n1;
        }
      }
***************
*** 6230,6240 ****
        {
            n1 = (typ1->v_type == typ2->v_type
                            && typ1->vval.v_list == typ2->vval.v_list);
!           if (type == ETYPE_ISNOT)
                n1 = !n1;
        }
        else if (typ1->v_type != typ2->v_type
!               || (type != ETYPE_EQUAL && type != ETYPE_NEQUAL))
        {
            if (typ1->v_type != typ2->v_type)
                emsg(_("E691: Can only compare List with List"));
--- 6230,6240 ----
        {
            n1 = (typ1->v_type == typ2->v_type
                            && typ1->vval.v_list == typ2->vval.v_list);
!           if (type == EXPR_ISNOT)
                n1 = !n1;
        }
        else if (typ1->v_type != typ2->v_type
!               || (type != EXPR_EQUAL && type != EXPR_NEQUAL))
        {
            if (typ1->v_type != typ2->v_type)
                emsg(_("E691: Can only compare List with List"));
***************
*** 6248,6254 ****
            // Compare two Lists for being equal or unequal.
            n1 = list_equal(typ1->vval.v_list, typ2->vval.v_list,
                                                            ic, FALSE);
!           if (type == ETYPE_NEQUAL)
                n1 = !n1;
        }
      }
--- 6248,6254 ----
            // Compare two Lists for being equal or unequal.
            n1 = list_equal(typ1->vval.v_list, typ2->vval.v_list,
                                                            ic, FALSE);
!           if (type == EXPR_NEQUAL)
                n1 = !n1;
        }
      }
***************
*** 6259,6269 ****
        {
            n1 = (typ1->v_type == typ2->v_type
                            && typ1->vval.v_dict == typ2->vval.v_dict);
!           if (type == ETYPE_ISNOT)
                n1 = !n1;
        }
        else if (typ1->v_type != typ2->v_type
!               || (type != ETYPE_EQUAL && type != ETYPE_NEQUAL))
        {
            if (typ1->v_type != typ2->v_type)
                emsg(_("E735: Can only compare Dictionary with Dictionary"));
--- 6259,6269 ----
        {
            n1 = (typ1->v_type == typ2->v_type
                            && typ1->vval.v_dict == typ2->vval.v_dict);
!           if (type == EXPR_ISNOT)
                n1 = !n1;
        }
        else if (typ1->v_type != typ2->v_type
!               || (type != EXPR_EQUAL && type != EXPR_NEQUAL))
        {
            if (typ1->v_type != typ2->v_type)
                emsg(_("E735: Can only compare Dictionary with Dictionary"));
***************
*** 6277,6283 ****
            // Compare two Dictionaries for being equal or unequal.
            n1 = dict_equal(typ1->vval.v_dict, typ2->vval.v_dict,
                                                            ic, FALSE);
!           if (type == ETYPE_NEQUAL)
                n1 = !n1;
        }
      }
--- 6277,6283 ----
            // Compare two Dictionaries for being equal or unequal.
            n1 = dict_equal(typ1->vval.v_dict, typ2->vval.v_dict,
                                                            ic, FALSE);
!           if (type == EXPR_NEQUAL)
                n1 = !n1;
        }
      }
***************
*** 6285,6292 ****
      else if (typ1->v_type == VAR_FUNC || typ2->v_type == VAR_FUNC
        || typ1->v_type == VAR_PARTIAL || typ2->v_type == VAR_PARTIAL)
      {
!       if (type != ETYPE_EQUAL && type != ETYPE_NEQUAL
!               && type != ETYPE_IS && type != ETYPE_ISNOT)
        {
            emsg(_("E694: Invalid operation for Funcrefs"));
            clear_tv(typ1);
--- 6285,6292 ----
      else if (typ1->v_type == VAR_FUNC || typ2->v_type == VAR_FUNC
        || typ1->v_type == VAR_PARTIAL || typ2->v_type == VAR_PARTIAL)
      {
!       if (type != EXPR_EQUAL && type != EXPR_NEQUAL
!               && type != EXPR_IS && type != EXPR_ISNOT)
        {
            emsg(_("E694: Invalid operation for Funcrefs"));
            clear_tv(typ1);
***************
*** 6312,6318 ****
        }
        else
            n1 = tv_equal(typ1, typ2, ic, FALSE);
!       if (type == ETYPE_NEQUAL || type == ETYPE_ISNOT)
            n1 = !n1;
      }
  
--- 6312,6318 ----
        }
        else
            n1 = tv_equal(typ1, typ2, ic, FALSE);
!       if (type == EXPR_NEQUAL || type == EXPR_ISNOT)
            n1 = !n1;
      }
  
***************
*** 6322,6328 ****
        * When using "=~" or "!~", always compare as string.
        */
      else if ((typ1->v_type == VAR_FLOAT || typ2->v_type == VAR_FLOAT)
!           && type != ETYPE_MATCH && type != ETYPE_NOMATCH)
      {
        float_T f1, f2;
  
--- 6322,6328 ----
        * When using "=~" or "!~", always compare as string.
        */
      else if ((typ1->v_type == VAR_FLOAT || typ2->v_type == VAR_FLOAT)
!           && type != EXPR_MATCH && type != EXPR_NOMATCH)
      {
        float_T f1, f2;
  
***************
*** 6331,6347 ****
        n1 = FALSE;
        switch (type)
        {
!           case ETYPE_IS:
!           case ETYPE_EQUAL:    n1 = (f1 == f2); break;
!           case ETYPE_ISNOT:
!           case ETYPE_NEQUAL:   n1 = (f1 != f2); break;
!           case ETYPE_GREATER:  n1 = (f1 > f2); break;
!           case ETYPE_GEQUAL:   n1 = (f1 >= f2); break;
!           case ETYPE_SMALLER:  n1 = (f1 < f2); break;
!           case ETYPE_SEQUAL:   n1 = (f1 <= f2); break;
!           case ETYPE_UNKNOWN:
!           case ETYPE_MATCH:
!           case ETYPE_NOMATCH:  break;  // avoid gcc warning
        }
      }
  #endif
--- 6331,6347 ----
        n1 = FALSE;
        switch (type)
        {
!           case EXPR_IS:
!           case EXPR_EQUAL:    n1 = (f1 == f2); break;
!           case EXPR_ISNOT:
!           case EXPR_NEQUAL:   n1 = (f1 != f2); break;
!           case EXPR_GREATER:  n1 = (f1 > f2); break;
!           case EXPR_GEQUAL:   n1 = (f1 >= f2); break;
!           case EXPR_SMALLER:  n1 = (f1 < f2); break;
!           case EXPR_SEQUAL:   n1 = (f1 <= f2); break;
!           case EXPR_UNKNOWN:
!           case EXPR_MATCH:
!           case EXPR_NOMATCH:  break;  // avoid gcc warning
        }
      }
  #endif
***************
*** 6351,6403 ****
       * When using "=~" or "!~", always compare as string.
       */
      else if ((typ1->v_type == VAR_NUMBER || typ2->v_type == VAR_NUMBER)
!           && type != ETYPE_MATCH && type != ETYPE_NOMATCH)
      {
        n1 = tv_get_number(typ1);
        n2 = tv_get_number(typ2);
        switch (type)
        {
!           case ETYPE_IS:
!           case ETYPE_EQUAL:    n1 = (n1 == n2); break;
!           case ETYPE_ISNOT:
!           case ETYPE_NEQUAL:   n1 = (n1 != n2); break;
!           case ETYPE_GREATER:  n1 = (n1 > n2); break;
!           case ETYPE_GEQUAL:   n1 = (n1 >= n2); break;
!           case ETYPE_SMALLER:  n1 = (n1 < n2); break;
!           case ETYPE_SEQUAL:   n1 = (n1 <= n2); break;
!           case ETYPE_UNKNOWN:
!           case ETYPE_MATCH:
!           case ETYPE_NOMATCH:  break;  // avoid gcc warning
        }
      }
      else
      {
        s1 = tv_get_string_buf(typ1, buf1);
        s2 = tv_get_string_buf(typ2, buf2);
!       if (type != ETYPE_MATCH && type != ETYPE_NOMATCH)
            i = ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2);
        else
            i = 0;
        n1 = FALSE;
        switch (type)
        {
!           case ETYPE_IS:
!           case ETYPE_EQUAL:    n1 = (i == 0); break;
!           case ETYPE_ISNOT:
!           case ETYPE_NEQUAL:   n1 = (i != 0); break;
!           case ETYPE_GREATER:  n1 = (i > 0); break;
!           case ETYPE_GEQUAL:   n1 = (i >= 0); break;
!           case ETYPE_SMALLER:  n1 = (i < 0); break;
!           case ETYPE_SEQUAL:   n1 = (i <= 0); break;
  
!           case ETYPE_MATCH:
!           case ETYPE_NOMATCH:
                    n1 = pattern_match(s2, s1, ic);
!                   if (type == ETYPE_NOMATCH)
                        n1 = !n1;
                    break;
  
!           case ETYPE_UNKNOWN:  break;  // avoid gcc warning
        }
      }
      clear_tv(typ1);
--- 6351,6403 ----
       * When using "=~" or "!~", always compare as string.
       */
      else if ((typ1->v_type == VAR_NUMBER || typ2->v_type == VAR_NUMBER)
!           && type != EXPR_MATCH && type != EXPR_NOMATCH)
      {
        n1 = tv_get_number(typ1);
        n2 = tv_get_number(typ2);
        switch (type)
        {
!           case EXPR_IS:
!           case EXPR_EQUAL:    n1 = (n1 == n2); break;
!           case EXPR_ISNOT:
!           case EXPR_NEQUAL:   n1 = (n1 != n2); break;
!           case EXPR_GREATER:  n1 = (n1 > n2); break;
!           case EXPR_GEQUAL:   n1 = (n1 >= n2); break;
!           case EXPR_SMALLER:  n1 = (n1 < n2); break;
!           case EXPR_SEQUAL:   n1 = (n1 <= n2); break;
!           case EXPR_UNKNOWN:
!           case EXPR_MATCH:
!           case EXPR_NOMATCH:  break;  // avoid gcc warning
        }
      }
      else
      {
        s1 = tv_get_string_buf(typ1, buf1);
        s2 = tv_get_string_buf(typ2, buf2);
!       if (type != EXPR_MATCH && type != EXPR_NOMATCH)
            i = ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2);
        else
            i = 0;
        n1 = FALSE;
        switch (type)
        {
!           case EXPR_IS:
!           case EXPR_EQUAL:    n1 = (i == 0); break;
!           case EXPR_ISNOT:
!           case EXPR_NEQUAL:   n1 = (i != 0); break;
!           case EXPR_GREATER:  n1 = (i > 0); break;
!           case EXPR_GEQUAL:   n1 = (i >= 0); break;
!           case EXPR_SMALLER:  n1 = (i < 0); break;
!           case EXPR_SEQUAL:   n1 = (i <= 0); break;
  
!           case EXPR_MATCH:
!           case EXPR_NOMATCH:
                    n1 = pattern_match(s2, s1, ic);
!                   if (type == EXPR_NOMATCH)
                        n1 = !n1;
                    break;
  
!           case EXPR_UNKNOWN:  break;  // avoid gcc warning
        }
      }
      clear_tv(typ1);
*** ../vim-8.2.0068/src/debugger.c      2019-12-29 23:04:20.290639897 +0100
--- src/debugger.c      2019-12-31 22:28:14.795855866 +0100
***************
*** 939,945 ****
                }
                else
                {
!                   if (typval_compare(tv, bp->dbg_val, ETYPE_IS, FALSE) == OK
                            && tv->vval.v_number == FALSE)
                    {
                        typval_T *v;
--- 939,945 ----
                }
                else
                {
!                   if (typval_compare(tv, bp->dbg_val, EXPR_IS, FALSE) == OK
                            && tv->vval.v_number == FALSE)
                    {
                        typval_T *v;
*** ../vim-8.2.0068/src/version.c       2019-12-31 21:58:57.643344472 +0100
--- src/version.c       2019-12-31 22:33:43.658522112 +0100
***************
*** 744,745 ****
--- 744,747 ----
  {   /* Add new patch number below this line */
+ /**/
+     69,
  /**/

-- 
There can't be a crisis today, my schedule is already full.

 /// 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].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/201912312136.xBVLalZM016379%40masaka.moolenaar.net.

Raspunde prin e-mail lui