From: Yegappan Lakshmanan Date: Thu, 20 Feb 2025 21:20:54 +0000 (+0100) Subject: patch 9.1.1128: patch 9.1.1119 caused a regression with imports X-Git-Tag: v9.1.1128^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e3fed4828c0f909bef25e184c6c19bb0cab8adef;p=thirdparty%2Fvim.git patch 9.1.1128: patch 9.1.1119 caused a regression with imports Problem: patch 9.1.1119 caused a regression with imports (girishji) Solution: revert the script ID change for the class script variable for now (Yegappan Lakshmanan) fixes: #16664 closes: #16670 Signed-off-by: Yegappan Lakshmanan Signed-off-by: Christian Brabandt --- diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim index 8d81697b2c..6937fb3c28 100644 --- a/src/testdir/test_vim9_import.vim +++ b/src/testdir/test_vim9_import.vim @@ -3494,75 +3494,105 @@ def Test_vim9_import_and_class_extends_2() &rtp = save_rtp enddef -" Test for using an autoloaded class from another autoloaded script -def Test_class_from_auloaded_script() +" Test for using an imported class as a type +def Test_use_imported_class_as_type() mkdir('Xdir', 'R') - var save_rtp = &rtp - &rtp = getcwd() - exe 'set rtp^=' .. getcwd() .. '/Xdir' - - mkdir('Xdir/autoload/SomeClass/bar', 'p') - + mkdir('Xdir/autoload', 'D') + mkdir('Xdir/import', 'D') var lines =<< trim END vim9script - - export class Baz - static var v1: string = "v1" - var v2: string = "v2" - def GetName(): string - return "baz" + export class B + var foo: string + def new() + this.foo = 'bar' enddef endclass END - writefile(lines, 'Xdir/autoload/SomeClass/bar/baz.vim', 'D') + writefile(lines, 'Xdir/autoload/b.vim') 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 + import autoload '../autoload/b.vim' + export class A + final AO: b.B = b.B.new() + endclass + var a = A.new() + assert_equal('bar', a.AO.foo) + END + writefile(lines, 'Xdir/import/a.vim') + 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 " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/version.c b/src/version.c index fad08acae4..fc31646662 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1128, /**/ 1127, /**/ diff --git a/src/vim9class.c b/src/vim9class.c index f0413425f6..dc13c4b2e9 100644 --- a/src/vim9class.c +++ b/src/vim9class.c @@ -2053,7 +2053,7 @@ early_ret: tv.v_type = VAR_CLASS; tv.vval.v_class = cl; SOURCING_LNUM = start_lnum; - int rc = set_var_const(cl->class_name, 0, NULL, &tv, FALSE, 0, 0); + int rc = set_var_const(cl->class_name, current_sctx.sc_sid, NULL, &tv, FALSE, 0, 0); if (rc == FAIL) goto cleanup; @@ -2873,7 +2873,7 @@ ex_type(exarg_T *eap) tv.vval.v_class = type->tt_class; ++tv.vval.v_class->class_refcount; } - set_var_const(name_start, 0, NULL, &tv, FALSE, + set_var_const(name_start, current_sctx.sc_sid, NULL, &tv, FALSE, ASSIGN_CONST | ASSIGN_FINAL, 0); done: