changeset 19848:36d629aa3d6e v8.2.0480

patch 8.2.0480: Vim9: some code is not tested Commit: https://github.com/vim/vim/commit/0b37a2f379f36d097e7fa90a3e86da6a29ed2aaa Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 29 21:38:15 2020 +0200 patch 8.2.0480: Vim9: some code is not tested Problem: Vim9: some code is not tested. Solution: Add more tests.
author Bram Moolenaar <Bram@vim.org>
date Sun, 29 Mar 2020 21:45:03 +0200
parents 8176228268cb
children 2ddc553ce412
files src/testdir/test_vim9_expr.vim src/version.c src/vim9compile.c
diffstat 3 files changed, 40 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -706,9 +706,12 @@ def Test_expr7_list()
   assert_equal(g:list_empty, [])
   assert_equal(g:list_empty, [  ])
   assert_equal(g:list_mixed, [1, 'b', false])
+  assert_equal('b', g:list_mixed[1])
 
   call CheckDefExecFailure("let x = g:anint[3]", 'E714:')
+  call CheckDefFailure("let x = g:list_mixed[xxx]", 'E1001:')
   call CheckDefExecFailure("let x = g:list_mixed['xx']", 'E39:')
+  call CheckDefFailure("let x = g:list_mixed[0", 'E111:')
   call CheckDefExecFailure("let x = g:list_empty[3]", 'E684:')
 enddef
 
@@ -739,6 +742,12 @@ def Test_expr7_dict()
   call CheckDefExecFailure("let x = g:dict_empty.member", 'E716:')
 enddef
 
+def Test_expr_member()
+  assert_equal(1, g:dict_one.one)
+
+  call CheckDefFailure("let x = g:dict_one.#$!", 'E1002:')
+enddef
+
 def Test_expr7_option()
   " option
   set ts=11
@@ -778,6 +787,30 @@ def Test_expr7_parens()
   assert_equal(-6, ---6)
 enddef
 
+def Test_expr7_negate()
+  assert_equal(-99, -99)
+  assert_equal(99, --99)
+  let nr = 88
+  assert_equal(-88, -nr)
+  assert_equal(88, --nr)
+enddef
+
+def Echo(arg): string
+  return arg
+enddef
+
+def s:EchoArg(arg): string
+  return arg
+enddef
+
+def Test_expr7_call()
+  assert_equal('yes', 'yes'->Echo())
+  assert_equal('yes', 'yes'->s:EchoArg())
+
+  call CheckDefFailure("let x = 'yes'->Echo", 'E107:')
+enddef
+
+
 def Test_expr7_not()
   assert_equal(true, !'')
   assert_equal(true, ![])
--- a/src/version.c
+++ b/src/version.c
@@ -739,6 +739,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    480,
+/**/
     479,
 /**/
     478,
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -2622,11 +2622,14 @@ compile_subscript(
 	    else
 	    {
 		// method call:  list->method()
-		for (p = *arg; eval_isnamec1(*p); ++p)
+		p = *arg;
+		if (ASCII_ISALPHA(*p) && p[1] == ':')
+		    p += 2;
+		for ( ; eval_isnamec1(*p); ++p)
 		    ;
 		if (*p != '(')
 		{
-		    semsg(_(e_missing_paren), arg);
+		    semsg(_(e_missing_paren), *arg);
 		    return FAIL;
 		}
 		// TODO: base value may not be the first argument