diff --git a/src/eval.c b/src/eval.c
index 387b280..41ebeb6 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1997,8 +1997,7 @@
     typval_T	var2;
     char_u	*p;
     int		i;
-    exptype_T	type = TYPE_UNKNOWN;
-    int		type_is = FALSE;    // TRUE for "is" and "isnot"
+    exptype_T	type = ETYPE_UNKNOWN;
     int		len = 2;
     int		ic;
 
@@ -2012,30 +2011,30 @@
     switch (p[0])
     {
 	case '=':   if (p[1] == '=')
-			type = TYPE_EQUAL;
+			type = ETYPE_EQUAL;
 		    else if (p[1] == '~')
-			type = TYPE_MATCH;
+			type = ETYPE_MATCH;
 		    break;
 	case '!':   if (p[1] == '=')
-			type = TYPE_NEQUAL;
+			type = ETYPE_NEQUAL;
 		    else if (p[1] == '~')
-			type = TYPE_NOMATCH;
+			type = ETYPE_NOMATCH;
 		    break;
 	case '>':   if (p[1] != '=')
 		    {
-			type = TYPE_GREATER;
+			type = ETYPE_GREATER;
 			len = 1;
 		    }
 		    else
-			type = TYPE_GEQUAL;
+			type = ETYPE_GEQUAL;
 		    break;
 	case '<':   if (p[1] != '=')
 		    {
-			type = TYPE_SMALLER;
+			type = ETYPE_SMALLER;
 			len = 1;
 		    }
 		    else
-			type = TYPE_SEQUAL;
+			type = ETYPE_SEQUAL;
 		    break;
 	case 'i':   if (p[1] == 's')
 		    {
@@ -2043,10 +2042,7 @@
 			    len = 5;
 			i = p[len];
 			if (!isalnum(i) && i != '_')
-			{
-			    type = len == 2 ? TYPE_EQUAL : TYPE_NEQUAL;
-			    type_is = TRUE;
-			}
+			    type = len == 2 ? ETYPE_IS : ETYPE_ISNOT;
 		    }
 		    break;
     }
@@ -2054,7 +2050,7 @@
     /*
      * If there is a comparative operator, use it.
      */
-    if (type != TYPE_UNKNOWN)
+    if (type != ETYPE_UNKNOWN)
     {
 	// extra question mark appended: ignore case
 	if (p[len] == '?')
@@ -2083,7 +2079,7 @@
 	}
 	if (evaluate)
 	{
-	    int ret = typval_compare(rettv, &var2, type, type_is, ic);
+	    int ret = typval_compare(rettv, &var2, type, ic);
 
 	    clear_tv(&var2);
 	    return ret;
@@ -6163,19 +6159,19 @@
     typval_T	*typ1,   // first operand
     typval_T	*typ2,   // second operand
     exptype_T	type,    // operator
-    int		type_is, // TRUE for "is" and "isnot"
     int		ic)      // ignore case
 {
     int		i;
     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 == TYPE_NEQUAL);
+	n1 = (type == ETYPE_ISNOT);
     }
     else if (typ1->v_type == VAR_BLOB || typ2->v_type == VAR_BLOB)
     {
@@ -6183,11 +6179,11 @@
 	{
 	    n1 = (typ1->v_type == typ2->v_type
 			    && typ1->vval.v_blob == typ2->vval.v_blob);
-	    if (type == TYPE_NEQUAL)
+	    if (type == ETYPE_ISNOT)
 		n1 = !n1;
 	}
 	else if (typ1->v_type != typ2->v_type
-		|| (type != TYPE_EQUAL && type != TYPE_NEQUAL))
+		|| (type != ETYPE_EQUAL && type != ETYPE_NEQUAL))
 	{
 	    if (typ1->v_type != typ2->v_type)
 		emsg(_("E977: Can only compare Blob with Blob"));
@@ -6200,7 +6196,7 @@
 	{
 	    // Compare two Blobs for being equal or unequal.
 	    n1 = blob_equal(typ1->vval.v_blob, typ2->vval.v_blob);
-	    if (type == TYPE_NEQUAL)
+	    if (type == ETYPE_NEQUAL)
 		n1 = !n1;
 	}
     }
@@ -6210,11 +6206,11 @@
 	{
 	    n1 = (typ1->v_type == typ2->v_type
 			    && typ1->vval.v_list == typ2->vval.v_list);
-	    if (type == TYPE_NEQUAL)
+	    if (type == ETYPE_ISNOT)
 		n1 = !n1;
 	}
 	else if (typ1->v_type != typ2->v_type
-		|| (type != TYPE_EQUAL && type != TYPE_NEQUAL))
+		|| (type != ETYPE_EQUAL && type != ETYPE_NEQUAL))
 	{
 	    if (typ1->v_type != typ2->v_type)
 		emsg(_("E691: Can only compare List with List"));
@@ -6228,7 +6224,7 @@
 	    // Compare two Lists for being equal or unequal.
 	    n1 = list_equal(typ1->vval.v_list, typ2->vval.v_list,
 							    ic, FALSE);
-	    if (type == TYPE_NEQUAL)
+	    if (type == ETYPE_NEQUAL)
 		n1 = !n1;
 	}
     }
@@ -6239,11 +6235,11 @@
 	{
 	    n1 = (typ1->v_type == typ2->v_type
 			    && typ1->vval.v_dict == typ2->vval.v_dict);
-	    if (type == TYPE_NEQUAL)
+	    if (type == ETYPE_ISNOT)
 		n1 = !n1;
 	}
 	else if (typ1->v_type != typ2->v_type
-		|| (type != TYPE_EQUAL && type != TYPE_NEQUAL))
+		|| (type != ETYPE_EQUAL && type != ETYPE_NEQUAL))
 	{
 	    if (typ1->v_type != typ2->v_type)
 		emsg(_("E735: Can only compare Dictionary with Dictionary"));
@@ -6257,7 +6253,7 @@
 	    // Compare two Dictionaries for being equal or unequal.
 	    n1 = dict_equal(typ1->vval.v_dict, typ2->vval.v_dict,
 							    ic, FALSE);
-	    if (type == TYPE_NEQUAL)
+	    if (type == ETYPE_NEQUAL)
 		n1 = !n1;
 	}
     }
@@ -6265,7 +6261,7 @@
     else if (typ1->v_type == VAR_FUNC || typ2->v_type == VAR_FUNC
 	|| typ1->v_type == VAR_PARTIAL || typ2->v_type == VAR_PARTIAL)
     {
-	if (type != TYPE_EQUAL && type != TYPE_NEQUAL)
+	if (type != ETYPE_EQUAL && type != ETYPE_NEQUAL)
 	{
 	    emsg(_("E694: Invalid operation for Funcrefs"));
 	    clear_tv(typ1);
@@ -6291,7 +6287,7 @@
 	}
 	else
 	    n1 = tv_equal(typ1, typ2, ic, FALSE);
-	if (type == TYPE_NEQUAL)
+	if (type == ETYPE_NEQUAL || type == ETYPE_ISNOT)
 	    n1 = !n1;
     }
 
@@ -6301,7 +6297,7 @@
 	* When using "=~" or "!~", always compare as string.
 	*/
     else if ((typ1->v_type == VAR_FLOAT || typ2->v_type == VAR_FLOAT)
-	    && type != TYPE_MATCH && type != TYPE_NOMATCH)
+	    && type != ETYPE_MATCH && type != ETYPE_NOMATCH)
     {
 	float_T f1, f2;
 
@@ -6310,15 +6306,17 @@
 	n1 = FALSE;
 	switch (type)
 	{
-	    case TYPE_EQUAL:    n1 = (f1 == f2); break;
-	    case TYPE_NEQUAL:   n1 = (f1 != f2); break;
-	    case TYPE_GREATER:  n1 = (f1 > f2); break;
-	    case TYPE_GEQUAL:   n1 = (f1 >= f2); break;
-	    case TYPE_SMALLER:  n1 = (f1 < f2); break;
-	    case TYPE_SEQUAL:   n1 = (f1 <= f2); break;
-	    case TYPE_UNKNOWN:
-	    case TYPE_MATCH:
-	    case TYPE_NOMATCH:  break;  // avoid gcc warning
+	    case ETYPE_EQUAL:    n1 = (f1 == f2); break;
+	    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_IS:
+	    case ETYPE_ISNOT:
+	    case ETYPE_MATCH:
+	    case ETYPE_NOMATCH:  break;  // avoid gcc warning
 	}
     }
 #endif
@@ -6328,49 +6326,53 @@
 	* When using "=~" or "!~", always compare as string.
 	*/
     else if ((typ1->v_type == VAR_NUMBER || typ2->v_type == VAR_NUMBER)
-	    && type != TYPE_MATCH && type != TYPE_NOMATCH)
+	    && type != ETYPE_MATCH && type != ETYPE_NOMATCH)
     {
 	n1 = tv_get_number(typ1);
 	n2 = tv_get_number(typ2);
 	switch (type)
 	{
-	    case TYPE_EQUAL:    n1 = (n1 == n2); break;
-	    case TYPE_NEQUAL:   n1 = (n1 != n2); break;
-	    case TYPE_GREATER:  n1 = (n1 > n2); break;
-	    case TYPE_GEQUAL:   n1 = (n1 >= n2); break;
-	    case TYPE_SMALLER:  n1 = (n1 < n2); break;
-	    case TYPE_SEQUAL:   n1 = (n1 <= n2); break;
-	    case TYPE_UNKNOWN:
-	    case TYPE_MATCH:
-	    case TYPE_NOMATCH:  break;  // avoid gcc warning
+	    case ETYPE_EQUAL:    n1 = (n1 == n2); break;
+	    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_IS:
+	    case ETYPE_ISNOT:
+	    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 != TYPE_MATCH && type != TYPE_NOMATCH)
+	if (type != ETYPE_MATCH && type != ETYPE_NOMATCH)
 	    i = ic ? MB_STRICMP(s1, s2) : STRCMP(s1, s2);
 	else
 	    i = 0;
 	n1 = FALSE;
 	switch (type)
 	{
-	    case TYPE_EQUAL:    n1 = (i == 0); break;
-	    case TYPE_NEQUAL:   n1 = (i != 0); break;
-	    case TYPE_GREATER:  n1 = (i > 0); break;
-	    case TYPE_GEQUAL:   n1 = (i >= 0); break;
-	    case TYPE_SMALLER:  n1 = (i < 0); break;
-	    case TYPE_SEQUAL:   n1 = (i <= 0); break;
+	    case ETYPE_EQUAL:    n1 = (i == 0); break;
+	    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 TYPE_MATCH:
-	    case TYPE_NOMATCH:
+	    case ETYPE_MATCH:
+	    case ETYPE_NOMATCH:
 		    n1 = pattern_match(s2, s1, ic);
-		    if (type == TYPE_NOMATCH)
+		    if (type == ETYPE_NOMATCH)
 			n1 = !n1;
 		    break;
 
-	    case TYPE_UNKNOWN:  break;  // avoid gcc warning
+	    case ETYPE_IS:
+	    case ETYPE_ISNOT:
+	    case ETYPE_UNKNOWN:  break;  // avoid gcc warning
 	}
     }
     clear_tv(typ1);
