diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index eddc8c5..5d6dec1 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -3,6 +3,9 @@
 source check.vim
 source vim9.vim
 
+" TODO: remove later
+let v:disallow_let = 1
+
 let s:appendToMe = 'xxx'
 let s:addToMe = 111
 let g:existing = 'yes'
diff --git a/src/testdir/test_vim9_cmd.vim b/src/testdir/test_vim9_cmd.vim
index da52dc2..2e59286 100644
--- a/src/testdir/test_vim9_cmd.vim
+++ b/src/testdir/test_vim9_cmd.vim
@@ -4,12 +4,15 @@
 source vim9.vim
 source view_util.vim
 
+" TODO: remove later
+let v:disallow_let = 1
+
 def Test_edit_wildcards()
-  let filename = 'Xtest'
+  var filename = 'Xtest'
   edit `=filename`
   assert_equal('Xtest', bufname())
 
-  let filenr = 123
+  var filenr = 123
   edit Xtest`=filenr`
   assert_equal('Xtest123', bufname())
 
@@ -25,7 +28,7 @@
   CheckUnix
   CheckFeature postscript
 
-  let outfile = 'print'
+  var outfile = 'print'
   hardcopy > X`=outfile`.ps
   assert_true(filereadable('Xprint.ps'))
 
@@ -34,10 +37,10 @@
 
 def Test_syn_include_wildcards()
   writefile(['syn keyword Found found'], 'Xthemine.vim')
-  let save_rtp = &rtp
+  var save_rtp = &rtp
   &rtp = '.'
 
-  let fname = 'mine'
+  var fname = 'mine'
   syn include @Group Xthe`=fname`.vim
   assert_match('Found.* contained found', execute('syn list Found'))
 
@@ -46,7 +49,7 @@
 enddef
 
 def Test_echo_linebreak()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
       redir @a
       echo 'one'
@@ -69,7 +72,7 @@
 enddef
 
 def Test_if_linebreak()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
       if 1 &&
             2
@@ -98,9 +101,9 @@
 enddef
 
 def Test_while_linebreak()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
-      let nr = 0
+      var nr = 0
       while nr <
               10 + 3
             nr = nr
@@ -112,7 +115,7 @@
 
   lines =<< trim END
       vim9script
-      let nr = 0
+      var nr = 0
       while nr
             <
               10
@@ -128,9 +131,9 @@
 enddef
 
 def Test_for_linebreak()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
-      let nr = 0
+      var nr = 0
       for x
             in
               [1, 2, 3, 4]
@@ -142,7 +145,7 @@
 
   lines =<< trim END
       vim9script
-      let nr = 0
+      var nr = 0
       for x
             in
               [1, 2,
@@ -158,9 +161,9 @@
 enddef
 
 def Test_method_call_linebreak()
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
-      let res = []
+      var res = []
       func RetArg(
             arg
             )
@@ -175,16 +178,16 @@
 enddef
 
 def Test_dict_member()
-   let 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)
    test.data
       ->reverse()
    assert_equal(#{data: [3, 2, 1]}, test)
 
-  let lines =<< trim END
+  var lines =<< trim END
       vim9script
-      let 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)
   END
@@ -193,14 +196,14 @@
 
 def Test_bar_after_command()
   def RedrawAndEcho()
-    let x = 'did redraw'
+    var x = 'did redraw'
     redraw | echo x
   enddef
   RedrawAndEcho()
   assert_match('did redraw', Screenline(&lines))
 
   def CallAndEcho()
-    let x = 'did redraw'
+    var x = 'did redraw'
     reg_executing() | echo x
   enddef
   CallAndEcho()
@@ -232,14 +235,14 @@
 enddef
 
 def Test_filter_is_not_modifier()
-  let 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)
 enddef
 
 def Test_eval_command()
-  let from = 3
-  let to = 5
+  var from = 3
+  var to = 5
   g:val = 111
   def Increment(nrs: list<number>)
     for nr in nrs
@@ -253,7 +256,7 @@
 enddef
 
 def Test_map_command()
-  let lines =<< trim END
+  var lines =<< trim END
       nnoremap <F3> :echo 'hit F3 #'<CR>
       assert_equal(":echo 'hit F3 #'<CR>", maparg("<F3>", "n"))
   END
@@ -264,7 +267,7 @@
 def Test_normal_command()
   new
   setline(1, 'doesnotexist')
-  let caught = 0
+  var caught = 0
   try
     exe "norm! \<C-]>"
   catch /E433/
diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim
index 39dd513..1c24f77 100644
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -2,6 +2,9 @@
 
 source check.vim
 
+" TODO: remove later
+let v:disallow_let = 1
+
 func NotCompiled()
   echo "not"
 endfunc
@@ -13,7 +16,7 @@
 let t:tabpagevar = 't'
 
 def s:ScriptFuncLoad(arg: string)
-  let local = 1
+  var local = 1
   buffers
   echo arg
   echo local
@@ -41,7 +44,7 @@
   assert_fails('disass 234', 'E129:')
   assert_fails('disass <XX>foo', 'E129:')
 
-  let res = execute('disass s:ScriptFuncLoad')
+  var res = execute('disass s:ScriptFuncLoad')
   assert_match('<SNR>\d*_ScriptFuncLoad.*' ..
         'buffers.*' ..
         ' EXEC \+buffers.*' ..
@@ -76,18 +79,18 @@
 enddef
 
 def s:EditExpand()
-  let filename = "file"
-  let filenr = 123
+  var filename = "file"
+  var filenr = 123
   edit the`=filename``=filenr`.txt
 enddef
 
 def Test_disassemble_exec_expr()
-  let res = execute('disass s:EditExpand')
+  var res = execute('disass s:EditExpand')
   assert_match('<SNR>\d*_EditExpand\_s*' ..
-        ' let filename = "file"\_s*' ..
+        ' var filename = "file"\_s*' ..
         '\d PUSHS "file"\_s*' ..
         '\d STORE $0\_s*' ..
-        ' let filenr = 123\_s*' ..
+        ' var filenr = 123\_s*' ..
         '\d STORE 123 in $1\_s*' ..
         ' edit the`=filename``=filenr`.txt\_s*' ..
         '\d PUSHS "edit the"\_s*' ..
@@ -107,7 +110,7 @@
 enddef
 
 def Test_disassemble_yank_range()
-  let res = execute('disass s:YankRange')
+  var res = execute('disass s:YankRange')
   assert_match('<SNR>\d*_YankRange.*' ..
         ' norm! m\[jjm\]\_s*' ..
         '\d EXEC   norm! m\[jjm\]\_s*' ..
@@ -123,7 +126,7 @@
 enddef
 
 def Test_disassemble_put_expr()
-  let res = execute('disass s:PutExpr')
+  var res = execute('disass s:PutExpr')
   assert_match('<SNR>\d*_PutExpr.*' ..
         ' :3put ="text"\_s*' ..
         '\d PUSHS "text"\_s*' ..
@@ -134,16 +137,16 @@
 enddef
 
 def s:ScriptFuncPush()
-  let localbool = true
-  let localspec = v:none
-  let localblob = 0z1234
+  var localbool = true
+  var localspec = v:none
+  var localblob = 0z1234
   if has('float')
-    let localfloat = 1.234
+    var localfloat = 1.234
   endif
 enddef
 
 def Test_disassemble_push()
-  let res = execute('disass s:ScriptFuncPush')
+  var res = execute('disass s:ScriptFuncPush')
   assert_match('<SNR>\d*_ScriptFuncPush.*' ..
         'localbool = true.*' ..
         ' PUSH v:true.*' ..
@@ -161,9 +164,9 @@
 enddef
 
 def s:ScriptFuncStore()
-  let localnr = 1
+  var localnr = 1
   localnr = 2
-  let localstr = 'abc'
+  var localstr = 'abc'
   localstr = 'xyz'
   v:char = 'abc'
   s:scriptvar = 'sv'
@@ -177,12 +180,12 @@
 enddef
 
 def Test_disassemble_store()
-  let res = execute('disass s:ScriptFuncStore')
+  var res = execute('disass s:ScriptFuncStore')
   assert_match('<SNR>\d*_ScriptFuncStore.*' ..
-        'let localnr = 1.*' ..
+        'var localnr = 1.*' ..
         'localnr = 2.*' ..
         ' STORE 2 in $0.*' ..
-        'let localstr = ''abc''.*' ..
+        'var localstr = ''abc''.*' ..
         'localstr = ''xyz''.*' ..
         ' STORE $1.*' ..
         'v:char = ''abc''.*' ..
@@ -207,16 +210,16 @@
 enddef
 
 def s:ScriptFuncStoreMember()
-  let locallist: list<number> = []
+  var locallist: list<number> = []
   locallist[0] = 123
-  let localdict: dict<number> = {}
+  var localdict: dict<number> = {}
   localdict["a"] = 456
 enddef
 
 def Test_disassemble_store_member()
-  let res = execute('disass s:ScriptFuncStoreMember')
+  var res = execute('disass s:ScriptFuncStoreMember')
   assert_match('<SNR>\d*_ScriptFuncStoreMember\_s*' ..
-        'let locallist: list<number> = []\_s*' ..
+        'var locallist: list<number> = []\_s*' ..
         '\d NEWLIST size 0\_s*' ..
         '\d STORE $0\_s*' ..
         'locallist\[0\] = 123\_s*' ..
@@ -224,7 +227,7 @@
         '\d PUSHNR 0\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d STORELIST\_s*' ..
-        'let localdict: dict<number> = {}\_s*' ..
+        'var localdict: dict<number> = {}\_s*' ..
         '\d NEWDICT size 0\_s*' ..
         '\d STORE $1\_s*' ..
         'localdict\["a"\] = 456\_s*' ..
@@ -238,22 +241,22 @@
 enddef
 
 def s:ListAssign()
-  let x: string
-  let y: string
-  let l: list<any>
+  var x: string
+  var y: string
+  var l: list<any>
   [x, y; l] = g:stringlist
 enddef
 
 def Test_disassemble_list_assign()
-  let res = execute('disass s:ListAssign')
+  var res = execute('disass s:ListAssign')
   assert_match('<SNR>\d*_ListAssign\_s*' ..
-        'let x: string\_s*' ..
+        'var x: string\_s*' ..
         '\d PUSHS "\[NULL\]"\_s*' ..
         '\d STORE $0\_s*' ..
-        'let y: string\_s*' ..
+        'var y: string\_s*' ..
         '\d PUSHS "\[NULL\]"\_s*' ..
         '\d STORE $1\_s*' ..
-        'let l: list<any>\_s*' ..
+        'var l: list<any>\_s*' ..
         '\d NEWLIST size 0\_s*' ..
         '\d STORE $2\_s*' ..
         '\[x, y; l\] = g:stringlist\_s*' ..
@@ -281,7 +284,7 @@
 enddef
 
 def Test_disassemble_unlet()
-  let res = execute('disass s:ScriptFuncUnlet')
+  var res = execute('disass s:ScriptFuncUnlet')
   assert_match('<SNR>\d*_ScriptFuncUnlet\_s*' ..
         'g:somevar = "value"\_s*' ..
         '\d PUSHS "value"\_s*' ..
@@ -306,7 +309,7 @@
 enddef
 
 def Test_disassemble_try()
-  let res = execute('disass s:ScriptFuncTry')
+  var res = execute('disass s:ScriptFuncTry')
   assert_match('<SNR>\d*_ScriptFuncTry\_s*' ..
         'try\_s*' ..
         '\d TRY catch -> \d\+, finally -> \d\+\_s*' ..
@@ -333,20 +336,20 @@
 enddef
 
 def s:ScriptFuncNew()
-  let ll = [1, "two", 333]
-  let dd = #{one: 1, two: "val"}
+  var ll = [1, "two", 333]
+  var dd = #{one: 1, two: "val"}
 enddef
 
 def Test_disassemble_new()
-  let res = execute('disass s:ScriptFuncNew')
+  var res = execute('disass s:ScriptFuncNew')
   assert_match('<SNR>\d*_ScriptFuncNew\_s*' ..
-        'let ll = \[1, "two", 333\]\_s*' ..
+        'var ll = \[1, "two", 333\]\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d PUSHS "two"\_s*' ..
         '\d PUSHNR 333\_s*' ..
         '\d NEWLIST size 3\_s*' ..
         '\d STORE $0\_s*' ..
-        'let 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*' ..
@@ -376,15 +379,15 @@
   s:ScriptFuncNew()
   UserFunc()
   UserFuncWithArg("foo")
-  let FuncRef = function("UserFunc")
+  var FuncRef = function("UserFunc")
   FuncRef()
-  let FuncRefWithArg = function("UserFuncWithArg")
+  var FuncRefWithArg = function("UserFuncWithArg")
   FuncRefWithArg("bar")
   return "yes"
 enddef
 
 def Test_disassemble_call()
-  let res = execute('disass s:ScriptFuncCall')
+  var res = execute('disass s:ScriptFuncCall')
   assert_match('<SNR>\d\+_ScriptFuncCall\_s*' ..
         'changenr()\_s*' ..
         '\d BCALL changenr(argc 0)\_s*' ..
@@ -413,7 +416,7 @@
         '\d\+ PUSHS "foo"\_s*' ..
         '\d\+ UCALL UserFuncWithArg(argc 1)\_s*' ..
         '\d\+ DROP\_s*' ..
-        'let FuncRef = function("UserFunc")\_s*' ..
+        'var FuncRef = function("UserFunc")\_s*' ..
         '\d\+ PUSHS "UserFunc"\_s*' ..
         '\d\+ BCALL function(argc 1)\_s*' ..
         '\d\+ STORE $0\_s*' ..
@@ -421,7 +424,7 @@
         '\d\+ LOAD $\d\_s*' ..
         '\d\+ PCALL (argc 0)\_s*' ..
         '\d\+ DROP\_s*' ..
-        'let FuncRefWithArg = function("UserFuncWithArg")\_s*' ..
+        'var FuncRefWithArg = function("UserFuncWithArg")\_s*' ..
         '\d\+ PUSHS "UserFuncWithArg"\_s*' ..
         '\d\+ BCALL function(argc 1)\_s*' ..
         '\d\+ STORE $1\_s*' ..
@@ -437,7 +440,7 @@
 enddef
 
 def s:CreateRefs()
-  let local = 'a'
+  var local = 'a'
   def Append(arg: string)
     local ..= arg
   enddef
@@ -450,7 +453,7 @@
 
 def Test_disassemble_closure()
   CreateRefs()
-  let res = execute('disass g:Append')
+  var res = execute('disass g:Append')
   assert_match('<lambda>\d\_s*' ..
         'local ..= arg\_s*' ..
         '\d LOADOUTER $0\_s*' ..
@@ -484,7 +487,7 @@
 enddef
 
 def Test_disassemble_pcall()
-  let res = execute('disass s:ScriptPCall')
+  var res = execute('disass s:ScriptPCall')
   assert_match('<SNR>\d\+_ScriptPCall\_s*' ..
         'RefThis()("text")\_s*' ..
         '\d DCALL RefThis(argc 0)\_s*' ..
@@ -507,7 +510,7 @@
 enddef
 
 def Test_disassemble_update_instr()
-  let res = execute('disass s:FuncWithForwardCall')
+  var res = execute('disass s:FuncWithForwardCall')
   assert_match('FuncWithForwardCall\_s*' ..
         'return g:DefinedLater("yes")\_s*' ..
         '\d PUSHS "yes"\_s*' ..
@@ -533,7 +536,7 @@
 enddef
 
 def Test_disassemble_call_default()
-  let res = execute('disass FuncWithDefault')
+  var res = execute('disass FuncWithDefault')
   assert_match('FuncWithDefault\_s*' ..
         '\d PUSHS "default"\_s*' ..
         '\d STORE arg\[-1]\_s*' ..
@@ -574,7 +577,7 @@
 
 def Test_disassemble_const_expr()
   assert_equal("\nyes", execute('HasEval()'))
-  let instr = execute('disassemble HasEval')
+  var instr = execute('disassemble HasEval')
   assert_match('HasEval\_s*' ..
         'if has("eval")\_s*' ..
         'echo "yes"\_s*' ..
@@ -630,7 +633,7 @@
 enddef
 
 def Test_disassemble_return_in_if()
-  let instr = execute('disassemble ReturnInIf')
+  var instr = execute('disassemble ReturnInIf')
   assert_match('ReturnInIf\_s*' ..
         'if g:cond\_s*' ..
         '0 LOADG g:cond\_s*' ..
@@ -646,22 +649,22 @@
 enddef
 
 def WithFunc()
-  let Funky1: func
-  let Funky2: func = function("len")
-  let Party2: func = funcref("UserFunc")
+  var Funky1: func
+  var Funky2: func = function("len")
+  var Party2: func = funcref("UserFunc")
 enddef
 
 def Test_disassemble_function()
-  let instr = execute('disassemble WithFunc')
+  var instr = execute('disassemble WithFunc')
   assert_match('WithFunc\_s*' ..
-        'let Funky1: func\_s*' ..
+        'var Funky1: func\_s*' ..
         '0 PUSHFUNC "\[none]"\_s*' ..
         '1 STORE $0\_s*' ..
-        'let Funky2: func = function("len")\_s*' ..
+        'var Funky2: func = function("len")\_s*' ..
         '2 PUSHS "len"\_s*' ..
         '3 BCALL function(argc 1)\_s*' ..
         '4 STORE $1\_s*' ..
-        'let Party2: func = funcref("UserFunc")\_s*' ..
+        'var Party2: func = funcref("UserFunc")\_s*' ..
         '\d PUSHS "UserFunc"\_s*' ..
         '\d BCALL funcref(argc 1)\_s*' ..
         '\d STORE $2\_s*' ..
@@ -672,25 +675,25 @@
 
 if has('channel')
   def WithChannel()
-    let job1: job
-    let job2: job = job_start("donothing")
-    let chan1: channel
+    var job1: job
+    var job2: job = job_start("donothing")
+    var chan1: channel
   enddef
 endif
 
 def Test_disassemble_channel()
   CheckFeature channel
 
-  let instr = execute('disassemble WithChannel')
+  var instr = execute('disassemble WithChannel')
   assert_match('WithChannel\_s*' ..
-        'let job1: job\_s*' ..
+        'var job1: job\_s*' ..
         '\d PUSHJOB "no process"\_s*' ..
         '\d STORE $0\_s*' ..
-        'let job2: job = job_start("donothing")\_s*' ..
+        'var job2: job = job_start("donothing")\_s*' ..
         '\d PUSHS "donothing"\_s*' ..
         '\d BCALL job_start(argc 1)\_s*' ..
         '\d STORE $1\_s*' ..
-        'let chan1: channel\_s*' ..
+        'var chan1: channel\_s*' ..
         '\d PUSHCHANNEL 0\_s*' ..
         '\d STORE $2\_s*' ..
         '\d PUSHNR 0\_s*' ..
@@ -699,15 +702,15 @@
 enddef
 
 def WithLambda(): string
-  let F = {a -> "X" .. a .. "X"}
+  var F = {a -> "X" .. a .. "X"}
   return F("x")
 enddef
 
 def Test_disassemble_lambda()
   assert_equal("XxX", WithLambda())
-  let instr = execute('disassemble WithLambda')
+  var instr = execute('disassemble WithLambda')
   assert_match('WithLambda\_s*' ..
-        'let F = {a -> "X" .. a .. "X"}\_s*' ..
+        'var F = {a -> "X" .. a .. "X"}\_s*' ..
         '\d FUNCREF <lambda>\d\+\_s*' ..
         '\d STORE $0\_s*' ..
         'return F("x")\_s*' ..
@@ -717,7 +720,7 @@
         '\d RETURN',
         instr)
 
-   let name = substitute(instr, '.*\(<lambda>\d\+\).*', '\1', '')
+   var name = substitute(instr, '.*\(<lambda>\d\+\).*', '\1', '')
    instr = execute('disassemble ' .. name)
    assert_match('<lambda>\d\+\_s*' ..
         'return "X" .. a .. "X"\_s*' ..
@@ -738,7 +741,7 @@
 enddef
 
 def Test_nested_func()
-   let instr = execute('disassemble NestedOuter')
+   var instr = execute('disassemble NestedOuter')
    assert_match('NestedOuter\_s*' ..
         'def g:Inner()\_s*' ..
         'echomsg "inner"\_s*' ..
@@ -760,7 +763,7 @@
   assert_equal("yes", AndOr(1))
   assert_equal("no", AndOr(2))
   assert_equal("yes", AndOr(4))
-  let instr = execute('disassemble AndOr')
+  var instr = execute('disassemble AndOr')
   assert_match('AndOr\_s*' ..
         'if arg == 1 && arg != 2 || arg == 4\_s*' ..
         '\d LOAD arg\[-1]\_s*' ..
@@ -779,7 +782,7 @@
 enddef
 
 def ForLoop(): list<number>
-  let res: list<number>
+  var res: list<number>
   for i in range(3)
     res->add(i)
   endfor
@@ -788,9 +791,9 @@
 
 def Test_disassemble_for_loop()
   assert_equal([0, 1, 2], ForLoop())
-  let instr = execute('disassemble ForLoop')
+  var instr = execute('disassemble ForLoop')
   assert_match('ForLoop\_s*' ..
-        'let res: list<number>\_s*' ..
+        'var res: list<number>\_s*' ..
         '\d NEWLIST size 0\_s*' ..
         '\d STORE $0\_s*' ..
         'for i in range(3)\_s*' ..
@@ -811,7 +814,7 @@
 enddef
 
 def ForLoopEval(): string
-  let res = ""
+  var res = ""
   for str in eval('["one", "two"]')
     res ..= str
   endfor
@@ -820,9 +823,9 @@
 
 def Test_disassemble_for_loop_eval()
   assert_equal('onetwo', ForLoopEval())
-  let instr = execute('disassemble ForLoopEval')
+  var instr = execute('disassemble ForLoopEval')
   assert_match('ForLoopEval\_s*' ..
-        'let res = ""\_s*' ..
+        'var res = ""\_s*' ..
         '\d PUSHS ""\_s*' ..
         '\d STORE $0\_s*' ..
         'for str in eval(''\["one", "two"\]'')\_s*' ..
@@ -850,13 +853,13 @@
 let g:number = 42
 
 def TypeCast()
-  let l: list<number> = [23, <number>g:number]
+  var l: list<number> = [23, <number>g:number]
 enddef
 
 def Test_disassemble_typecast()
-  let instr = execute('disassemble TypeCast')
+  var instr = execute('disassemble TypeCast')
   assert_match('TypeCast.*' ..
-        'let l: list<number> = \[23, <number>g:number\].*' ..
+        'var l: list<number> = \[23, <number>g:number\].*' ..
         '\d PUSHNR 23\_s*' ..
         '\d LOADG g:number\_s*' ..
         '\d CHECKTYPE number stack\[-1\]\_s*' ..
@@ -868,22 +871,22 @@
 enddef
 
 def Computing()
-  let nr = 3
-  let nrres = nr + 7
+  var nr = 3
+  var nrres = nr + 7
   nrres = nr - 7
   nrres = nr * 7
   nrres = nr / 7
   nrres = nr % 7
 
-  let anyres = g:number + 7
+  var anyres = g:number + 7
   anyres = g:number - 7
   anyres = g:number * 7
   anyres = g:number / 7
   anyres = g:number % 7
 
   if has('float')
-    let fl = 3.0
-    let flres = fl + 7.0
+    var fl = 3.0
+    var flres = fl + 7.0
     flres = fl - 7.0
     flres = fl * 7.0
     flres = fl / 7.0
@@ -891,11 +894,11 @@
 enddef
 
 def Test_disassemble_computing()
-  let instr = execute('disassemble Computing')
+  var instr = execute('disassemble Computing')
   assert_match('Computing.*' ..
-        'let nr = 3.*' ..
+        'var nr = 3.*' ..
         '\d STORE 3 in $0.*' ..
-        'let nrres = nr + 7.*' ..
+        'var nrres = nr + 7.*' ..
         '\d LOAD $0.*' ..
         '\d PUSHNR 7.*' ..
         '\d OPNR +.*' ..
@@ -908,7 +911,7 @@
         '\d OPNR /.*' ..
         'nrres = nr % 7.*' ..
         '\d OPNR %.*' ..
-        'let anyres = g:number + 7.*' ..
+        'var anyres = g:number + 7.*' ..
         '\d LOADG g:number.*' ..
         '\d PUSHNR 7.*' ..
         '\d OPANY +.*' ..
@@ -924,10 +927,10 @@
         instr)
   if has('float')
     assert_match('Computing.*' ..
-        'let fl = 3.0.*' ..
+        'var fl = 3.0.*' ..
         '\d PUSHF 3.0.*' ..
         '\d STORE $3.*' ..
-        'let flres = fl + 7.0.*' ..
+        'var flres = fl + 7.0.*' ..
         '\d LOAD $3.*' ..
         '\d PUSHF 7.0.*' ..
         '\d OPFLOAT +.*' ..
@@ -943,14 +946,14 @@
 enddef
 
 def AddListBlob()
-  let reslist = [1, 2] + [3, 4]
-  let resblob = 0z1122 + 0z3344
+  var reslist = [1, 2] + [3, 4]
+  var resblob = 0z1122 + 0z3344
 enddef
 
 def Test_disassemble_add_list_blob()
-  let instr = execute('disassemble AddListBlob')
+  var instr = execute('disassemble AddListBlob')
   assert_match('AddListBlob.*' ..
-        'let reslist = \[1, 2] + \[3, 4].*' ..
+        'var reslist = \[1, 2] + \[3, 4].*' ..
         '\d PUSHNR 1.*' ..
         '\d PUSHNR 2.*' ..
         '\d NEWLIST size 2.*' ..
@@ -959,7 +962,7 @@
         '\d NEWLIST size 2.*' ..
         '\d ADDLIST.*' ..
         '\d STORE $.*.*' ..
-        'let resblob = 0z1122 + 0z3344.*' ..
+        'var resblob = 0z1122 + 0z3344.*' ..
         '\d PUSHBLOB 0z1122.*' ..
         '\d PUSHBLOB 0z3344.*' ..
         '\d ADDBLOB.*' ..
@@ -969,14 +972,14 @@
 
 let g:aa = 'aa'
 def ConcatString(): string
-  let res = g:aa .. "bb"
+  var res = g:aa .. "bb"
   return res
 enddef
 
 def Test_disassemble_concat()
-  let instr = execute('disassemble ConcatString')
+  var instr = execute('disassemble ConcatString')
   assert_match('ConcatString.*' ..
-        'let res = g:aa .. "bb".*' ..
+        'var res = g:aa .. "bb".*' ..
         '\d LOADG g:aa.*' ..
         '\d PUSHS "bb".*' ..
         '\d 2STRING_ANY stack\[-2].*' ..
@@ -987,18 +990,18 @@
 enddef
 
 def StringIndex(): string
-  let s = "abcd"
-  let res = s[1]
+  var s = "abcd"
+  var res = s[1]
   return res
 enddef
 
 def Test_disassemble_string_index()
-  let instr = execute('disassemble StringIndex')
+  var instr = execute('disassemble StringIndex')
   assert_match('StringIndex\_s*' ..
-        'let s = "abcd"\_s*' ..
+        'var s = "abcd"\_s*' ..
         '\d PUSHS "abcd"\_s*' ..
         '\d STORE $0\_s*' ..
-        'let res = s\[1]\_s*' ..
+        'var res = s\[1]\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d STRINDEX\_s*' ..
@@ -1008,18 +1011,18 @@
 enddef
 
 def StringSlice(): string
-  let s = "abcd"
-  let res = s[1:8]
+  var s = "abcd"
+  var res = s[1:8]
   return res
 enddef
 
 def Test_disassemble_string_slice()
-  let instr = execute('disassemble StringSlice')
+  var instr = execute('disassemble StringSlice')
   assert_match('StringSlice\_s*' ..
-        'let s = "abcd"\_s*' ..
+        'var s = "abcd"\_s*' ..
         '\d PUSHS "abcd"\_s*' ..
         '\d STORE $0\_s*' ..
-        'let res = s\[1:8]\_s*' ..
+        'var res = s\[1:8]\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d PUSHNR 8\_s*' ..
@@ -1030,21 +1033,21 @@
 enddef
 
 def ListIndex(): number
-  let l = [1, 2, 3]
-  let res = l[1]
+  var l = [1, 2, 3]
+  var res = l[1]
   return res
 enddef
 
 def Test_disassemble_list_index()
-  let instr = execute('disassemble ListIndex')
+  var instr = execute('disassemble ListIndex')
   assert_match('ListIndex\_s*' ..
-        'let l = \[1, 2, 3]\_s*' ..
+        'var l = \[1, 2, 3]\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d PUSHNR 2\_s*' ..
         '\d PUSHNR 3\_s*' ..
         '\d NEWLIST size 3\_s*' ..
         '\d STORE $0\_s*' ..
-        'let res = l\[1]\_s*' ..
+        'var res = l\[1]\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d LISTINDEX\_s*' ..
@@ -1054,21 +1057,21 @@
 enddef
 
 def ListSlice(): list<number>
-  let l = [1, 2, 3]
-  let res = l[1:8]
+  var l = [1, 2, 3]
+  var res = l[1:8]
   return res
 enddef
 
 def Test_disassemble_list_slice()
-  let instr = execute('disassemble ListSlice')
+  var instr = execute('disassemble ListSlice')
   assert_match('ListSlice\_s*' ..
-        'let l = \[1, 2, 3]\_s*' ..
+        'var l = \[1, 2, 3]\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d PUSHNR 2\_s*' ..
         '\d PUSHNR 3\_s*' ..
         '\d NEWLIST size 3\_s*' ..
         '\d STORE $0\_s*' ..
-        'let res = l\[1:8]\_s*' ..
+        'var res = l\[1:8]\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d PUSHNR 8\_s*' ..
@@ -1079,21 +1082,21 @@
 enddef
 
 def DictMember(): number
-  let d = #{item: 1}
-  let res = d.item
+  var d = #{item: 1}
+  var res = d.item
   res = d["item"]
   return res
 enddef
 
 def Test_disassemble_dict_member()
-  let instr = execute('disassemble DictMember')
+  var instr = execute('disassemble DictMember')
   assert_match('DictMember\_s*' ..
-        'let d = #{item: 1}\_s*' ..
+        'var d = #{item: 1}\_s*' ..
         '\d PUSHS "item"\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d NEWDICT size 1\_s*' ..
         '\d STORE $0\_s*' ..
-        'let res = d.item\_s*' ..
+        'var res = d.item\_s*' ..
         '\d\+ LOAD $0\_s*' ..
         '\d\+ MEMBER item\_s*' ..
         '\d\+ STORE $1\_s*' ..
@@ -1108,14 +1111,14 @@
 
 let somelist = [1, 2, 3, 4, 5]
 def AnyIndex(): number
-  let res = g:somelist[2]
+  var res = g:somelist[2]
   return res
 enddef
 
 def Test_disassemble_any_index()
-  let instr = execute('disassemble AnyIndex')
+  var instr = execute('disassemble AnyIndex')
   assert_match('AnyIndex\_s*' ..
-        'let res = g:somelist\[2\]\_s*' ..
+        'var res = g:somelist\[2\]\_s*' ..
         '\d LOADG g:somelist\_s*' ..
         '\d PUSHNR 2\_s*' ..
         '\d ANYINDEX\_s*' ..
@@ -1129,14 +1132,14 @@
 enddef
 
 def AnySlice(): list<number>
-  let res = g:somelist[1:3]
+  var res = g:somelist[1:3]
   return res
 enddef
 
 def Test_disassemble_any_slice()
-  let instr = execute('disassemble AnySlice')
+  var instr = execute('disassemble AnySlice')
   assert_match('AnySlice\_s*' ..
-        'let res = g:somelist\[1:3\]\_s*' ..
+        'var res = g:somelist\[1:3\]\_s*' ..
         '\d LOADG g:somelist\_s*' ..
         '\d PUSHNR 1\_s*' ..
         '\d PUSHNR 3\_s*' ..
@@ -1151,22 +1154,22 @@
 enddef
 
 def NegateNumber(): number
-  let nr = 9
-  let plus = +nr
-  let res = -nr
+  var nr = 9
+  var plus = +nr
+  var res = -nr
   return res
 enddef
 
 def Test_disassemble_negate_number()
-  let instr = execute('disassemble NegateNumber')
+  var instr = execute('disassemble NegateNumber')
   assert_match('NegateNumber\_s*' ..
-        'let nr = 9\_s*' ..
+        'var nr = 9\_s*' ..
         '\d STORE 9 in $0\_s*' ..
-        'let plus = +nr\_s*' ..
+        'var plus = +nr\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d CHECKNR\_s*' ..
         '\d STORE $1\_s*' ..
-        'let res = -nr\_s*' ..
+        'var res = -nr\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d NEGATENR\_s*' ..
         '\d STORE $2\_s*',
@@ -1175,23 +1178,23 @@
 enddef
 
 def InvertBool(): bool
-  let flag = true
-  let invert = !flag
-  let res = !!flag
+  var flag = true
+  var invert = !flag
+  var res = !!flag
   return res
 enddef
 
 def Test_disassemble_invert_bool()
-  let instr = execute('disassemble InvertBool')
+  var instr = execute('disassemble InvertBool')
   assert_match('InvertBool\_s*' ..
-        'let flag = true\_s*' ..
+        'var flag = true\_s*' ..
         '\d PUSH v:true\_s*' ..
         '\d STORE $0\_s*' ..
-        'let invert = !flag\_s*' ..
+        'var invert = !flag\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d INVERT (!val)\_s*' ..
         '\d STORE $1\_s*' ..
-        'let res = !!flag\_s*' ..
+        'var res = !!flag\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d 2BOOL (!!val)\_s*' ..
         '\d STORE $2\_s*',
@@ -1200,14 +1203,14 @@
 enddef
 
 def ReturnBool(): bool
-  let var: bool = "no" && [] || 123
+  var var: bool = "no" && [] || 123
   return var
 enddef
 
 def Test_disassemble_return_bool()
-  let instr = execute('disassemble ReturnBool')
+  var instr = execute('disassemble ReturnBool')
   assert_match('ReturnBool\_s*' ..
-        'let var: bool = "no" && \[\] || 123\_s*' ..
+        'var var: bool = "no" && \[\] || 123\_s*' ..
         '0 PUSHS "no"\_s*' ..
         '1 JUMP_AND_KEEP_IF_FALSE -> 3\_s*' ..
         '2 NEWLIST size 0\_s*' ..
@@ -1223,7 +1226,7 @@
 enddef
 
 def Test_disassemble_compare()
-  let cases = [
+  var cases = [
         ['true == isFalse', 'COMPAREBOOL =='],
         ['true != isFalse', 'COMPAREBOOL !='],
         ['v:none == isNull', 'COMPARESPECIAL =='],
@@ -1279,7 +1282,7 @@
         ['77 is g:xx', 'COMPAREANY is'],
         ['77 isnot g:xx', 'COMPAREANY isnot'],
         ]
-  let floatDecl = ''
+  var floatDecl = ''
   if has('float')
     cases->extend([
         ['1.1 == aFloat', 'COMPAREFLOAT =='],
@@ -1291,27 +1294,27 @@
         ['1.1 =~ aFloat', 'COMPAREFLOAT =\~'],
         ['1.1 !~ aFloat', 'COMPAREFLOAT !\~'],
         ])
-    floatDecl = 'let aFloat = 2.2'
+    floatDecl = 'var aFloat = 2.2'
   endif
 
-  let nr = 1
+  var nr = 1
   for case in cases
     # declare local variables to get a non-constant with the right type
     writefile(['def TestCase' .. nr .. '()',
-             '  let isFalse = false',
-             '  let isNull = v:null',
-             '  let aNumber = 222',
-             '  let aString = "yy"',
-             '  let aBlob = 0z22',
-             '  let aList = [3, 4]',
-             '  let aDict = #{x: 2}',
+             '  var isFalse = false',
+             '  var isNull = v:null',
+             '  var aNumber = 222',
+             '  var aString = "yy"',
+             '  var aBlob = 0z22',
+             '  var aList = [3, 4]',
+             '  var aDict = #{x: 2}',
              floatDecl,
              '  if ' .. case[0],
              '    echo 42'
              '  endif',
              'enddef'], 'Xdisassemble')
     source Xdisassemble
-    let instr = execute('disassemble TestCase' .. nr)
+    var instr = execute('disassemble TestCase' .. nr)
     assert_match('TestCase' .. nr .. '.*' ..
         'if ' .. substitute(case[0], '[[~]', '\\\0', 'g') .. '.*' ..
         '\d \(PUSH\|FUNCREF\).*' ..
@@ -1327,14 +1330,14 @@
 enddef
 
 def Test_disassemble_compare_const()
-  let cases = [
+  var cases = [
         ['"xx" == "yy"', false],
         ['"aa" == "aa"', true],
         ['has("eval") ? true : false', true],
         ['has("asdf") ? true : false', false],
         ]
 
-  let nr = 1
+  var nr = 1
   for case in cases
     writefile(['def TestCase' .. nr .. '()',
              '  if ' .. case[0],
@@ -1342,7 +1345,7 @@
              '  endif',
              'enddef'], 'Xdisassemble')
     source Xdisassemble
-    let instr = execute('disassemble TestCase' .. nr)
+    var instr = execute('disassemble TestCase' .. nr)
     if case[1]
       # condition true, "echo 42" executed
       assert_match('TestCase' .. nr .. '.*' ..
@@ -1371,25 +1374,25 @@
 
 def s:Execute()
   execute 'help vim9.txt'
-  let cmd = 'help vim9.txt'
+  var cmd = 'help vim9.txt'
   execute cmd
-  let tag = 'vim9.txt'
+  var tag = 'vim9.txt'
   execute 'help ' .. tag
 enddef
 
 def Test_disassemble_execute()
-  let res = execute('disass s:Execute')
+  var res = execute('disass s:Execute')
   assert_match('\<SNR>\d*_Execute\_s*' ..
         "execute 'help vim9.txt'\\_s*" ..
         '\d PUSHS "help vim9.txt"\_s*' ..
         '\d EXECUTE 1\_s*' ..
-        "let cmd = 'help vim9.txt'\\_s*" ..
+        "var cmd = 'help vim9.txt'\\_s*" ..
         '\d PUSHS "help vim9.txt"\_s*' ..
         '\d STORE $0\_s*' ..
         'execute cmd\_s*' ..
         '\d LOAD $0\_s*' ..
         '\d EXECUTE 1\_s*' ..
-        "let tag = 'vim9.txt'\\_s*" ..
+        "var tag = 'vim9.txt'\\_s*" ..
         '\d PUSHS "vim9.txt"\_s*' ..
         '\d STORE $1\_s*' ..
         "execute 'help ' .. tag\\_s*" ..
@@ -1408,7 +1411,7 @@
 enddef
 
 def Test_disassemble_echomsg()
-  let res = execute('disass s:Echomsg')
+  var res = execute('disass s:Echomsg')
   assert_match('\<SNR>\d*_Echomsg\_s*' ..
         "echomsg 'some' 'message'\\_s*" ..
         '\d PUSHS "some"\_s*' ..
@@ -1435,19 +1438,19 @@
 enddef
 
 def Test_display_func()
-  let res1 = execute('function SomeStringArg')
+  var res1 = execute('function SomeStringArg')
   assert_match('.* def SomeStringArg(arg: string)\_s*' ..
         '\d *echo arg.*' ..
         ' *enddef',
         res1)
 
-  let res2 = execute('function SomeAnyArg')
+  var res2 = execute('function SomeAnyArg')
   assert_match('.* def SomeAnyArg(arg: any)\_s*' ..
         '\d *echo arg\_s*' ..
         ' *enddef',
         res2)
 
-  let res3 = execute('function SomeStringArgAndReturn')
+  var res3 = execute('function SomeStringArgAndReturn')
   assert_match('.* def SomeStringArgAndReturn(arg: string): string\_s*' ..
         '\d *return arg\_s*' ..
         ' *enddef',
@@ -1455,7 +1458,7 @@
 enddef
 
 def Test_vim9script_forward_func()
-  let lines =<< trim END
+  var lines =<< trim END
     vim9script
     def FuncOne(): string
       return FuncTwo()
@@ -1492,7 +1495,7 @@
 enddef
 
 def Test_simplify_const_expr()
-  let res = execute('disass s:ConcatStrings')
+  var res = execute('disass s:ConcatStrings')
   assert_match('<SNR>\d*_ConcatStrings\_s*' ..
         "return 'one' .. 'two' .. 'three'\\_s*" ..
         '\d PUSHS "onetwothree"\_s*' ..
@@ -1519,7 +1522,7 @@
 enddef
 
 def Test_shuffle()
-  let res = execute('disass s:CallAppend')
+  var res = execute('disass s:CallAppend')
   assert_match('<SNR>\d*_CallAppend\_s*' ..
         'eval "some text"->append(2)\_s*' ..
         '\d PUSHS "some text"\_s*' ..
diff --git a/src/version.c b/src/version.c
index 7205343..ccedf64 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1761,
+/**/
     1760,
 /**/
     1759,
