diff --git a/src/testdir/test_popupwin.vim b/src/testdir/test_popupwin.vim
index 42542a3..50d4715 100644
--- a/src/testdir/test_popupwin.vim
+++ b/src/testdir/test_popupwin.vim
@@ -2172,7 +2172,7 @@
     endfunc
 
     def CreatePopup(text: list<string>)
-      popup_create(text, #{
+      popup_create(text, {
 	    \ minwidth: 30,
 	    \ maxwidth: 30,
 	    \ minheight: 4,
@@ -2717,7 +2717,7 @@
   split
   wincmd b
   assert_equal(2, winnr())
-  var buf = term_start(&shell, #{hidden: 1})
+  var buf = term_start(&shell, {hidden: 1})
   popup_create(buf, {})
   TermWait(buf, 100)
   popup_clear(true)
diff --git a/src/testdir/test_textprop.vim b/src/testdir/test_textprop.vim
index b459413..0720567 100644
--- a/src/testdir/test_textprop.vim
+++ b/src/testdir/test_textprop.vim
@@ -219,15 +219,15 @@
   # Multiple props per line, start on the first, should find the second.
   new
   ['the quikc bronw fox jumsp over the layz dog']->repeat(2)->setline(1)
-  prop_type_add('misspell', #{highlight: 'ErrorMsg'})
+  prop_type_add('misspell', {highlight: 'ErrorMsg'})
   for lnum in [1, 2]
     for col in [8, 14, 24, 38]
-      prop_add(lnum, col, #{type: 'misspell', length: 2})
+      prop_add(lnum, col, {type: 'misspell', length: 2})
     endfor
   endfor
   cursor(1, 8)
-  var expected = {'lnum': 1, 'id': 0, 'col': 14, 'end': 1, 'type': 'misspell', 'length': 2, 'start': 1}
-  var result = prop_find(#{type: 'misspell', skipstart: true}, 'f')
+  var expected = {lnum: 1, id: 0, col: 14, end: 1, type: 'misspell', length: 2, start: 1}
+  var result = prop_find({type: 'misspell', skipstart: true}, 'f')
   assert_equal(expected, result)
 
   prop_type_delete('misspell')
@@ -322,7 +322,7 @@
 endfunc
 
 def Test_prop_add_vim9()
-  prop_type_add('comment', #{
+  prop_type_add('comment', {
       highlight: 'Directory',
       priority: 123,
       start_incl: true,
@@ -336,7 +336,7 @@
   new
   AddPropTypes()
   SetupPropsInFirstLine()
-  assert_equal(1, prop_remove({'type': 'three', 'id': 13, 'both': true, 'all': true}))
+  assert_equal(1, prop_remove({type: 'three', id: 13, both: true, all: true}))
   DeletePropTypes()
   bwipe!
 enddef
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 1d8a86f..635b4be 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -360,26 +360,26 @@
   var lines =<< trim END
       vim9script
       var d: dict<number>
-      extend(d, #{a: 1})
-      assert_equal(#{a: 1}, d)
+      extend(d, {a: 1})
+      assert_equal({a: 1}, d)
 
       var d2: dict<number>
       d2['one'] = 1
-      assert_equal(#{one: 1}, d2)
+      assert_equal({one: 1}, d2)
   END
   CheckScriptSuccess(lines)
 
   lines =<< trim END
       vim9script
       var d: dict<string> = test_null_dict()
-      extend(d, #{a: 'x'})
-      assert_equal(#{a: 'x'}, d)
+      extend(d, {a: 'x'})
+      assert_equal({a: 'x'}, d)
   END
   CheckScriptSuccess(lines)
 
   lines =<< trim END
       vim9script
-      extend(test_null_dict(), #{a: 'x'})
+      extend(test_null_dict(), {a: 'x'})
   END
   CheckScriptFailure(lines, 'E1133:', 2)
 enddef
@@ -487,20 +487,20 @@
 enddef
 
 def Test_assignment_dict()
-  var dict1: dict<bool> = #{one: false, two: true}
-  var dict2: dict<number> = #{one: 1, two: 2}
-  var dict3: dict<string> = #{key: 'value'}
-  var dict4: dict<any> = #{one: 1, two: '2'}
-  var dict5: dict<blob> = #{one: 0z01, two: 0z02}
+  var dict1: dict<bool> = {one: false, two: true}
+  var dict2: dict<number> = {one: 1, two: 2}
+  var dict3: dict<string> = {key: 'value'}
+  var dict4: dict<any> = {one: 1, two: '2'}
+  var dict5: dict<blob> = {one: 0z01, two: 0z02}
 
   # overwrite
   dict3['key'] = 'another'
-  assert_equal(dict3, #{key: 'another'})
+  assert_equal(dict3, {key: 'another'})
   dict3.key = 'yet another'
-  assert_equal(dict3, #{key: 'yet another'})
+  assert_equal(dict3, {key: 'yet another'})
 
   var lines =<< trim END
-    var dd = #{one: 1}
+    var dd = {one: 1}
     dd.one) = 2
   END
   CheckDefFailure(lines, 'E15:', 2)
@@ -508,10 +508,10 @@
   # empty key can be used
   var dd = {}
   dd[""] = 6
-  assert_equal({'': 6}, dd)
+  assert_equal({['']: 6}, dd)
 
   # type becomes dict<any>
-  var somedict = rand() > 0 ? #{a: 1, b: 2} : #{a: 'a', b: 'b'}
+  var somedict = rand() > 0 ? {a: 1, b: 2} : {a: 'a', b: 'b'}
 
   # assignment to script-local dict
   lines =<< trim END
@@ -521,7 +521,7 @@
       test['a'] = 43
       return test
     enddef
-    assert_equal(#{a: 43}, FillDict())
+    assert_equal({a: 43}, FillDict())
   END
   CheckScriptSuccess(lines)
 
@@ -544,7 +544,7 @@
       g:test['a'] = 43
       return g:test
     enddef
-    assert_equal(#{a: 43}, FillDict())
+    assert_equal({a: 43}, FillDict())
   END
   CheckScriptSuccess(lines)
 
@@ -556,7 +556,7 @@
       b:test['a'] = 43
       return b:test
     enddef
-    assert_equal(#{a: 43}, FillDict())
+    assert_equal({a: 43}, FillDict())
   END
   CheckScriptSuccess(lines)
 enddef
@@ -636,7 +636,7 @@
 
     if has('unix') && executable('cat')
       # check with non-null job and channel, types must match
-      thejob = job_start("cat ", #{})
+      thejob = job_start("cat ", {})
       thechannel = job_getchannel(thejob)
       job_stop(thejob, 'kill')
     endif
@@ -827,8 +827,8 @@
   CheckDefFailure(['var name: list<string> = [123]'], 'expected list<string> but got list<number>')
   CheckDefFailure(['var name: list<number> = ["xx"]'], 'expected list<number> but got list<string>')
 
-  CheckDefFailure(['var name: dict<string> = #{key: 123}'], 'expected dict<string> but got dict<number>')
-  CheckDefFailure(['var name: dict<number> = #{key: "xx"}'], 'expected dict<number> but got dict<string>')
+  CheckDefFailure(['var name: dict<string> = {key: 123}'], 'expected dict<string> but got dict<number>')
+  CheckDefFailure(['var name: dict<number> = {key: "xx"}'], 'expected dict<number> but got dict<string>')
 
   CheckDefFailure(['var name = feedkeys("0")'], 'E1031:')
   CheckDefFailure(['var name: number = feedkeys("0")'], 'expected number but got void')
@@ -883,17 +883,17 @@
   for i in range(3)
     nrd[i] = i
   endfor
-  assert_equal({'0': 0, '1': 1, '2': 2}, nrd)
+  assert_equal({0: 0, 1: 1, 2: 2}, nrd)
 
-  CheckDefFailure(["var d: dict<number> = #{a: '', b: true}"], 'E1012: Type mismatch; expected dict<number> but got dict<any>', 1)
-  CheckDefFailure(["var d: dict<dict<number>> = #{x: #{a: '', b: true}}"], 'E1012: Type mismatch; expected dict<dict<number>> but got dict<dict<any>>', 1)
+  CheckDefFailure(["var d: dict<number> = {a: '', b: true}"], 'E1012: Type mismatch; expected dict<number> but got dict<any>', 1)
+  CheckDefFailure(["var d: dict<dict<number>> = {x: {a: '', b: true}}"], 'E1012: Type mismatch; expected dict<dict<number>> but got dict<dict<any>>', 1)
 enddef
 
 def Test_assign_dict_unknown_type()
   var lines =<< trim END
       vim9script
       var mylist = []
-      mylist += [#{one: 'one'}]
+      mylist += [{one: 'one'}]
       def Func()
         var dd = mylist[0]
         assert_equal('one', dd.one)
@@ -905,7 +905,7 @@
   lines =<< trim END
       vim9script
       var mylist = [[]]
-      mylist[0] += [#{one: 'one'}]
+      mylist[0] += [{one: 'one'}]
       def Func()
         var dd = mylist[0][0]
         assert_equal('one', dd.one)
@@ -1010,7 +1010,7 @@
     g:other_var = other
 
     # type is inferred
-    s:dict = {'a': 222}
+    s:dict = {['a']: 222}
     def GetDictVal(key: any)
       g:dict_val = s:dict[key]
     enddef
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 3129734..301b270 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -32,7 +32,7 @@
     enddef
 
     def RetListAny(): list<any>
-      return items({'k': 'v'})
+      return items({k: 'v'})
     enddef
 
     def RetListString(): list<string>
@@ -197,10 +197,10 @@
   assert_equal([1, 3, 2], extend([1, 2], [3], 1))
   assert_equal([1, 3, 2], extend([1, 2], [3], s:number_one))
 
-  assert_equal(#{a: 1, b: 2, c: 3}, extend(#{a: 1, b: 2}, #{c: 3}))
-  assert_equal(#{a: 1, b: 4}, extend(#{a: 1, b: 2}, #{b: 4}))
-  assert_equal(#{a: 1, b: 2}, extend(#{a: 1, b: 2}, #{b: 4}, 'keep'))
-  assert_equal(#{a: 1, b: 2}, extend(#{a: 1, b: 2}, #{b: 4}, s:string_keep))
+  assert_equal({a: 1, b: 2, c: 3}, extend({a: 1, b: 2}, {c: 3}))
+  assert_equal({a: 1, b: 4}, extend({a: 1, b: 2}, {b: 4}))
+  assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, 'keep'))
+  assert_equal({a: 1, b: 2}, extend({a: 1, b: 2}, {b: 4}, s:string_keep))
 
   var res: list<dict<any>>
   extend(res, map([1, 2], {_, v -> {}}))
@@ -210,9 +210,9 @@
   CheckDefFailure(['extend([1, 2], ["x"])'], 'E1013: Argument 2: type mismatch, expected list<number> but got list<string>')
   CheckDefFailure(['extend([1, 2], [3], "x")'], 'E1013: Argument 3: type mismatch, expected number but got string')
 
-  CheckDefFailure(['extend(#{a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<number> but got number')
-  CheckDefFailure(['extend(#{a: 1}, #{b: "x"})'], 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>')
-  CheckDefFailure(['extend(#{a: 1}, #{b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number')
+  CheckDefFailure(['extend({a: 1}, 42)'], 'E1013: Argument 2: type mismatch, expected dict<number> but got number')
+  CheckDefFailure(['extend({a: 1}, {b: "x"})'], 'E1013: Argument 2: type mismatch, expected dict<number> but got dict<string>')
+  CheckDefFailure(['extend({a: 1}, {b: 2}, 1)'], 'E1013: Argument 3: type mismatch, expected string but got number')
 enddef
 
 def Test_extend_return_type()
@@ -254,7 +254,7 @@
   edit Xtestfile1
   hide edit Xtestfile2
   hide enew
-  getbufinfo(#{bufloaded: true, buflisted: true, bufmodified: false})
+  getbufinfo({bufloaded: true, buflisted: true, bufmodified: false})
       ->len()->assert_equal(3)
   bwipe Xtestfile1 Xtestfile2
 enddef
@@ -297,16 +297,16 @@
   var l = getloclist(1)
   l->assert_equal([])
 
-  var d = getloclist(1, #{items: 0})
-  d->assert_equal(#{items: []})
+  var d = getloclist(1, {items: 0})
+  d->assert_equal({items: []})
 enddef
 
 def Test_getqflist_return_type()
   var l = getqflist()
   l->assert_equal([])
 
-  var d = getqflist(#{items: 0})
-  d->assert_equal(#{items: []})
+  var d = getqflist({items: 0})
+  d->assert_equal({items: []})
 enddef
 
 def Test_getreg()
@@ -368,7 +368,7 @@
 enddef
 
 def Test_keys_return_type()
-  const var: list<string> = #{a: 1, b: 2}->keys()
+  const var: list<string> = {a: 1, b: 2}->keys()
   var->assert_equal(['a', 'b'])
 enddef
 
@@ -388,7 +388,7 @@
 def Test_maparg()
   var lnum = str2nr(expand('<sflnum>'))
   map foo bar
-  maparg('foo', '', false, true)->assert_equal(#{
+  maparg('foo', '', false, true)->assert_equal({
         lnum: lnum + 1,
         script: 0,
         mode: ' ',
@@ -428,7 +428,7 @@
 enddef
 
 def Test_remove_return_type()
-  var l = remove(#{one: [1, 2], two: [3, 4]}, 'one')
+  var l = remove({one: [1, 2], two: [3, 4]}, 'one')
   var res = 0
   for n in l
     res += n
@@ -466,8 +466,8 @@
   new
   setline(1, "foo bar")
   :/foo
-  searchcount(#{recompute: true})
-      ->assert_equal(#{
+  searchcount({recompute: true})
+      ->assert_equal({
           exact_match: 1,
           current: 1,
           total: 1,
@@ -496,8 +496,8 @@
 enddef
 
 def Test_setloclist()
-  var items = [#{filename: '/tmp/file', lnum: 1, valid: true}]
-  var what = #{items: items}
+  var items = [{filename: '/tmp/file', lnum: 1, valid: true}]
+  var what = {items: items}
   setqflist([], ' ', what)
   setloclist(0, [], ' ', what)
 enddef
@@ -570,7 +570,7 @@
   else
     botright new
     var winnr = winnr()
-    term_start(&shell, #{curwin: true})
+    term_start(&shell, {curwin: true})
     winnr()->assert_equal(winnr)
     bwipe!
   endif
@@ -586,7 +586,7 @@
 
 def Test_win_splitmove()
   split
-  win_splitmove(1, 2, #{vertical: true, rightbelow: true})
+  win_splitmove(1, 2, {vertical: true, rightbelow: true})
   close
 enddef
 
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index d0f9872..162d795 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -251,18 +251,18 @@
 enddef
 
 def Test_dict_member()
-   var test: dict<list<number>> = {'data': [3, 1, 2]}
+   var test: dict<list<number>> = {data: [3, 1, 2]}
    test.data->sort()
-   assert_equal(#{data: [1, 2, 3]}, test)
+   assert_equal({data: [1, 2, 3]}, test)
    test.data
       ->reverse()
-   assert_equal(#{data: [3, 2, 1]}, test)
+   assert_equal({data: [3, 2, 1]}, test)
 
   var lines =<< trim END
       vim9script
-      var test: dict<list<number>> = {'data': [3, 1, 2]}
+      var test: dict<list<number>> = {data: [3, 1, 2]}
       test.data->sort()
-      assert_equal(#{data: [1, 2, 3]}, test)
+      assert_equal({data: [1, 2, 3]}, test)
   END
   CheckScriptSuccess(lines)
 enddef
@@ -308,9 +308,9 @@
 enddef
 
 def Test_filter_is_not_modifier()
-  var tags = [{'a': 1, 'b': 2}, {'x': 3, 'y': 4}]
+  var tags = [{a: 1, b: 2}, {x: 3, y: 4}]
   filter(tags, { _, v -> has_key(v, 'x') ? 1 : 0 })
-  assert_equal([#{x: 3, y: 4}], tags)
+  assert_equal([{x: 3, y: 4}], tags)
 enddef
 
 def Test_command_modifier_filter()
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index ba230a2..e7445d3 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -390,7 +390,7 @@
 
 def s:ScriptFuncNew()
   var ll = [1, "two", 333]
-  var dd = #{one: 1, two: "val"}
+  var dd = {one: 1, two: "val"}
 enddef
 
 def Test_disassemble_new()
@@ -402,7 +402,7 @@
         '\d PUSHNR 333\_s*' ..
         '\d NEWLIST size 3\_s*' ..
         '\d STORE $0\_s*' ..
-        'var dd = #{one: 1, two: "val"}\_s*' ..
+        'var dd = {one: 1, two: "val"}\_s*' ..
         '\d PUSHS "one"\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d PUSHS "two"\_s*' ..
@@ -1292,7 +1292,7 @@
 enddef
 
 def DictMember(): number
-  var d = #{item: 1}
+  var d = {item: 1}
   var res = d.item
   res = d["item"]
   return res
@@ -1301,7 +1301,7 @@
 def Test_disassemble_dict_member()
   var instr = execute('disassemble DictMember')
   assert_match('DictMember\_s*' ..
-        'var d = #{item: 1}\_s*' ..
+        'var d = {item: 1}\_s*' ..
         '\d PUSHS "item"\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d NEWDICT size 1\_s*' ..
@@ -1473,10 +1473,10 @@
         ['[1, 2] is aList', 'COMPARELIST is'],
         ['[1, 2] isnot aList', 'COMPARELIST isnot'],
 
-        ['#{a: 1} == aDict', 'COMPAREDICT =='],
-        ['#{a: 1} != aDict', 'COMPAREDICT !='],
-        ['#{a: 1} is aDict', 'COMPAREDICT is'],
-        ['#{a: 1} isnot aDict', 'COMPAREDICT isnot'],
+        ['{a: 1} == aDict', 'COMPAREDICT =='],
+        ['{a: 1} != aDict', 'COMPAREDICT !='],
+        ['{a: 1} is aDict', 'COMPAREDICT is'],
+        ['{a: 1} isnot aDict', 'COMPAREDICT isnot'],
 
         ['{->33} == {->44}', 'COMPAREFUNC =='],
         ['{->33} != {->44}', 'COMPAREFUNC !='],
@@ -1519,7 +1519,7 @@
              '  var aString = "yy"',
              '  var aBlob = 0z22',
              '  var aList = [3, 4]',
-             '  var aDict = #{x: 2}',
+             '  var aDict = {x: 2}',
              floatDecl,
              '  if ' .. case[0],
              '    echo 42'
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index d93751e..4d05351 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -27,7 +27,7 @@
                             : 'two')
       assert_equal('one', !!0z1234 ? 'one' : 'two')
       assert_equal('one', !![0] ? 'one' : 'two')
-      assert_equal('one', !!#{x: 0} ? 'one' : 'two')
+      assert_equal('one', !!{x: 0} ? 'one' : 'two')
       var name = 1
       assert_equal('one', name ? 'one' : 'two')
 
@@ -206,7 +206,7 @@
       assert_equal(123, 123 ?? 456)
       assert_equal('yes', 'yes' ?? 456)
       assert_equal([1], [1] ?? 456)
-      assert_equal(#{one: 1}, #{one: 1} ?? 456)
+      assert_equal({one: 1}, {one: 1} ?? 456)
       if has('float')
         assert_equal(0.1, 0.1 ?? 456)
       endif
@@ -553,12 +553,12 @@
       assert_equal(false, [1, 2, 3] == [])
       assert_equal(false, [1, 2, 3] == ['1', '2', '3'])
 
-      assert_equal(true, #{one: 1, two: 2} == #{one: 1, two: 2})
-      assert_equal(false, #{one: 1, two: 2} == #{one: 2, two: 2})
-      assert_equal(false, #{one: 1, two: 2} == #{two: 2})
-      assert_equal(false, #{one: 1, two: 2} == #{})
-      assert_equal(true, g:adict == #{bbb: 8, aaa: 2})
-      assert_equal(false, #{ccc: 9, aaa: 2} == g:adict)
+      assert_equal(true, {one: 1, two: 2} == {one: 1, two: 2})
+      assert_equal(false, {one: 1, two: 2} == {one: 2, two: 2})
+      assert_equal(false, {one: 1, two: 2} == {two: 2})
+      assert_equal(false, {one: 1, two: 2} == {})
+      assert_equal(true, g:adict == {bbb: 8, aaa: 2})
+      assert_equal(false, {ccc: 9, aaa: 2} == g:adict)
 
       assert_equal(true, function('g:Test_expr4_equal') == function('g:Test_expr4_equal'))
       assert_equal(false, function('g:Test_expr4_equal') == function('g:Test_expr4_is'))
@@ -650,12 +650,12 @@
       assert_equal(true, [1, 2, 3] != [])
       assert_equal(true, [1, 2, 3] != ['1', '2', '3'])
 
-      assert_equal(false, #{one: 1, two: 2} != #{one: 1, two: 2})
-      assert_equal(true, #{one: 1, two: 2} != #{one: 2, two: 2})
-      assert_equal(true, #{one: 1, two: 2} != #{two: 2})
-      assert_equal(true, #{one: 1, two: 2} != #{})
-      assert_equal(false, g:adict != #{bbb: 8, aaa: 2})
-      assert_equal(true, #{ccc: 9, aaa: 2} != g:adict)
+      assert_equal(false, {one: 1, two: 2} != {one: 1, two: 2})
+      assert_equal(true, {one: 1, two: 2} != {one: 2, two: 2})
+      assert_equal(true, {one: 1, two: 2} != {two: 2})
+      assert_equal(true, {one: 1, two: 2} != {})
+      assert_equal(false, g:adict != {bbb: 8, aaa: 2})
+      assert_equal(true, {ccc: 9, aaa: 2} != g:adict)
 
       assert_equal(false, function('g:Test_expr4_equal') != function('g:Test_expr4_equal'))
       assert_equal(true, function('g:Test_expr4_equal') != function('g:Test_expr4_is'))
@@ -1197,7 +1197,7 @@
   CheckScriptFailure(lines, 'E730:', 2)
   lines =<< trim END
       vim9script
-      echo 'a' .. #{a: 1}
+      echo 'a' .. {a: 1}
   END
   CheckScriptFailure(lines, 'E731:', 2)
   lines =<< trim END
@@ -1287,7 +1287,7 @@
   call CheckDefFailure(["var x = 6 + xxx"], 'E1001:', 1)
 
   call CheckDefFailure(["var x = 'a' .. [1]"], 'E1105:', 1)
-  call CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1105:', 1)
+  call CheckDefFailure(["var x = 'a' .. {a: 1}"], 'E1105:', 1)
   call CheckDefFailure(["var x = 'a' .. test_void()"], 'E1105:', 1)
   call CheckDefFailure(["var x = 'a' .. 0z32"], 'E1105:', 1)
   call CheckDefFailure(["var x = 'a' .. function('len')"], 'E1105:', 1)
@@ -1469,9 +1469,9 @@
   call CheckDefFailure(["var x = [1] / [2]"], 'E1036:', 1)
   call CheckDefFailure(["var x = [1] % [2]"], 'E1035:', 1)
 
-  call CheckDefFailure(["var x = #{one: 1} * #{two: 2}"], 'E1036:', 1)
-  call CheckDefFailure(["var x = #{one: 1} / #{two: 2}"], 'E1036:', 1)
-  call CheckDefFailure(["var x = #{one: 1} % #{two: 2}"], 'E1035:', 1)
+  call CheckDefFailure(["var x = {one: 1} * {two: 2}"], 'E1036:', 1)
+  call CheckDefFailure(["var x = {one: 1} / {two: 2}"], 'E1036:', 1)
+  call CheckDefFailure(["var x = {one: 1} % {two: 2}"], 'E1035:', 1)
 
   call CheckDefFailure(["var x = 0xff[1]"], 'E1107:', 1)
   if has('float')
@@ -1796,9 +1796,9 @@
       # line continuation inside lambda with "cond ? expr : expr" works
       var ll = range(3)
       map(ll, {k, v -> v % 2 ? {
-                '111': 111 } : {}
+                ['111']: 111 } : {}
             })
-      assert_equal([{}, {'111': 111}, {}], ll)
+      assert_equal([{}, {111: 111}, {}], ll)
 
       ll = range(3)
       map(ll, {k, v -> v == 8 || v
@@ -1814,11 +1814,11 @@
             })
       assert_equal([111, 222, 111], ll)
 
-      var dl = [{'key': 0}, {'key': 22}]->filter({ _, v -> v['key'] })
-      assert_equal([{'key': 22}], dl)
+      var dl = [{key: 0}, {key: 22}]->filter({ _, v -> v['key'] })
+      assert_equal([{key: 22}], dl)
 
-      dl = [{'key': 12}, {'foo': 34}]
-      assert_equal([{'key': 12}], filter(dl,
+      dl = [{key: 12}, {['foo']: 34}]
+      assert_equal([{key: 12}], filter(dl,
             {_, v -> has_key(v, 'key') ? v['key'] == 12 : 0}))
 
       assert_equal(false, LambdaWithComments()(0))
@@ -1846,9 +1846,9 @@
         'E1106: 2 arguments too many')
   CheckDefFailure(["echo 'asdf'->{a -> a}(x)"], 'E1001:', 1)
 
-  CheckDefSuccess(['var Fx = {a -> #{k1: 0,', ' k2: 1}}'])
-  CheckDefFailure(['var Fx = {a -> #{k1: 0', ' k2: 1}}'], 'E722:', 2)
-  CheckDefFailure(['var Fx = {a -> #{k1: 0,', ' k2 1}}'], 'E720:', 2)
+  CheckDefSuccess(['var Fx = {a -> {k1: 0,', ' k2: 1}}'])
+  CheckDefFailure(['var Fx = {a -> {k1: 0', ' k2: 1}}'], 'E722:', 2)
+  CheckDefFailure(['var Fx = {a -> {k1: 0,', ' k2 1}}'], 'E720:', 2)
 
   CheckDefSuccess(['var Fx = {a -> [0,', ' 1]}'])
   CheckDefFailure(['var Fx = {a -> [0', ' 1]}'], 'E696:', 2)
@@ -1894,59 +1894,68 @@
   var lines =<< trim END
       assert_equal(g:dict_empty, {})
       assert_equal(g:dict_empty, {  })
-      assert_equal(g:dict_one, {'one': 1})
+      assert_equal(g:dict_one, {['one']: 1})
       var key = 'one'
       var val = 1
       assert_equal(g:dict_one, {[key]: val})
 
       var numbers: dict<number> = {a: 1, b: 2, c: 3}
-      numbers = #{a: 1}
-      numbers = #{}
+      numbers = {a: 1}
+      numbers = {}
 
       var strings: dict<string> = {a: 'a', b: 'b', c: 'c'}
-      strings = #{a: 'x'}
-      strings = #{}
+      strings = {a: 'x'}
+      strings = {}
+
+      var dash = {xx-x: 8}
+      assert_equal({['xx-x']: 8}, dash)
+
+      var dnr = {8: 8}
+      assert_equal({['8']: 8}, dnr)
 
       var mixed: dict<any> = {a: 'a', b: 42}
-      mixed = #{a: 'x'}
-      mixed = #{a: 234}
-      mixed = #{}
+      mixed = {a: 'x'}
+      mixed = {a: 234}
+      mixed = {}
 
-      var dictlist: dict<list<string>> = #{absent: [], present: ['hi']}
-      dictlist = #{absent: ['hi'], present: []}
-      dictlist = #{absent: [], present: []}
+      var dictlist: dict<list<string>> = {absent: [], present: ['hi']}
+      dictlist = {absent: ['hi'], present: []}
+      dictlist = {absent: [], present: []}
 
-      var dictdict: dict<dict<string>> = #{one: #{a: 'text'}, two: #{}}
-      dictdict = #{one: #{}, two: #{a: 'text'}}
-      dictdict = #{one: #{}, two: #{}}
+      var dictdict: dict<dict<string>> = {one: {a: 'text'}, two: {}}
+      dictdict = {one: {}, two: {a: 'text'}}
+      dictdict = {one: {}, two: {}}
 
-      assert_equal({'': 0}, {matchstr('string', 'wont match'): 0})
+      assert_equal({['']: 0}, {[matchstr('string', 'wont match')]: 0})
 
       assert_equal(g:test_space_dict, {['']: 'empty', [' ']: 'space'})
       assert_equal(g:test_hash_dict, {one: 1, two: 2})
   END
   CheckDefAndScriptSuccess(lines)
  
-  CheckDefFailure(["var x = #{a:8}"], 'E1069:', 1)
-  CheckDefFailure(["var x = #{a : 8}"], 'E1068:', 1)
-  CheckDefFailure(["var x = #{a :8}"], 'E1068:', 1)
-  CheckDefFailure(["var x = #{a: 8 , b: 9}"], 'E1068:', 1)
-  CheckDefFailure(["var x = #{a: 1,b: 2}"], 'E1069:', 1)
+  # legacy syntax doesn't work
+  CheckDefFailure(["var x = #{key: 8}"], 'E1097:', 2)
+  CheckDefFailure(["var x = {'key': 8}"], 'E1014:', 1)
+  CheckDefFailure(["var x = 'a' .. #{a: 1}"], 'E1097:', 2)
 
-  CheckDefFailure(["var x = #{8: 8}"], 'E1014:', 1)
-  CheckDefFailure(["var x = #{xxx}"], 'E720:', 1)
-  CheckDefFailure(["var x = #{xxx: 1", "var y = 2"], 'E722:', 2)
-  CheckDefFailure(["var x = #{xxx: 1,"], 'E723:', 2)
-  CheckDefFailure(["var x = {'a': xxx}"], 'E1001:', 1)
-  CheckDefFailure(["var x = {xx-x: 8}"], 'E1001:', 1)
-  CheckDefFailure(["var x = #{a: 1, a: 2}"], 'E721:', 1)
+  CheckDefFailure(["var x = {a:8}"], 'E1069:', 1)
+  CheckDefFailure(["var x = {a : 8}"], 'E1059:', 1)
+  CheckDefFailure(["var x = {a :8}"], 'E1059:', 1)
+  CheckDefFailure(["var x = {a: 8 , b: 9}"], 'E1068:', 1)
+  CheckDefFailure(["var x = {a: 1,b: 2}"], 'E1069:', 1)
+
+  CheckDefFailure(["var x = {xxx}"], 'E720:', 1)
+  CheckDefFailure(["var x = {xxx: 1", "var y = 2"], 'E722:', 2)
+  CheckDefFailure(["var x = {xxx: 1,"], 'E723:', 2)
+  CheckDefFailure(["var x = {['a']: xxx}"], 'E1001:', 1)
+  CheckDefFailure(["var x = {a: 1, a: 2}"], 'E721:', 1)
   CheckDefExecFailure(["var x = g:anint.member"], 'E715:', 1)
   CheckDefExecFailure(["var x = g:dict_empty.member"], 'E716:', 1)
 
-  CheckDefExecFailure(['var x: dict<number> = #{a: 234, b: "1"}'], 'E1012:', 1)
-  CheckDefExecFailure(['var x: dict<number> = #{a: "x", b: 134}'], 'E1012:', 1)
-  CheckDefExecFailure(['var x: dict<string> = #{a: 234, b: "1"}'], 'E1012:', 1)
-  CheckDefExecFailure(['var x: dict<string> = #{a: "x", b: 134}'], 'E1012:', 1)
+  CheckDefExecFailure(['var x: dict<number> = {a: 234, b: "1"}'], 'E1012:', 1)
+  CheckDefExecFailure(['var x: dict<number> = {a: "x", b: 134}'], 'E1012:', 1)
+  CheckDefExecFailure(['var x: dict<string> = {a: 234, b: "1"}'], 'E1012:', 1)
+  CheckDefExecFailure(['var x: dict<string> = {a: "x", b: 134}'], 'E1012:', 1)
 
   CheckDefFailure(['var x = ({'], 'E723:', 2)
   CheckDefExecFailure(['{}[getftype("")]'], 'E716: Key not present in Dictionary: ""', 1)
@@ -1956,89 +1965,89 @@
   var lines =<< trim END
       vim9script
       var d = {
-		'one':
+		['one']:
 		   1,
-		'two': 2,
+		['two']: 2,
 		   }
-      assert_equal({'one': 1, 'two': 2}, d)
+      assert_equal({one: 1, two: 2}, d)
 
       d = {  # comment
-		'one':
+		['one']:
                 # comment
 
 		   1,
                 # comment
                 # comment
-		'two': 2,
+		['two']: 2,
 		   }
-      assert_equal({'one': 1, 'two': 2}, d)
+      assert_equal({one: 1, two: 2}, d)
   END
   CheckScriptSuccess(lines)
 
   lines =<< trim END
       vim9script
-      var d = { "one": "one", "two": "two", }
-      assert_equal({'one': 'one', 'two': 'two'}, d)
+      var d = { ["one"]: "one", ["two"]: "two", }
+      assert_equal({one: 'one', two: 'two'}, d)
   END
   CheckScriptSuccess(lines)
 
   lines =<< trim END
       vim9script
-      var d = #{one: 1,
+      var d = {one: 1,
 		two: 2,
 	       }
-      assert_equal({'one': 1, 'two': 2}, d)
+      assert_equal({one: 1, two: 2}, d)
   END
   CheckScriptSuccess(lines)
 
   lines =<< trim END
       vim9script
-      var d = #{one:1, two: 2}
+      var d = {one:1, two: 2}
   END
   CheckScriptFailure(lines, 'E1069:', 2)
 
   lines =<< trim END
       vim9script
-      var d = #{one: 1,two: 2}
+      var d = {one: 1,two: 2}
   END
   CheckScriptFailure(lines, 'E1069:', 2)
 
   lines =<< trim END
       vim9script
-      var d = #{one : 1}
+      var d = {one : 1}
   END
-  CheckScriptFailure(lines, 'E1068:', 2)
+  CheckScriptFailure(lines, 'E1059:', 2)
 
   lines =<< trim END
       vim9script
-      var d = #{one:1}
+      var d = {one:1}
   END
   CheckScriptFailure(lines, 'E1069:', 2)
 
   lines =<< trim END
       vim9script
-      var d = #{one: 1 , two: 2}
+      var d = {one: 1 , two: 2}
   END
   CheckScriptFailure(lines, 'E1068:', 2)
 
   lines =<< trim END
     vim9script
-    var l: dict<number> = #{a: 234, b: 'x'}
+    var l: dict<number> = {a: 234, b: 'x'}
   END
   CheckScriptFailure(lines, 'E1012:', 2)
   lines =<< trim END
     vim9script
-    var l: dict<number> = #{a: 'x', b: 234}
+    var l: dict<number> = {a: 'x', b: 234}
   END
   CheckScriptFailure(lines, 'E1012:', 2)
   lines =<< trim END
     vim9script
-    var l: dict<string> = #{a: 'x', b: 234}
+    var l: dict<string> = {a: 'x', b: 234}
   END
   CheckScriptFailure(lines, 'E1012:', 2)
   lines =<< trim END
     vim9script
-    var l: dict<string> = #{a: 234, b: 'x'}
+    var l: dict<string> = {a: 234, b: 'x'}
   END
   CheckScriptFailure(lines, 'E1012:', 2)
 
@@ -2047,7 +2056,7 @@
       def Failing()
         job_stop()
       enddef
-      var dict = #{name: Failing}
+      var dict = {name: Failing}
   END
   if has('channel')
     CheckScriptFailure(lines, 'E119:', 1)
@@ -2067,15 +2076,15 @@
 		  ])
   assert_equal(1, d
   	.one)
-  d = {'1': 1, '_': 2}
+  d = {1: 1, _: 2}
   assert_equal(1, d
   	.1)
   assert_equal(2, d
   	._)
 
   # getting the one member should clear the dict after getting the item
-  assert_equal('one', #{one: 'one'}.one)
-  assert_equal('one', #{one: 'one'}[g:oneString])
+  assert_equal('one', {one: 'one'}.one)
+  assert_equal('one', {one: 'one'}[g:oneString])
 
   CheckDefFailure(["var x = g:dict_one.#$!"], 'E1002:', 1)
   CheckDefExecFailure(["var d: dict<any>", "echo d['a']"], 'E716:', 2)
@@ -2141,7 +2150,7 @@
     assert_equal([], g:testlist[1:-4])
     assert_equal([], g:testlist[1:-9])
 
-    g:testdict = #{a: 1, b: 2}
+    g:testdict = {a: 1, b: 2}
     assert_equal(1, g:testdict['a'])
     assert_equal(2, g:testdict['b'])
   END
@@ -2172,7 +2181,7 @@
 def Test_expr_member_vim9script()
   var lines =<< trim END
       vim9script
-      var d = #{one:
+      var d = {one:
       		'one',
 		two: 'two',
 		1: 1,
@@ -2406,7 +2415,7 @@
 
       assert_equal(true, !test_null_dict())
       assert_equal(true, !{})
-      assert_equal(false, !{'yes': 'no'})
+      assert_equal(false, !{yes: 'no'})
 
       if has('channel')
 	assert_equal(true, !test_null_job())
@@ -2433,7 +2442,7 @@
   call CheckDefFailure(["var x = +'xx'"], "E1030:", 1)
   call CheckDefFailure(["var x = -0z12"], "E974:", 1)
   call CheckDefExecFailure(["var x = -[8]"], "E39:", 1)
-  call CheckDefExecFailure(["var x = -{'a': 1}"], "E39:", 1)
+  call CheckDefExecFailure(["var x = -{a: 1}"], "E39:", 1)
 
   call CheckDefFailure(["var x = @"], "E1002:", 1)
   call CheckDefFailure(["var x = @<"], "E354:", 1)
@@ -2464,8 +2473,8 @@
   call CheckDefFailure(["'yes'->", "Echo()"], 'E488: Trailing characters: ->', 1)
 
   call CheckDefExecFailure(["[1, 2->len()"], 'E697:', 2)
-  call CheckDefExecFailure(["#{a: 1->len()"], 'E722:', 1)
-  call CheckDefExecFailure(["{'a': 1->len()"], 'E723:', 2)
+  call CheckDefExecFailure(["{a: 1->len()"], 'E451:', 1)
+  call CheckDefExecFailure(["{['a']: 1->len()"], 'E723:', 2)
 endfunc
 
 let g:Funcrefs = [function('add')]
@@ -2507,7 +2516,7 @@
   assert_equal([2, 5, 8], l)
 
   # dict member
-  var d = #{key: 123}
+  var d = {key: 123}
   assert_equal(123, d.key)
 enddef
 
@@ -2594,7 +2603,7 @@
 def Test_expr7_dict_subscript()
   var lines =<< trim END
       vim9script
-      var l = [#{lnum: 2}, #{lnum: 1}]
+      var l = [{lnum: 2}, {lnum: 1}]
       var res = l[0].lnum > l[1].lnum
       assert_true(res)
   END
@@ -2629,7 +2638,7 @@
   assert_equal('1', l[
 	1])
 
-  var d = #{one: 33}
+  var d = {one: 33}
   assert_equal(33, d.
 	one)
 enddef
@@ -2643,9 +2652,9 @@
   bwipe!
 
   var bufnr = bufnr()
-  var loclist = [#{bufnr: bufnr, lnum: 42, col: 17, text: 'wrong'}]
+  var loclist = [{bufnr: bufnr, lnum: 42, col: 17, text: 'wrong'}]
   loclist->setloclist(0)
-  assert_equal([#{bufnr: bufnr,
+  assert_equal([{bufnr: bufnr,
   		lnum: 42,
 		col: 17,
 		text: 'wrong',
@@ -2657,7 +2666,7 @@
 		module: ''}
 		], getloclist(0))
 
-  var result: bool = get(#{n: 0}, 'n', 0)
+  var result: bool = get({n: 0}, 'n', 0)
   assert_equal(false, result)
 enddef
 
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 8cb6ecf..554d890 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -30,7 +30,7 @@
   END
   call writefile(lines, 'XTest_compile_error')
   var buf = RunVimInTerminal('-S XTest_compile_error',
-              #{rows: 10, wait_for_ruler: 0})
+              {rows: 10, wait_for_ruler: 0})
   var text = ''
   for loop in range(100)
     text = ''
@@ -838,16 +838,16 @@
     def DictFunc(arg: dict<number>)
        dictvar = arg
     enddef
-    {'a': 1, 'b': 2}->DictFunc()
-    dictvar->assert_equal(#{a: 1, b: 2})
+    {a: 1, b: 2}->DictFunc()
+    dictvar->assert_equal({a: 1, b: 2})
     def CompiledDict()
-      {'a': 3, 'b': 4}->DictFunc()
+      {a: 3, b: 4}->DictFunc()
     enddef
     CompiledDict()
-    dictvar->assert_equal(#{a: 3, b: 4})
+    dictvar->assert_equal({a: 3, b: 4})
 
-    #{a: 3, b: 4}->DictFunc()
-    dictvar->assert_equal(#{a: 3, b: 4})
+    {a: 3, b: 4}->DictFunc()
+    dictvar->assert_equal({a: 3, b: 4})
 
     ('text')->MyFunc()
     name->assert_equal('text')
@@ -1272,7 +1272,7 @@
   lines =<< trim END
     vim9script
     def Func()
-      var db = #{foo: 1, bar: 2}
+      var db = {foo: 1, bar: 2}
       # comment
       var x = db.asdf
     enddef
@@ -1607,7 +1607,7 @@
           return popup_filter_menu(winid, key)
       enddef
 
-      popup_create('popup', #{filter: Filter})
+      popup_create('popup', {filter: Filter})
       feedkeys("o\r", 'xnt')
   END
   CheckScriptSuccess(lines)
@@ -1639,7 +1639,7 @@
   writefile(['222'], 'XclosureDir/file2')
   writefile(['333'], 'XclosureDir/tdir/file3')
 
-  TreeWalk('XclosureDir')->assert_equal(['file1', 'file2', {'tdir': ['file3']}])
+  TreeWalk('XclosureDir')->assert_equal(['file1', 'file2', {tdir: ['file3']}])
 
   delete('XclosureDir', 'rf')
 enddef
@@ -1672,20 +1672,20 @@
 
 def Test_partial_call()
   var Xsetlist = function('setloclist', [0])
-  Xsetlist([], ' ', {'title': 'test'})
-  getloclist(0, {'title': 1})->assert_equal({'title': 'test'})
+  Xsetlist([], ' ', {title: 'test'})
+  getloclist(0, {title: 1})->assert_equal({title: 'test'})
 
   Xsetlist = function('setloclist', [0, [], ' '])
-  Xsetlist({'title': 'test'})
-  getloclist(0, {'title': 1})->assert_equal({'title': 'test'})
+  Xsetlist({title: 'test'})
+  getloclist(0, {title: 1})->assert_equal({title: 'test'})
 
   Xsetlist = function('setqflist')
-  Xsetlist([], ' ', {'title': 'test'})
-  getqflist({'title': 1})->assert_equal({'title': 'test'})
+  Xsetlist([], ' ', {title: 'test'})
+  getqflist({title: 1})->assert_equal({title: 'test'})
 
   Xsetlist = function('setqflist', [[], ' '])
-  Xsetlist({'title': 'test'})
-  getqflist({'title': 1})->assert_equal({'title': 'test'})
+  Xsetlist({title: 'test'})
+  getqflist({title: 1})->assert_equal({title: 'test'})
 
   var Len: func: number = function('len', ['word'])
   assert_equal(4, Len())
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index e8778c8..dc62705 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -177,14 +177,14 @@
     cl[1] = 88
     constlist->assert_equal([1, [77, 88], 3])
 
-    var vardict = #{five: 5, six: 6}
-    const constdict = #{one: 1, two: vardict, three: 3}
+    var vardict = {five: 5, six: 6}
+    const constdict = {one: 1, two: vardict, three: 3}
     vardict['five'] = 55
     # TODO: does not work yet
     # constdict['two']['six'] = 66
     var cd = constdict['two']
     cd['six'] = 66
-    constdict->assert_equal(#{one: 1, two: #{five: 55, six: 66}, three: 3})
+    constdict->assert_equal({one: 1, two: {five: 55, six: 66}, three: 3})
   END
   CheckDefAndScriptSuccess(lines)
 enddef
@@ -212,14 +212,14 @@
   CheckScriptFailure(['vim9script'] + lines, 'E684:', 3)
 
   lines =<< trim END
-      const dd = #{one: 1, two: 2}
+      const dd = {one: 1, two: 2}
       dd["one"] = 99
   END
   CheckDefExecFailure(lines, 'E1121:', 2)
   CheckScriptFailure(['vim9script'] + lines, 'E741:', 3)
 
   lines =<< trim END
-      const dd = #{one: 1, two: 2}
+      const dd = {one: 1, two: 2}
       dd["three"] = 99
   END
   CheckDefExecFailure(lines, 'E1120:')
@@ -385,7 +385,7 @@
   endtry
   assert_equal(121, n)
 
-  var d = #{one: 1}
+  var d = {one: 1}
   try
     n = d[g:astring]
   catch /E716:/
@@ -775,7 +775,7 @@
     g:imported_func = Exported()
 
     def GetExported(): string
-      var local_dict = #{ref: Exported}
+      var local_dict = {ref: Exported}
       return local_dict.ref()
     enddef
     g:funcref_result = GetExported()
@@ -1133,7 +1133,7 @@
   END
   writefile(export, 'XexportCmd.vim')
 
-  var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', #{
+  var buf = RunVimInTerminal('-c "import Foo from ''./XexportCmd.vim''"', {
                 rows: 6, wait_for_ruler: 0})
   WaitForAssert({-> assert_match('^E1094:', term_getline(buf, 5))})
 
@@ -1733,7 +1733,7 @@
   execute 'echomsg' (n ? '"true"' : '"no"')
   assert_match('^true$', Screenline(&lines))
 
-  echomsg [1, 2, 3] #{a: 1, b: 2}
+  echomsg [1, 2, 3] {a: 1, b: 2}
   assert_match('^\[1, 2, 3\] {''a'': 1, ''b'': 2}$', Screenline(&lines))
 
   CheckDefFailure(['execute xxx'], 'E1001:', 1)
@@ -2024,26 +2024,26 @@
   assert_equal(['one', 'two', 'three'], mylist)
 
   var mydict = {
-      'one': 1,
-      'two': 2,
-      'three':
+      ['one']: 1,
+      ['two']: 2,
+      ['three']:
           3,
       } # comment
-  assert_equal({'one': 1, 'two': 2, 'three': 3}, mydict)
-  mydict = #{
+  assert_equal({one: 1, two: 2, three: 3}, mydict)
+  mydict = {
       one: 1,  # comment
       two:     # comment
            2,  # comment
       three: 3 # comment
       }
-  assert_equal(#{one: 1, two: 2, three: 3}, mydict)
-  mydict = #{
+  assert_equal({one: 1, two: 2, three: 3}, mydict)
+  mydict = {
       one: 1, 
       two: 
            2, 
       three: 3 
       }
-  assert_equal(#{one: 1, two: 2, three: 3}, mydict)
+  assert_equal({one: 1, two: 2, three: 3}, mydict)
 
   assert_equal(
         ['one', 'two', 'three'],
@@ -2864,7 +2864,7 @@
   END
   writefile([''], 'Xdidcmd')
   writefile(lines, 'XcallFunc')
-  var buf = RunVimInTerminal('-S XcallFunc', #{rows: 6})
+  var buf = RunVimInTerminal('-S XcallFunc', {rows: 6})
   # define Afunc() on the command line
   term_sendkeys(buf, ":def Afunc()\<CR>Bfunc()\<CR>enddef\<CR>")
   term_sendkeys(buf, ":call CheckAndQuit()\<CR>")
@@ -2959,7 +2959,7 @@
         g:caught = 'yes'
       endtry
     enddef
-    popup_menu('popup', #{callback: Callback})
+    popup_menu('popup', {callback: Callback})
     feedkeys("\r", 'xt')
   END
   CheckScriptSuccess(lines)
@@ -2981,7 +2981,7 @@
           sleep 1m
           source += l
       enddef
-      var myjob = job_start('echo burp', #{out_cb: Out_cb, exit_cb: Exit_cb, mode: 'raw'})
+      var myjob = job_start('echo burp', {out_cb: Out_cb, exit_cb: Exit_cb, mode: 'raw'})
       sleep 100m
   END
   writefile(lines, 'Xdef')
