To: vim_dev@googlegroups.com Subject: Patch 8.2.0069 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ 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 -- Bram@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 ///