patch 9.1.1154: Vim9: not able to use autoload class accross scripts

Problem:  Vim9: not able to use autoload class accross scripts
Solution: make it work, re-enable the test (Yegappan Lakshmanan)

fixes: #15031
closes: #16748

Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
diff --git a/src/evalvars.c b/src/evalvars.c
index 1b11f28..2745ac2 100644
--- a/src/evalvars.c
+++ b/src/evalvars.c
@@ -3087,6 +3087,9 @@
 			dictitem_T *v = find_var_in_ht(ht, 0, name,
 						  flags & EVAL_VAR_NOAUTOLOAD);
 
+			if (v == NULL)
+			    v = find_var_autoload_prefix(name, sid, NULL, NULL);
+
 			if (v != NULL)
 			{
 			    tv = &v->di_tv;
diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim
index aa81851..8376a93 100644
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -3523,77 +3523,111 @@
   source Xdir/import/a.vim
 enddef
 
-" FIXME: The following test currently fails.
-" " Test for using an autoloaded class from another autoloaded script
-" def Test_class_from_auloaded_script()
-"   mkdir('Xdir', 'R')
-"   var save_rtp = &rtp
-"   &rtp = getcwd()
-"   exe 'set rtp^=' .. getcwd() .. '/Xdir'
-"
-"   mkdir('Xdir/autoload/SomeClass/bar', 'p')
-"
-"   var lines =<< trim END
-"     vim9script
-"
-"     export class Baz
-"       static var v1: string = "v1"
-"       var v2: string = "v2"
-"       def GetName(): string
-"         return "baz"
-"       enddef
-"     endclass
-"   END
-"   writefile(lines, 'Xdir/autoload/SomeClass/bar/baz.vim', 'D')
-"
-"   lines =<< trim END
-"     vim9script
-"
-"     import autoload './bar/baz.vim'
-"
-"     export def MyTestFoo(): string
-"       assert_fails('var x = baz.Baz.NonExisting()', 'E1325: Method "NonExisting" not found in class "Baz"')
-"       assert_fails('var x = baz.Baz.foobar', 'E1337: Class variable "foobar" not found in class "Baz"')
-"
-"       const instance = baz.Baz.new()
-"       return $'{instance.GetName()} {baz.Baz.v1} {instance.v2}'
-"     enddef
-"   END
-"   writefile(lines, 'Xdir/autoload/SomeClass/foo.vim', 'D')
-"
-"   lines =<< trim END
-"     vim9script
-"
-"     import autoload 'SomeClass/foo.vim'
-"     import autoload 'SomeClass/bar/baz.vim'
-"
-"     def NotInAutoload()
-"       # Use non-existing class method and variable
-"       assert_fails('var x = baz.Baz.NonExisting()', 'E1325: Method "NonExisting" not found in class "Baz"')
-"
-"       var caught_exception = false
-"       try
-"         var x = baz.Baz.foobar
-"       catch /E1337: Class variable "foobar" not found in class "Baz"/
-"         caught_exception = true
-"       endtry
-"       assert_true(caught_exception)
-"
-"       const instance = baz.Baz.new()
-"       assert_equal("baz v1 v2", $'{instance.GetName()} {baz.Baz.v1} {instance.v2}')
-"     enddef
-"
-"     def InAutoload()
-"       assert_equal("baz v1 v2", foo.MyTestFoo())
-"     enddef
-"
-"     NotInAutoload()
-"     InAutoload()
-"   END
-"   v9.CheckScriptSuccess(lines)
-"
-"   &rtp = save_rtp
-" enddef
+" Test for using an autoloaded class from another autoloaded script
+def Test_class_from_auloaded_script()
+  mkdir('Xdir', 'R')
+  var save_rtp = &rtp
+  &rtp = getcwd()
+  exe 'set rtp^=' .. getcwd() .. '/Xdir'
+
+  mkdir('Xdir/autoload/SomeClass/bar', 'p')
+
+  var lines =<< trim END
+    vim9script
+
+    export class Baz
+      static var v1: string = "v1"
+      var v2: string = "v2"
+      def GetName(): string
+        return "baz"
+      enddef
+    endclass
+  END
+  writefile(lines, 'Xdir/autoload/SomeClass/bar/baz.vim', 'D')
+
+  lines =<< trim END
+    vim9script
+
+    import autoload './bar/baz.vim'
+
+    export def MyTestFoo(): string
+      assert_fails('var x = baz.Baz.NonExisting()', 'E1325: Method "NonExisting" not found in class "Baz"')
+      assert_fails('var x = baz.Baz.foobar', 'E1337: Class variable "foobar" not found in class "Baz"')
+
+      const instance = baz.Baz.new()
+      return $'{instance.GetName()} {baz.Baz.v1} {instance.v2}'
+    enddef
+  END
+  writefile(lines, 'Xdir/autoload/SomeClass/foo.vim', 'D')
+
+  lines =<< trim END
+    vim9script
+
+    import autoload 'SomeClass/foo.vim'
+    import autoload 'SomeClass/bar/baz.vim'
+
+    def NotInAutoload()
+      # Use non-existing class method and variable
+      assert_fails('var x = baz.Baz.NonExisting()', 'E1325: Method "NonExisting" not found in class "Baz"')
+
+      var caught_exception = false
+      try
+        var x = baz.Baz.foobar
+      catch /E1337: Class variable "foobar" not found in class "Baz"/
+        caught_exception = true
+      endtry
+      assert_true(caught_exception)
+
+      const instance = baz.Baz.new()
+      assert_equal("baz v1 v2", $'{instance.GetName()} {baz.Baz.v1} {instance.v2}')
+    enddef
+
+    def InAutoload()
+      assert_equal("baz v1 v2", foo.MyTestFoo())
+    enddef
+
+    NotInAutoload()
+    InAutoload()
+  END
+  v9.CheckScriptSuccess(lines)
+
+  &rtp = save_rtp
+enddef
+
+" Test for using an autoloaded enum from another script
+def Test_enum_from_auloaded_script()
+  mkdir('Xdir', 'R')
+  var save_rtp = &rtp
+  &rtp = getcwd()
+  exe 'set rtp^=' .. getcwd() .. '/Xdir'
+
+  mkdir('Xdir/autoload/', 'p')
+
+  var lines =<< trim END
+    vim9script
+    export enum Color
+      Red,
+      Green,
+      Blue
+    endenum
+  END
+  writefile(lines, 'Xdir/autoload/color.vim', 'D')
+
+  lines =<< trim END
+    vim9script
+
+    import autoload 'color.vim'
+
+    def CheckColor()
+      var c = color.Color.Green
+      assert_equal('Green', c.name)
+    enddef
+    CheckColor()
+  END
+  v9.CheckScriptSuccess(lines)
+
+  &rtp = save_rtp
+enddef
 
 " Test for using a non-exported constant as an instance variable initiazer in an
 " imported class
diff --git a/src/version.c b/src/version.c
index 2d2188a..6e668fc 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1154,
+/**/
     1153,
 /**/
     1152,
diff --git a/src/vim9class.c b/src/vim9class.c
index cbb91f4..1c54474 100644
--- a/src/vim9class.c
+++ b/src/vim9class.c
@@ -2063,7 +2063,7 @@
     tv.v_type = VAR_CLASS;
     tv.vval.v_class = cl;
     SOURCING_LNUM = start_lnum;
-    int rc = set_var_const(cl->class_name, current_sctx.sc_sid, NULL, &tv, FALSE, 0, 0);
+    int rc = set_var_const(cl->class_name, 0, NULL, &tv, FALSE, 0, 0);
     if (rc == FAIL)
 	goto cleanup;