]> granicus.if.org Git - vim/commitdiff
patch 8.2.1263: Vim9: comperators use 'ignorecase' in Vim9 script v8.2.1263
authorBram Moolenaar <Bram@vim.org>
Tue, 21 Jul 2020 19:31:00 +0000 (21:31 +0200)
committerBram Moolenaar <Bram@vim.org>
Tue, 21 Jul 2020 19:31:00 +0000 (21:31 +0200)
Problem:    Vim9: comperators use 'ignorecase' in Vim9 script.
Solution:   Ignore 'ignorecase'.  Use true and false instead of 1 and 0.
            (closes #6497)

src/eval.c
src/testdir/test_vim9_expr.vim
src/typval.c
src/version.c
src/vim9execute.c

index 307a2aec7ddd12e156aa00c135f61a492a4ae767..c3f0ee5c9f88af3eeccc2b823692a2a8c9d5f107 100644 (file)
@@ -2413,13 +2413,11 @@ eval3(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
     static int
 eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
 {
-    typval_T   var2;
     char_u     *p;
     int                getnext;
     int                i;
     exptype_T  type = EXPR_UNKNOWN;
     int                len = 2;
-    int                ic;
 
     /*
      * Get the first variable.
@@ -2472,6 +2470,10 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
      */
     if (type != EXPR_UNKNOWN)
     {
+       typval_T    var2;
+       int         ic;
+       int         vim9script = in_vim9script();
+
        if (getnext)
            *arg = eval_next_line(evalarg);
 
@@ -2487,9 +2489,9 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
            ic = FALSE;
            ++len;
        }
-       // nothing appended: use 'ignorecase'
+       // nothing appended: use 'ignorecase' if not in Vim script
        else
-           ic = p_ic;
+           ic = vim9script ? FALSE : p_ic;
 
        /*
         * Get the second variable.
@@ -2504,8 +2506,7 @@ eval4(char_u **arg, typval_T *rettv, evalarg_T *evalarg)
        {
            int ret;
 
-           if (in_vim9script() && check_compare_types(
-                                                  type, rettv, &var2) == FAIL)
+           if (vim9script && check_compare_types(type, rettv, &var2) == FAIL)
            {
                ret = FAIL;
                clear_tv(rettv);
index 4c9db5cf6303bea2edf47a8e99b63fa48265de00..d6cbd037d366f867b713c92a9b6bfe4df539eea6 100644 (file)
@@ -651,7 +651,7 @@ def Test_expr4_vimscript()
       vim9script
       let var = 0
                < 1
-      assert_equal(1, var)
+      assert_equal(true, var)
   END
   CheckScriptSuccess(lines)
 
@@ -659,7 +659,7 @@ def Test_expr4_vimscript()
       vim9script
       let var = 123
                != 123
-      assert_equal(0, var)
+      assert_equal(false, var)
   END
   CheckScriptSuccess(lines)
 
@@ -667,7 +667,7 @@ def Test_expr4_vimscript()
       vim9script
       let var = 123 ==
                        123
-      assert_equal(1, var)
+      assert_equal(true, var)
   END
   CheckScriptSuccess(lines)
 
@@ -676,7 +676,7 @@ def Test_expr4_vimscript()
       let list = [1, 2, 3]
       let var = list
                is list
-      assert_equal(1, var)
+      assert_equal(true, var)
   END
   CheckScriptSuccess(lines)
 
@@ -685,7 +685,7 @@ def Test_expr4_vimscript()
       let myblob = 0z1234
       let var = myblob
                isnot 0z11
-      assert_equal(1, var)
+      assert_equal(true, var)
   END
   CheckScriptSuccess(lines)
 
@@ -707,6 +707,25 @@ def Test_expr4_vimscript()
       echo 123 is 123
   END
   CheckScriptFailure(lines, 'Cannot use "is" with number')
+
+  # check 'ignorecase' not being used
+  lines =<< trim END
+    vim9script
+    set ignorecase
+    assert_equal(false, 'abc' == 'ABC')
+    assert_equal(false, 'abc' ==# 'ABC')
+    assert_equal(true, 'abc' ==? 'ABC')
+
+    assert_equal(true, 'abc' != 'ABC')
+    assert_equal(true, 'abc' !=# 'ABC')
+    assert_equal(false, 'abc' !=? 'ABC')
+
+    assert_equal(false, 'abc' =~ 'ABC')
+    assert_equal(false, 'abc' =~# 'ABC')
+    assert_equal(true, 'abc' =~? 'ABC')
+    set noignorecase
+  END
+  CheckScriptSuccess(lines)
 enddef
 
 func Test_expr4_fails()
index 9d0c6acd40ee309ce643d541532b2062ff2f51f6..e87f91096ef9ab4f737db5fe26a989c2afa627f3 100644 (file)
@@ -790,8 +790,16 @@ typval_compare(
        }
     }
     clear_tv(typ1);
-    typ1->v_type = VAR_NUMBER;
-    typ1->vval.v_number = n1;
+    if (in_vim9script())
+    {
+       typ1->v_type = VAR_BOOL;
+       typ1->vval.v_number = n1 ? VVAL_TRUE : VVAL_FALSE;
+    }
+    else
+    {
+       typ1->v_type = VAR_NUMBER;
+       typ1->vval.v_number = n1;
+    }
 
     return OK;
 }
index f34bb8dbc09530dce38e35d15dd1027ebd1a2f5f..a26908213ca13409ced1e9436750fecbd53cacd3 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1263,
 /**/
     1262,
 /**/
index d83ac5a301e295b4a8029e906863bdafab48a4aa..c75e095549552919960493ae04c2dab2a4752d0a 100644 (file)
@@ -2017,9 +2017,6 @@ call_def_function(
 
                    typval_compare(tv1, tv2, exptype, ic);
                    clear_tv(tv2);
-                   tv1->v_type = VAR_BOOL;
-                   tv1->vval.v_number = tv1->vval.v_number
-                                                     ? VVAL_TRUE : VVAL_FALSE;
                    --ectx.ec_stack.ga_len;
                }
                break;