changeset 25042:3f39b6b73019 v8.2.3058

patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis Commit: https://github.com/vim/vim/commit/015cf103115f9a0380ae3e3e85a77792cfe87d49 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jun 26 21:52:02 2021 +0200 patch 8.2.3058: Vim9: cannot use ternary operator in parenthesis Problem: Vim9: cannot use ternary operator in parenthesis. Solution: Do not use "==" for a default argument value. (closes https://github.com/vim/vim/issues/8462)
author Bram Moolenaar <Bram@vim.org>
date Sat, 26 Jun 2021 22:00:05 +0200
parents a0a9b58c07fc
children fc81b4530f92
files src/testdir/test_vim9_func.vim src/userfunc.c src/version.c
diffstat 3 files changed, 15 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -924,6 +924,13 @@ def Test_call_lambda_args()
   CheckDefAndScriptFailure(lines, 'E1172:')
 
   lines =<< trim END
+      var a = 0
+      var b = (a == 0 ? 1 : 2)
+      assert_equal(1, b)
+  END
+  CheckDefAndScriptSuccess(lines)
+
+  lines =<< trim END
       def ShadowLocal()
         var one = 1
         var l = [1, 2, 3]
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -266,13 +266,18 @@ get_function_args(
 	}
 	else
 	{
+	    char_u *np;
+
 	    arg = p;
 	    p = one_function_arg(p, newargs, argtypes, types_optional,
 							 evalarg, FALSE, skip);
 	    if (p == arg)
 		break;
 
-	    if (*skipwhite(p) == '=' && default_args != NULL)
+	    // Recognize " = expr" but not " == expr".  A lambda can have
+	    // "(a = expr" but "(a == expr" is not a lambda.
+	    np = skipwhite(p);
+	    if (*np == '=' && np[1] != '=' && default_args != NULL)
 	    {
 		typval_T	rettv;
 
--- a/src/version.c
+++ b/src/version.c
@@ -756,6 +756,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    3058,
+/**/
     3057,
 /**/
     3056,