]> granicus.if.org Git - vim/commitdiff
patch 8.2.1379: curly braces expression ending in " }" does not work v8.2.1379
authorBram Moolenaar <Bram@vim.org>
Thu, 6 Aug 2020 14:38:12 +0000 (16:38 +0200)
committerBram Moolenaar <Bram@vim.org>
Thu, 6 Aug 2020 14:38:12 +0000 (16:38 +0200)
Problem:    Curly braces expression ending in " }" does not work.
Solution:   Skip over white space when checking for "}". (closes #6634)

src/dict.c
src/testdir/test_eval_stuff.vim
src/version.c

index af1e1e9c8bfbd6d7bb0044d651e8c19da26445ab..ad482cddd5934fb493480edb60f1a350871946cf 100644 (file)
@@ -817,7 +817,7 @@ eval_dict(char_u **arg, typval_T *rettv, evalarg_T *evalarg, int literal)
     {
        if (eval1(&start, &tv, NULL) == FAIL)   // recursive!
            return FAIL;
-       if (*start == '}')
+       if (*skipwhite(start) == '}')
            return NOTDONE;
     }
 
index 6d95cc033865bc366c48eaf3daa9debf7d6be0ca..bca89f7a77cd73a7510179fa79fb1a47cc005aaa 100644 (file)
@@ -532,4 +532,26 @@ func Test_setreg_basic()
   call assert_fails('call setreg(1, ["", "", [], ""])', 'E730:')
 endfunc
 
+func Test_curly_assignment()
+  let s:svar = 'svar'
+  let g:gvar = 'gvar'
+  let lname = 'gvar'
+  let gname = 'gvar'
+  let {'s:'.lname} = {'g:'.gname}
+  call assert_equal('gvar', s:gvar)
+  let s:gvar = ''
+  let { 's:'.lname } = { 'g:'.gname }
+  call assert_equal('gvar', s:gvar)
+  let s:gvar = ''
+  let { 's:' . lname } = { 'g:' . gname }
+  call assert_equal('gvar', s:gvar)
+  let s:gvar = ''
+  let { 's:' .. lname } = { 'g:' .. gname }
+  call assert_equal('gvar', s:gvar)
+
+  unlet s:svar
+  unlet s:gvar
+  unlet g:gvar
+endfunc
+
 " vim: shiftwidth=2 sts=2 expandtab
index ba24f693f5bf94e324855d464fd1cfac116c5019..2ae04a974aa5faa371921021a6e4d90a82d2c802 100644 (file)
@@ -754,6 +754,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1379,
 /**/
     1378,
 /**/