patch 8.2.2729: Vim9: wrong error message for referring to legacy script var

Problem:    Vim9: wrong error message for referring to legacy script variable.
Solution:   Do allow referring to a variable in legacy script without "s:" if
            it exists at compile time. (closes #8076)
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 73351b4..c35084d 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1476,6 +1476,41 @@
   CheckDefFailure(['const foo: number'], 'E1021:')
 enddef
 
+def Test_script_local_in_legacy()
+  # OK to define script-local later when prefixed with s:
+  var lines =<< trim END
+    def SetLater()
+      s:legacy = 'two'
+    enddef
+    defcompile
+    let s:legacy = 'one'
+    call SetLater()
+    call assert_equal('two', s:legacy)
+  END
+  CheckScriptSuccess(lines)
+
+  # OK to leave out s: prefix when script-local already defined
+  lines =<< trim END
+    let s:legacy = 'one'
+    def SetNoPrefix()
+      legacy = 'two'
+    enddef
+    call SetNoPrefix()
+    call assert_equal('two', s:legacy)
+  END
+  CheckScriptSuccess(lines)
+
+  # Not OK to leave out s: prefix when script-local defined later
+  lines =<< trim END
+    def SetLaterNoPrefix()
+      legacy = 'two'
+    enddef
+    defcompile
+    let s:legacy = 'one'
+  END
+  CheckScriptFailure(lines, 'E476:', 1)
+enddef
+
 def Test_var_type_check()
   var lines =<< trim END
     vim9script