Patch 8.2.0069

9 views
Skip to first unread message

Bram Moolenaar

unread,
Dec 31, 2019, 4:36:56 PM12/31/19
to vim...@googlegroups.com

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 -- Br...@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 ///
Reply all
Reply to author
Forward
0 new messages